.NET Core MVC Sayfası Değişikliklerden Sonra Yenilenmiyor


124

En son sürüm 2.2'de bir .NET Core MVC oluşturuyorum. CSHTML dosyasında değişiklik yaptığımda ve sayfayı yenilediğimde sorun yaşıyorum, değişikliklerim tarayıcıya yansıtılmıyor. Değişikliklerimi görmek için projeyi yeniden başlatmam gerekiyor. Bu bir süredir oluyor, bu yüzden bu soruna hangi değişikliğin neden olduğundan tam olarak emin değilim.

Chrome'un "Önbelleğini Boşalt ve Sabit Yeniden Yükleme" yi ve diğer tarayıcıları boşuna kullanmayı denedim. Bu, hem Mac için Visual Studio hem de VS Code kullanılarak Windows ve Mac'te gerçekleşir

Varsayılan bir .Net Core projesinde iyi çalışıyor, bu yüzden projemde yol boyunca değişen bir şey olmalı. Bu sorunu gidermek için nereden başlamam gerektiğini merak ediyorum? Yaşıyorum benim, neredeyse her şeyi yorumlama denedim Startup.csve Program.cshiçbir çözünürlüğe sahip.


Aşağıda bahsettiğiniz aynı MissingMethodException ile karşılaşıyorum ... Bunu hiç çözdünüz mü? Öyleyse lütfen sorunuza cevap verir misiniz?
IEnjoyEatingVegetables

Rider ve / veya Razor Class Libraries (RCL) ile kullanım için bu yanıta bakın .
Uwe Keim

Yanıtlar:


68

Görünüşe göre ASP.NET Core 2.2'de yapılan bir değişiklik var (ve bu değişiklikle ilgili herhangi bir duyuru bulamıyorum). 'Geliştirme' ortamında açıkça çalıştırmıyorsanız, Razor Görünümleri derlenir ve .cshtml'de yapılan hiçbir değişikliği görmezsiniz.

Bununla birlikte, Başlangıç ​​sınıfınızda aşağıdaki gibi bazı yapılandırmaları kullanarak bunu kapatabilirsiniz.

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

ASP.NET Core 3.0 ve üstü için Alexander Christov'un cevabına bakın .


2
Teşekkür ederim. Ancak, bunu etkinleştirdiğimde, html'de bir değişiklik yaptığımda ve ardından yenilediğimde, şu istisnayı alıyorum: MissingMethodException: Method not found: 'Microsoft.Cci.IMethodReference Microsoft.Cci.ICustomAttribute.Constructor(Microsoft.CodeAnalysis.Emit.EmitContext)'. Microsoft.CodeAnalysis.CSharp.Symbol.Microsoft.CodeAnalysis.ISymbol.GetAttributes() Bu istisnanın ne anlama geldiğine dair bir fikriniz var mı? Diğer tüm sayfalar düzgün yükleniyor. Sadece bir dosyayı düzenleyip yenilediğimde bu hatayı alıyorum
kevskree

3
Bu benim için çalıştı. Ortama bağlı olarak ayarlamak için, Başlangıç ​​yöntemine IHostingEnvironment'ı ekleyin ve bir özellikte devam edin. Öyleyse şöyle bir şey kullanınservices.AddMvc().AddRazorOptions(options => options.AllowRecompilingViewsOnFileChange = _env.IsEnvironment("MyEnvironment"));
KuriosCurious

1
teşekkürler işe yaradı. Ancak, Microsoft'un resmi olarak böyle büyük değişiklikleri duyurmaması oldukça garip ve aptalca olduğunu düşünüyorum.
Code_Worm

@kevskree aynı şey bana da oluyor
IEnjoyEatingVegetables

1
@Mayank Gupta: Aşağıdaki Alexander Christov'un cevabına bakın ( stackoverflow.com/a/57637903/198990 ). Cevabı benim için çalıştı (3.1).
Sandor Drieënhuizen

237

In ASP.NET Çekirdek 3.0 ve üzeri , RazorViewEngineOptions.AllowRecompilingViewsOnFileChangekullanılamaz.

Uygulama çalışırken bir görünümü yenilemenin işe yaramadığına şaşırarak aşağıdaki çözümü keşfettim:

  1. Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation NuGet paketini projeye ekleyin
  2. Aşağıdakileri ekleyin Startup.cs:

    services.AddControllersWithViews (). AddRazorRuntimeCompilation () ;

