.NET Core MVC Trang không được làm mới sau khi thay đổi


111

Tôi đang xây dựng .NET Core MVC trên phiên bản 2.2 mới nhất. Tôi gặp sự cố khi thực hiện thay đổi đối với tệp CSHTML và làm mới trang, các thay đổi của tôi không được phản ánh trong trình duyệt. Tôi phải khởi động lại dự án để xem các thay đổi của mình. Điều này đã xảy ra một thời gian vì vậy tôi không chắc chắn chính xác thay đổi nào đã gây ra sự cố này.

Tôi đã thử sử dụng "Bộ nhớ cache trống và Tải lại cứng" của chrome cũng như các trình duyệt khác nhưng không có kết quả. Điều này xảy ra trên Windows và Mac bằng cách sử dụng cả Visual Studio cho Mac và VS Code

Trong một dự án .Net Core mặc định, nó hoạt động tốt vì vậy nó phải là thứ gì đó trong dự án của tôi đã thay đổi trong quá trình thực hiện. Tôi tự hỏi tôi cần bắt đầu từ đâu để gỡ lỗi vấn đề này? Tôi đã cố gắng bình luận hầu hết mọi thứ trong của tôi Startup.csProgram.cskhông có giải pháp.


Tôi đang gặp phải cùng một MissMethodException mà bạn đã đề cập bên dưới ... Bạn đã bao giờ tìm ra nó chưa? Nếu, vậy bạn có thể vui lòng trả lời câu hỏi của bạn?
JohnOsborne

Câu trả lời:


59

Có vẻ như đã có một thay đổi được thực hiện trong ASP.NET Core 2.2 (và tôi không thể tìm thấy bất kỳ thông báo nào về thay đổi này). Nếu bạn không chạy rõ ràng trong môi trường 'Phát triển' thì Chế độ xem Razor được biên dịch và bạn sẽ không thấy bất kỳ thay đổi nào được thực hiện đối với .cshtml

Tuy nhiên, bạn có thể tắt điều này bằng cách sử dụng một số cấu hình trong lớp Khởi động của bạn như sau.

services.AddMvc().AddRazorOptions(options => options.AllowRecompilingViewsOnFileChange = true);

Đối với ASP.NET Core 3.0 và cao hơn, hãy xem câu trả lời của Alexander Christov .


1
Cảm ơn bạn. Tuy nhiên, có vẻ như khi tôi bật tính năng này, thực hiện thay đổi trong html và sau đó làm mới, tôi nhận được ngoại lệ sau: MissingMethodException: Method not found: 'Microsoft.Cci.IMethodReference Microsoft.Cci.ICustomAttribute.Constructor(Microsoft.CodeAnalysis.Emit.EmitContext)'. Microsoft.CodeAnalysis.CSharp.Symbol.Microsoft.CodeAnalysis.ISymbol.GetAttributes() Bất kỳ ý tưởng nào về ngoại lệ này có nghĩa là gì không? Tất cả các trang khác đều tải tốt. Chỉ khi tôi chỉnh sửa tệp và làm mới, tôi mới gặp lỗi này
kevskree 19/1218

3
Điều này đã làm việc cho tôi. Để đặt nó tùy thuộc vào môi trường, hãy thêm IHostingEnosystem vào phương thức Startup và duy trì trong một thuộc tính. Sau đó, sử dụng một cái gì đó nhưservices.AddMvc().AddRazorOptions(options => options.AllowRecompilingViewsOnFileChange = _env.IsEnvironment("MyEnvironment"));
KuriosCurious

1
cảm ơn nó đã hoạt động. Tuy nhiên, tôi nghĩ rằng thật khó xử và ngớ ngẩn khi Microsoft không chính thức công bố những thay đổi lớn như thế này.
Code_Worm

@kevskree, điều tương tự đang xảy ra với tôi
JohnOsborne

1
@Mayank Gupta: xem câu trả lời của Alexander Christov bên dưới ( stackoverflow.com/a/57637903/198990 ). Câu trả lời của anh ấy đã làm việc cho tôi (3,1).
Sandor Drieënhuizen

202

Trong ASP.NET Core 3.0 và cao hơn , RazorViewEngineOptions.AllowRecompilingViewsOnFileChangekhông khả dụng.

