.NET Core MVC Halaman Tidak Menyegarkan Setelah Perubahan

113

Saya sedang membangun .NET Core MVC pada versi terbaru 2.2. Saya mendapat masalah saat saya membuat perubahan pada file CSHTML dan menyegarkan halaman, perubahan saya tidak tercermin di browser. Saya harus memulai ulang proyek untuk melihat perubahan saya. Ini telah terjadi untuk sementara waktu sekarang jadi saya tidak yakin perubahan apa yang menyebabkan masalah ini.

Saya telah mencoba menggunakan "Empty Cache and Hard Reload" chrome serta browser lainnya tidak berhasil. Ini terjadi pada Windows dan Mac menggunakan Visual Studio untuk Mac dan VS Code

Dalam proyek .Net Core default, ini berfungsi dengan baik sehingga pasti ada sesuatu dalam proyek saya yang berubah sepanjang jalan. Saya bertanya-tanya dari mana saya harus memulai untuk men-debug masalah ini? Saya sudah mencoba mengomentari hampir semua yang ada di saya Startup.csdan Program.cstanpa resolusi.

kevskree.dll
sumber
Saya menemukan MissingMethodException yang sama dengan yang Anda sebutkan di bawah ... Apakah Anda pernah mengetahuinya? Jika, bisakah Anda menjawab pertanyaan Anda?
JohnOsborne

Jawaban:

59

Tampaknya ada perubahan yang dibuat pada ASP.NET Core 2.2 (dan saya tidak dapat menemukan pengumuman apa pun tentang perubahan ini). Jika Anda tidak secara eksplisit berjalan di lingkungan 'Development', maka Razor Views dikompilasi dan Anda tidak akan melihat perubahan apa pun yang dibuat pada .cshtml

Namun Anda dapat mematikan ini menggunakan beberapa konfigurasi di kelas Startup Anda sebagai berikut.

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

Untuk ASP.NET Core 3.0 dan yang lebih tinggi, lihat jawaban Alexander Christov .

Chris Aitchison
sumber
2
Terima kasih. Namun, tampaknya ketika saya mengaktifkan ini, membuat perubahan di html, dan kemudian menyegarkan, saya mendapatkan pengecualian berikut: MissingMethodException: Method not found: 'Microsoft.Cci.IMethodReference Microsoft.Cci.ICustomAttribute.Constructor(Microsoft.CodeAnalysis.Emit.EmitContext)'. Microsoft.CodeAnalysis.CSharp.Symbol.Microsoft.CodeAnalysis.ISymbol.GetAttributes() Ada ide tentang apa arti pengecualian ini? Semua halaman lain memuat dengan baik. Hanya ketika saya mengedit file dan menyegarkan saya mendapatkan kesalahan ini
kevskree
3
Ini berhasil untuk saya. Untuk menyetelnya bergantung pada lingkungan, tambahkan IHostingEnvironment ke metode Startup dan pertahankan dalam sebuah properti. Kemudian gunakan sesuatu sepertiservices.AddMvc().AddRazorOptions(options => options.AllowRecompilingViewsOnFileChange = _env.IsEnvironment("MyEnvironment"));
KuriosCurious
1
terima kasih itu berhasil. Namun menurut saya cukup aneh dan konyol bahwa Microsoft tidak secara resmi mengumumkan perubahan besar seperti ini.
Code_Worm
@kevskree hal yang sama terjadi pada saya
JohnOsborne
1
@ Mayank Gupta: lihat jawaban Alexander Christov di bawah ini ( stackoverflow.com/a/57637903/198990 ). Jawabannya berhasil untuk saya (3.1).
Sandor Drieënhuizen
208

Di ASP.NET Core 3.0 dan yang lebih tinggi , RazorViewEngineOptions.AllowRecompilingViewsOnFileChangetidak tersedia.

