.NET Core 3.0: Razor görünümleri değişiklik olduğunda otomatik olarak yeniden derlenmez


94

Belgelere göre , Razor görünümleri, ASP.NET Core 3.0 için yerel ortamlarda değişiklik olduğunda varsayılan olarak yeniden derlenmelidir.

Ancak, projem bunu yerel olarak yapmıyor. Yerel olarak hata ayıklarken bir görünümü değiştirir ve yenilersem, değişiklik yansıtılmaz. Çözümü durdurmalı, yeniden çalıştırmalı ve sonra değişikliği görmeliyim.

Razor sayfaları kullanarak ASP.NET Core 3.0.0 Preview 2 ile Visual Studio 2019 üzerinde varsayılan bir ASP.NET Core Web Uygulaması şablonunda bunu yapıyorum. Bu özelliği etkinleştirmek için ayarları değiştirmem gerekip gerekmediğine dair bir fikriniz var mı?

3.0'IN TAM SÜRÜMÜ İÇİN KASIM 2019'u GÜNCELLE:

Bu soru hala çok sayıda görüş alıyor. Eklemek için birkaç cevap alıntı yapıldı

services.AddControllersWithViews().AddRazorRuntimeCompilation(); 

Sizin için ConfigureServices()işlev Startup.csekledikten sonra Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilationNuget paketi. Benim durumumda, sadece Razor Pages kullanıyorum, bu yüzden aramıyorum AddControllersWithViews(). Bunun yerine, bu benim için çalıştı:

services.AddRazorPages().AddRazorRuntimeCompilation();

.cshtml jilet görünümleri yeniden derlenir. Tekrar kontrol edebilir misin? Bir <h1> Test </h1> eklemeyi deneyin. Uygulamayı başlatın, sayfayı yükleyin. "Test" i görmelisiniz. Sonra bunu <h1> Foo </h1> olarak değiştirin. "Foo" görmelisin.
John-Luke Laue

Çalışmıyor! Çözümü durdurmalı ve başlatmalıyım. Burada yakaladı : drive.google.com/file/d/1xOWQK2SvE2dskSYRdLz9X7iEmAv7BcTN/… - Stok Razor Pages şablonuyla birden çok makinede denediniz.
tarun713

Mac veya PC veya Linux'ta mı çalıştırıyorsunuz? Ayrıca, önizlemeyle ilgili bir sorun olabilir. Asp.net core 2.x kullanmayı deneyebilir misiniz?
John-Luke Laue

PC, Visual Studio 2019 önizlemesi. 2.2 ile denedim ve işe yarıyor! Yani 3.0'da değişen bir şey var.
tarun713

Tamamen güncellenmiş bir .net core 3 / VS üzerindeyim ve eklemek zorunda kaldım .AddRazorRuntimeCompilation();Teşekkürler!
duckwizzle

Yanıtlar:


60