Ngạc nhiên rằng việc làm mới chế độ xem trong khi ứng dụng đang chạy không hoạt động, tôi đã phát hiện ra giải pháp sau:

  1. Thêm gói Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation NuGet vào dự án
  2. Thêm phần sau vào Startup.cs:

    services.AddControllersWithViews (). AddRazorRuntimeCompilation () ;

Đây là lời giải thích đầy đủ cho những ...

HTH


1
Điều này không hiệu quả với tôi vì bất cứ lý do gì. Tôi đang sử dụng Mac nếu điều đó tạo ra sự khác biệt.
Nakul Tiruviluamala

@Nakul bạn sử dụng phiên bản lõi .net nào?
Alexander Christov

Khi tôi sử dụng lệnh này: ls /usr/local/share/dotnet/shared/Microsoft.NETCore.App/ tôi dường như có hai câu trả lời: 2.1.13 và 3.0.0
Nakul Tiruviluamala

7
Điều này làm việc tuyệt vời đối với tôi trên Mac và ASP.NET Core 3.1.
user3071284

4
Thx cho gợi ý này; đã làm việc cho tôi trên .Net Core 3.1.2
Hàm

49

Tôi vừa tạo một dự án mới bằng cách sử dụng mẫu ASP.NET MVC Core 3.1 mới nhất và tôi đã thay đổi những điều sau để kích hoạt biên dịch lại thời gian chạy cho Gỡ lỗi:

Tham khảo gói NuGet - Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation .

Startup.cs - ConfigureServices (Dịch vụ IServiceCollection) ĐƯỢC:

// stuff...

services.AddControllersWithViews();

// more stuff...

HIỆN NAY:

// stuff...

var mvcBuilder = services.AddControllersWithViews();

#if DEBUG
    mvcBuilder.AddRazorRuntimeCompilation();
#endif

// more stuff...

1
Đây là câu trả lời hay nhất nếu không đọc bài do Alex đăng, rất đáng để đọc.
Waragi

9

Bạn chỉ nên thêm điều này:

services.AddControllersWithViews();

sang phương thức ConfigureService .

Lưu ý rằng mã dưới đây không có sẵn trong ASP.NET Core 3.1:

services.AddControllersWithViews().AddRazorRuntimeCompilation();

6
Bạn cần cài đặt gói nuget để nó hoạt động Microsoft.AspNetCore.Mvc.Razor.Runtime
Mayank Gupta

4

Dưới đây đã giúp tôi khi các lượt xem nằm trong dự án riêng biệt.

if(HostingEnvironment.IsDevelopment()){ // only in development (optional)
    services.AddMvc().AddRazorOptions(o => {
        o.FileProviders.Add(new PhysicalFileProvider(PATH_TO_PROJECT));
    });
}

Đây là câu trả lời duy nhất phù hợp với tôi khi làm việc với Razor Class Libraries. Chúc mừng!
Sipke Schoorstra

3

Sử dụng ứng dụng .net core 2.2 đang chạy với lệnh dotnet watch run, dự án được khởi động lại sau mỗi lần thay đổi


1

Tôi đã có thể giải quyết vấn đề này trong Rider bằng cách thêm ASPNETCORE_ENVIRONMENT=Developmentbiến môi trường.



0

Có hai cách để giải quyết vấn đề này:

1 . Kiểm tra quyền của thư mục chứa tệp .sln của bạn. Có thể có vấn đề với quyền truy cập tệp vì Visual studio có thể không truy cập tệp khi máy chủ IIS express đang chạy, vì vậy, để phản ánh các thay đổi .cshtml mới mỗi lần bạn cần khởi động lại máy chủ, vì vậy tôi khuyên bạn nên chỉnh sửa quyền truy cập thư mục bằng cách:

Nhấp chuột phải vào thư mục-> thuộc tính-> bảo mật-> nhấp vào nút chỉnh sửa -> kiểm tra tất cả các tùy chọn-> lưu .

Khởi động lại Visual studio để xem các thay đổi.

Nếu điều này không hoạt động thì hãy sử dụng tùy chọn 2.

2. Trong dự án của bạn trong tệp startup.cs, thêm dòng này bên dưới ConfigureServices () trong phương thức:

services.AddMvc (). AddRazorOptions (options => options.AllowRecompilingViewsOnFileChange = true);

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.