Terkejut bahwa menyegarkan tampilan saat aplikasi berjalan tidak berhasil, saya menemukan solusi berikut:

  1. Tambahkan paket Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation NuGet ke proyek
  2. Tambahkan yang berikut ini di Startup.cs:

    services.AddControllersWithViews (). AddRazorRuntimeCompilation () ;

Berikut penjelasan lengkapnya buat yang penasaran ...

HTH

Alexander Christov
sumber
1
Ini tidak berhasil untuk saya karena alasan apa pun. Saya menggunakan Mac jika itu membuat perbedaan.
Nakul Tiruviluamala
@Nakul apa versi inti .net yang Anda gunakan?
Alexander Christov
Ketika saya menggunakan perintah ini: ls /usr/local/share/dotnet/shared/Microsoft.NETCore.App/ Saya sepertinya mendapat dua jawaban: 2.1.13 dan 3.0.0
Nakul Tiruviluamala
7
Ini bekerja dengan baik untuk saya di Mac dan ASP.NET Core 3.1.
pengguna3071284
4
Terima kasih untuk petunjuk ini; bekerja untuk saya di .Net Core 3.1.2
jawa
50

Saya baru saja membuat proyek baru menggunakan template ASP.NET MVC Core 3.1 terbaru dan saya mengubah yang berikut ini untuk mengaktifkan rekompilasi runtime untuk Debug:

Referensi paket NuGet - Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation .

Startup.cs - ConfigureServices (IServiceCollection services) WS:

// stuff...

services.AddControllersWithViews();

// more stuff...

SEKARANG:

// stuff...

var mvcBuilder = services.AddControllersWithViews();

#if DEBUG
    mvcBuilder.AddRazorRuntimeCompilation();
#endif

// more stuff...
Jeremiah N
sumber
1
Ini adalah jawaban terbaik tanpa membaca artikel yang diposting oleh Alex, yang layak untuk dibaca.
Waragi
10

Anda harus menambahkan ini:

services.AddControllersWithViews();

ke metode ConfigureService .

Sadarilah kode di bawah ini tidak tersedia di ASP.NET Core 3.1:

services.AddControllersWithViews().AddRazorRuntimeCompilation();
Alireza Abdollahnejad
sumber
6
Anda perlu menginstal paket nuget untuk membuatnya berfungsi Microsoft.AspNetCore.Mvc.Razor.Runtime
Mayank Gupta
4

Di bawah ini membantu saya ketika pandangan berada dalam proyek terpisah.

if(HostingEnvironment.IsDevelopment()){ // only in development (optional)
    services.AddMvc().AddRazorOptions(o => {
        o.FileProviders.Add(new PhysicalFileProvider(PATH_TO_PROJECT));
    });
}
smoq
sumber
Ini adalah satu-satunya jawaban yang berhasil bagi saya saat bekerja dengan Perpustakaan Kelas Razor. Bersulang!
Sipke Schoorstra
3

Menggunakan .net core 2.2 menjalankan aplikasi dengan perintah dotnet watch run, proyek dimulai ulang setelah setiap perubahan

tramada
sumber
1

Saya dapat menyelesaikan masalah ini di Rider dengan menambahkan ASPNETCORE_ENVIRONMENT=Developmentvariabel lingkungan.

pengguna1613512
sumber
0

Ada dua cara untuk mengatasi masalah ini:

1 . Periksa izin folder tempat file .sln Anda ada. Mungkin ada masalah dengan izin akses file karena Visual studio mungkin tidak dapat mengakses file saat server IIS ekspres sedang berjalan, jadi untuk mencerminkan perubahan .cshtml baru setiap kali Anda perlu restart server, jadi saya sarankan edit izin akses folder dengan:

Klik kanan pada folder-> properti-> keamanan-> klik tombol edit -> centang semua opsi-> simpan .

Mulai ulang Visual studio untuk melihat perubahan.

Jika ini tidak berhasil, gunakan 2 opsi.

2. Dalam proyek Anda di file startup.cs tambahkan baris di bawah ini ConfigureServices () dalam metode:

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

Omkar Nevase
sumber