Tamam, görünüşe göre henüz desteklenmiyor :(

Çalışma zamanı derlemesi kaldırıldı ASP.NET Core paylaşılan çerçevesinin Roslyn'e bağlı olmayacak şekilde temizlenmesinin bir sonucu olarak, bu önizleme sürümünde sayfaların ve görünümlerin çalışma zamanı derlemesi desteği de kaldırılmıştır. Bunun yerine, oluşturma zamanında sayfaların ve görünümlerin derlenmesi gerçekleştirilir. Gelecekteki bir önizleme güncellemesinde, bir uygulamada isteğe bağlı olarak çalışma zamanı derleme desteğini etkinleştirmek için bir NuGet paketleri sağlayacağız.

Sorunla ilgili daha fazla bilgiyi buradan okuyabilirsiniz https://github.com/aspnet/Announcements/issues/343

Razor dosyalarının çalışma zamanı derlemesini veya yeniden derlenmesini gerektiren uygulamalar şunları yapmalıdır:

  • Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilationPakete bir referans ekleyin . 3.0.0-preview3 sürümünün bir parçası olarak satışa sunulacak.
  • Uygulamayı ConfigureServicesaşağıdakilere bir çağrı içerecek şekilde güncelleyin AddMvcRazorRuntimeCompilation:

11
AddMvcRazorRuntimeCompilationolan AddRazorRuntimeCompilationASP.Net Çekirdek 3.0 Önizleme 4 ile
DB Fred

56

ASP.NET Core 3 yayın sürümü için:

   services.AddControllersWithViews().AddRazorRuntimeCompilation();

https://docs.microsoft.com/en-us/aspnet/core/mvc/views/view-compilation?view=aspnetcore-3.0

Ayrıca, bağlantıdan alıntılanan yerel geliştirme için koşullu olarak etkinleştirilebilir:

Çalışma zamanı derlemesi, yalnızca yerel geliştirme için kullanılabilir olacak şekilde etkinleştirilebilir. Koşullu olarak bu şekilde etkinleştirmek, yayınlanan çıktının:

Derlenmiş görünümleri kullanır.
Boyut olarak daha küçüktür.
Üretimde dosya izleyicileri etkinleştirmez.

   public Startup(IConfiguration configuration, IWebHostEnvironment env)
    {
        Configuration = configuration;
        Env = env;
    }

    public IWebHostEnvironment Env { get; set; }
    public IConfiguration Configuration { get; }

    public void ConfigureServices(IServiceCollection services)
    {
        IMvcBuilder builder = services.AddRazorPages();

#if DEBUG
            if (Env.IsDevelopment())
            {
                builder.AddRazorRuntimeCompilation();
            }
#endif
    }

NuGet paketinin .Net çekirdek sürümüyle ilgili sürümleri hakkında ipucu. .Net Core 3.0 kullanmanız durumunda, bu Nuget paketinin sonraki sürümlerini seçemezsiniz. Ancak Nuget kitaplığının 3.0.0 sürümü .Net Core 3.0 ile çalışır. .Net Core 3.1 kullanıyorsanız, daha yeni sürümler seçebilirsiniz.
Tore Aurstad

36

Çalışma zamanı görünümü derlemesini ASP.NET Core3'te geri almak için

  1. Referans Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation
  2. Aramak services.AddMvc().AddRazorRuntimeCompilation()
  3. Pakette Microsoft.VisualStudio.Web.CodeGeneration.Designsürüm uyuşmazlığı varsa kaldırınMicrosoft.CodeAnalysis.Common

2
Başkaları için bir ipucu: Nuget kullanırken, "yayın öncesi" kutusunu işaretleyin / işaretleyin.
GeoffM

Varlıkların üretime dağıtılmasını önlemenin bir yolu var mı? PackageReference üzerinde bazı PrivateAssets kombinasyonlarını denedim ama işe yaramadı.
Chet

Core 2.2'de jilet seçenekleri FileProviders'a sahiptir ve herhangi bir yeniden derleme olmadan bile çalışır. Sadece cshtml ve voila'yı düzenleyin. 3. çekirdekte bu özellik kaldırılmıştır. :( github.com/aspnet/AspNetCore/issues/14572
dariol

1
+1 çünkü Microsoft.VisualStudio.Web.CodeGeneration.Design paketini kaldırmak, başka hiçbir yerde bahsetmeyen gizli sosdu.
tkburbidge

@tkburbidge Ben de paketle ilgili bu sorunla karşılaştım. İşin garibi, arka arkaya tamamen aynı olan iki satırım vardı. İkisini de kaldırdım ve derleyebildim. Daha da garip bir şekilde , satırları tekrar yerine koydum ve yine de derleyebildim.
Lynn Yıkılan

26

Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilationPaket kullanılarak çalışma zamanı derlemesi etkinleştirilir . Çalışma zamanı derlemesini etkinleştirmek için uygulamalar şunları yapmalıdır:

  1. Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilationNuGet paketini yükleyin .

  2. Aşağıdakilere Startup.ConfigureServicesbir çağrı içerecek şekilde projenin yöntemini güncelleyin AddRazorRuntimeCompilation:

services
    .AddControllersWithViews()
    .AddRazorRuntimeCompilation();

https://docs.microsoft.com/en-us/aspnet/core/mvc/views/view-compilation?view=aspnetcore-3.0


13

Çalışma zamanı Razor Görünümleri Derlemesini ASP.NET Core 3.1'e geri almak için: To get runtime Razor Views Compilation back in ASP.NET Core 3.1:

  1. Yükle Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilationNuGet paketini .
  2. Startup.ConfigureServicesBir çağrı içerecek şekilde projenin yöntemini güncelleyin AddRazorRuntimeCompilation.
  3. services.AddRazorPages().AddRazorRuntimeCompilation();

    ASP.NET Core 3.1'de jilet dosyası derlemesi


11

Adım 1: Aşağıdaki paketi Çözüm için NuGet Paket Yöneticisi'nden yükleyin.

Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation

Adım 2: Aşağıdaki kodu Startup.cs dosyasının ConfigureServices dosyasına ekleyin

services.AddControllersWithViews (). AddRazorRuntimeCompilation ();

Sayfayı kaydedin ve ardından istemci tarayıcısını yenileyin.

Razor kullanıyorsanız, services.AddRazorPages (). AddRazorRuntimeCompilation ();



5

.NET Core 3.1'de, views.dlldosyanın oluşturulmasını devre dışı bırakmanız gerekir .

  1. Aşağıdaki kodu .csprojdosyanıza ekleyin (projenizin kök dizinine):

    <PropertyGroup>
        <TargetFramework>netcoreapp3.1</TargetFramework>
        <UserSecretsId>...</UserSecretsId>
    
        <!-- add from this line: -->
        <CopyRazorGenerateFilesToPublishDirectory>true</CopyRazorGenerateFilesToPublishDirectory>
        <CopyRefAssembliesToPublishDirectory>false</CopyRefAssembliesToPublishDirectory>
        <MvcRazorCompileOnPublish>false</MvcRazorCompileOnPublish>
        <RazorCompileOnBuild>false</RazorCompileOnBuild>
        <!-- to this line. -->
    
    </PropertyGroup>
    
  2. Çözüm için NuGet Paket Yöneticisi'nden aşağıdaki paketi yükleyin.

    Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation
    
  3. Aşağıdaki kodu dosyanızın ConfigureServicesyöntemine ekleyin Startup.cs:

    services.AddMvc().AddRazorRuntimeCompilation();
    

    Veya

    services.AddControllersWithViews().AddRazorRuntimeCompilation();
    

    Veya

    services.AddRazorPages().AddRazorRuntimeCompilation();
    

Bundan sonra tekrar yayınlayın ve çalıştırın. Çalışacak.


0

Runtime Compilation for Local Development'ı yapılandırmanın en basit yolu, içindeki başlatma profillerini güncellemektir launchSettings.json. Bu yöntem, yerel olarak çalışan bir projeyi yapılandırmak için kod değişikliği gerektirmez (üretiminizi etkilemez).

Resmi belgelere bakın :

  1. Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation öğesini yükleyin. NuGet paketini .
  2. LaunchSettings.json içindeki başlatma profili environmentVariables bölümünü değiştirin:
    • Doğrulama ASPNETCORE_ENVIRONMENT, "Geliştirme" olarak ayarlanmıştır.
    • ASPNETCORE_HOSTINGSTARTUPASSEMBLIES"Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation" olarak ayarlayın .

Misal:

{
  "iisSettings": {
    "windowsAuthentication": false,
    "anonymousAuthentication": true,
    "iisExpress": {
      "applicationUrl": "http://localhost:57676",
      "sslPort": 44364
    }
  },
  "profiles": {
    "IIS Express": {
      "commandName": "IISExpress",
      "launchBrowser": true,
      "environmentVariables": {
        "ASPNETCORE_ENVIRONMENT": "Development",
        "ASPNETCORE_HOSTINGSTARTUPASSEMBLIES": "Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation"
      }
    },
    "RazorPagesApp": {
      "commandName": "Project",
      "launchBrowser": true,
      "applicationUrl": "https://localhost:5001;http://localhost:5000",
      "environmentVariables": {
        "ASPNETCORE_ENVIRONMENT": "Development",
        "ASPNETCORE_HOSTINGSTARTUPASSEMBLIES": "Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation"
      }
    }
  }
}
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.