İşte meraklı için tam açıklama ...

HTH


2
Bu ne sebeple olursa olsun benim için işe yaramadı. Bu bir fark yaratırsa Mac kullanıyorum.
Nakul Tiruviluamala

@Nakul kullandığınız .net çekirdek sürümü nedir?
Alexander Christov

8
Bu benim için Mac ve ASP.NET Core 3.1'de harika çalıştı.
user3071284

4
Bu ipucu için teşekkürler; benim için .Net Core 3.1.2'de çalıştı
jawa

4
Wowsers! NET'te 15 yıl çalışıyordu ve eskiden kolaydı. .NET Core ile 1 gün çalışmak ve her şey bozuk görünüyor. Ve cidden - HTML'yi derlenmiş ve varsayılan olarak çalışma zamanında değiştirilemez hale getirmenin iyi bir fikir olduğuna kim karar verdi?
Jason Snelders

54

En son ASP.NET MVC Core 3.1 şablonunu kullanarak yeni bir proje oluşturdum ve Debug için çalışma zamanı yeniden derlemesini etkinleştirmek için aşağıdakileri değiştirdim:

Başvuru NuGet paketi - Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation .

Startup.cs - ConfigureServices (IServiceCollection hizmetleri) WAS:

// stuff...

services.AddControllersWithViews();

// more stuff...

ŞİMDİ:

// stuff...

var mvcBuilder = services.AddControllersWithViews();

#if DEBUG
    mvcBuilder.AddRazorRuntimeCompilation();
#endif

// more stuff...

2
Alex tarafından yayınlanan ve okunmaya değer makaleyi okumadan en iyi cevap budur.
Waragi

10

Sadece şunu eklemelisin:

services.AddControllersWithViews();

için ConfigureService yöntemi.

Aşağıdaki kodun ASP.NET Core 3.1'de bulunmadığını unutmayın:

services.AddControllersWithViews().AddRazorRuntimeCompilation();

7
Microsoft.AspNetCore.Mvc.Razor.Runtime
Mayank Gupta

5

Aşağıda görüşler ayrı bir projede olduğunda bana yardımcı oldu.

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

1
Razor Sınıf Kitaplıkları ile çalışırken benim için çalışan tek yanıt budur. Şerefe!
Sipke Schoorstra


1

Bu sorunu Rider'da ASPNETCORE_ENVIRONMENT=Developmentortam değişkenini ekleyerek çözebildim .


1

Bu sorunu çözmenin iki yolu vardır:

1 . .Sln dosyanızın bulunduğu klasörün izinlerini kontrol edin. Dosya erişim izinlerinde bir sorun olabilir, çünkü Visual Studio, IIS ekspres sunucusu çalışırken dosyalara erişemeyebilir, bu nedenle her ihtiyacınız olduğunda yeni .cshtml değişikliklerini yansıtmak için sunucuyu yeniden başlatın, bu yüzden klasör erişim izinlerini şu şekilde düzenlemenizi öneririm:

Klasöre sağ tıklayın-> özellikler-> güvenlik-> düzenle düğmesine tıklayın -> tüm seçenekleri kontrol edin-> kaydedin .

Değişiklikleri görmek için Visual Studio'yu yeniden başlatın.

Bu işe yaramazsa, 2 seçeneği kullanın.

2. startup.cs dosyasındaki projenizde aşağıdaki ConfigureServices () satırını yöntemde ekleyin :

services.AddMvc (). AddRazorOptions (seçenekler => seçenekler.AllowRecompilingViewsOnFileChange = true);


1

Net core 3.0 veya üstünü kullananlar için

  1. Araçlar → Nuget paket yöneticisi → Çözüm için nuget paketlerini yönet'e gidin

  2. İnternetten göz atmak için göz at sekmesine gidin

  3. RuntimeCompilation için arama yapın Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation öğesine tıklayın

  4. planladığınız projelere mevcut kararlı sürümü kurun

  5. Startup.cs dosyasını açın

  6. ConfigureServices void yöntemine git

  7. satır ekle: services.AddControllersWithViews().AddRazorRuntimeCompilation();

  8. bitirdiniz

Yeniden çalıştırın ve görün. Artık görünümlerinizi veya sayfalarınızı yenileyebilirsiniz.


Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.