.NET Core 3.0: Tampilan Razor tidak secara otomatis dikompilasi ulang pada perubahan

94

Menurut dokumentasi , tampilan Razor harus, secara default, mengkompilasi ulang perubahan pada lingkungan lokal untuk ASP.NET Core 3.0.

Namun, proyek saya tidak melakukan ini secara lokal. Jika saya mengubah tampilan dan menyegarkan saat saya men-debug secara lokal, perubahan tersebut tidak diterapkan. Saya harus menghentikan solusi, menjalankan kembali, dan kemudian melihat perubahannya.

Saya melakukan ini pada template ASP.NET Core Web Application default pada Visual Studio 2019 dengan ASP.NET Core 3.0.0 Preview 2 menggunakan halaman Razor. Adakah ide jika saya perlu mengubah pengaturan untuk mengaktifkan fitur ini?

UPDATE NOV 2019 FOR 3.0 RILIS LENGKAP:

Pertanyaan ini masih banyak dilihat. Beberapa jawaban telah dikutip untuk ditambahkan

services.AddControllersWithViews().AddRazorRuntimeCompilation(); 

Ke ConfigureServices()fungsi Anda Startup.cssetelah menambahkan Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilationpaket NuGet. Dalam kasus saya, saya hanya menggunakan Razor Pages, jadi saya tidak menelepon AddControllersWithViews(). Sebaliknya, ini berhasil untuk saya:

services.AddRazorPages().AddRazorRuntimeCompilation();
tarun713
sumber
Tampilan pisau cukur .cshtml bisa dikompilasi ulang. Bisakah Anda memeriksa ulang? Coba tambahkan <h1> Tes </h1>. Mulai aplikasi, muat halaman. Anda akan melihat "Test". Kemudian ubah ini menjadi <h1> Foo </h1>. Anda harus melihat "Foo".
John-Luke Laue
Tidak berhasil! Saya harus berhenti dan memulai solusi. Tangkap di sini: drive.google.com/file/d/1xOWQK2SvE2dskSYRdLz9X7iEmAv7BcTN/… - Telah mencoba di beberapa mesin dengan template stok Halaman Razor.
tarun713
Apakah Anda menjalankan di mac atau pc atau linux? Selain itu, mungkin ada masalah dengan pratinjau. Bisakah Anda mencoba menggunakan asp.net core 2.x?
John-Luke Laue
PC, Pratinjau Visual Studio 2019. Saya mencoba dengan 2.2 dan berhasil! Jadi ada sesuatu yang berubah di 3.0.
tarun713
Saya menggunakan .net core 3 / VS yang sepenuhnya diperbarui dan harus menambahkan .AddRazorRuntimeCompilation();Terima kasih!
duckwizzle

Jawaban:

60

Oke, sepertinya itu belum didukung :(

Kompilasi runtime dihapus Sebagai konsekuensi dari pembersihan kerangka bersama ASP.NET Core agar tidak bergantung pada Roslyn, dukungan untuk kompilasi runtime halaman dan tampilan juga telah dihapus dalam rilis pratinjau ini. Sebaliknya, kompilasi halaman dan tampilan dilakukan pada waktu pembuatan. Dalam pembaruan pratinjau mendatang, kami akan menyediakan paket NuGet untuk secara opsional mengaktifkan dukungan kompilasi runtime dalam aplikasi.

Anda dapat membaca lebih lanjut tentang masalah ini di sini https://github.com/aspnet/Announcements/issues/343

Aplikasi yang memerlukan kompilasi runtime atau kompilasi ulang file Razor harus:

  • Tambahkan referensi ke Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilationpaket. Ini akan tersedia sebagai bagian dari rilis 3.0.0-preview3 .
  • Perbarui aplikasi ConfigureServicesuntuk menyertakan panggilan ke AddMvcRazorRuntimeCompilation:
Lukáš Kmoch
sumber
11
AddMvcRazorRuntimeCompilationadalah AddRazorRuntimeCompilationdengan ASP.Net Core 3.0 Preview 4
DB Fred
56

Untuk versi rilis ASP.NET Core 3:

   services.AddControllersWithViews().AddRazorRuntimeCompilation();

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

Ini juga dapat diaktifkan secara bersyarat hanya untuk pengembangan lokal, dikutip dari tautan:

Kompilasi runtime dapat diaktifkan sedemikian rupa sehingga hanya tersedia untuk pengembangan lokal. Pengaktifan bersyarat dengan cara ini memastikan bahwa keluaran yang dipublikasikan:

Menggunakan tampilan yang dikompilasi.
Ukurannya lebih kecil.
Tidak mengaktifkan pengamat file dalam produksi.

   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
    }
Rauland
sumber
Tip tentang versi paket nuget yang terkait dengan versi inti .Net. Jika Anda menggunakan .Net Core 3.0, Anda tidak dapat memilih versi yang lebih baru dari paket Nuget ini. Tetapi versi 3.0.0 dari Nuget lib bekerja dengan .Net Core 3.0. Jika Anda menggunakan .Net Core 3.1, Anda dapat memilih versi yang lebih baru.
Tore Aurstad
36

Untuk mendapatkan kembali kompilasi tampilan runtime di ASP.NET Core3

  1. Referensi Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation
  2. Panggilan services.AddMvc().AddRazorRuntimeCompilation()
  3. Hapus Microsoft.VisualStudio.Web.CodeGeneration.Designjika ada ketidakcocokan versi pada Microsoft.CodeAnalysis.Commonpaket
Dmitry Pavlov
sumber
2
Sekadar petunjuk untuk orang lain: saat menggunakan Nuget, centang / centang kotak "pra-rilis".
GeoffM
Apakah ada cara untuk mencegah aset disebarkan ke produksi? Saya mencoba beberapa kombinasi PrivateAssets di PackageReference tetapi sepertinya tidak berhasil.
Chet
Pada opsi pisau cukur Core 2.2 memiliki FileProviders dan bekerja bahkan tanpa kompilasi ulang. Cukup edit cshtml dan voila. Di inti 3 properti ini dihapus. :( github.com/aspnet/AspNetCore/issues/14572
dariol
1
+1 karena menghapus paket Microsoft.VisualStudio.Web.CodeGeneration.Design adalah saus rahasia yang tidak disebutkan di tempat lain.
tkburbidge
@tkburbidge Saya baru saja mengalami masalah dengan paket itu juga. Anehnya, saya memiliki dua baris yang persis sama, secara berurutan. Saya menghapus keduanya, dan dapat mengkompilasi. Lebih aneh lagi , saya kemudian meletakkan kembali garis-garis itu, dan masih bisa mengkompilasi.
Lynn Crumbling
26

Kompilasi runtime diaktifkan menggunakan Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilationpaket. Untuk mengaktifkan kompilasi waktu proses, aplikasi harus:

  1. Instal Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilationpaket NuGet.

  2. Perbarui metode proyek Startup.ConfigureServicesuntuk menyertakan panggilan ke AddRazorRuntimeCompilation:

services
    .AddControllersWithViews()
    .AddRazorRuntimeCompilation();

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

kevic
sumber
13

Untuk mendapatkan kembali Runtime Razor Views Compilation di ASP.NET Core 3.1:

  1. Instal Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilationpaket NuGet.
  2. Perbarui metode proyek Startup.ConfigureServicesuntuk menyertakan panggilan ke AddRazorRuntimeCompilation.
  3. services.AddRazorPages().AddRazorRuntimeCompilation();

    Kompilasi file Razor di ASP.NET Core 3.1

Naman Upadhyay
sumber
11

Langkah 1: Instal paket di bawah ini dari NuGet Package Manager for Solution.

Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation

Langkah 2: Tambahkan kode di bawah ini di file ConfigureServices of Startup.cs

services.AddControllersWithViews (). AddRazorRuntimeCompilation ();

Simpan halaman dan kemudian segarkan browser klien.

Jika Anda menggunakan Razor, tambahkan kode untuk services.AddRazorPages (). AddRazorRuntimeCompilation ();

psuneel127
sumber
6

Hanya catatan tambahan - Anda mungkin hanya ingin mengaktifkan kompilasi runtime ini secara bersyarat, sehingga keluaran yang dipublikasikan:

  • Menggunakan tampilan yang dikompilasi.
  • Ukurannya lebih kecil.
  • Tidak mengaktifkan pengamat file dalam produksi.

Aktifkan kompilasi runtime secara bersyarat

BryanCass
sumber
5

Di .NET Core 3.1, Anda perlu menonaktifkan pembuatan views.dllfile.

  1. Tambahkan kode di bawah ini ke .csprojfile Anda (di root proyek Anda):

    <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. Instal paket di bawah ini dari NuGet Package Manager untuk Solusinya.

    Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation
    
  3. Tambahkan kode di bawah ini ke ConfigureServicesmetode Startup.csfile Anda :

    services.AddMvc().AddRazorRuntimeCompilation();
    

    Atau

    services.AddControllersWithViews().AddRazorRuntimeCompilation();
    

    Atau

    services.AddRazorPages().AddRazorRuntimeCompilation();
    

Setelah ini, publikasikan lagi dan jalankan. Ini akan berhasil.

Ali Rasouli
sumber
0

Cara termudah untuk mengonfigurasi Kompilasi Runtime hanya untuk Pengembangan Lokal adalah dengan memperbarui profil peluncuran di launchSettings.json. Metode ini tidak memerlukan perubahan kode untuk mengonfigurasi proyek yang berjalan secara lokal (ini tidak akan memengaruhi produksi Anda).

Lihat dokumentasi resmi :

  1. Instal paket Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation NuGet.
  2. Ubah bagian environmentVariables profil peluncuran di launchSettings.json:
    • Verifikasi ASPNETCORE_ENVIRONMENTdisetel ke "Pengembangan".
    • Setel ASPNETCORE_HOSTINGSTARTUPASSEMBLIESke "Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation".

Contoh:

{
  "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"
      }
    }
  }
}
gunting
sumber