Razor kompilasi file di ASP.NET Core
Razor file dengan .cshtml
ekstensi dikompilasi pada waktu build dan penerbitan Razor menggunakan SDK. Kompilasi runtime dapat diaktifkan secara opsional dengan mengonfigurasi proyek.
Catatan
Kompilasi runtime:
- Tidak didukung untuk Razor komponen Blazor aplikasi.
- Tidak mendukung global menggunakan arahan.
- Tidak mendukung implisit menggunakan arahan.
- Menonaktifkan .NET Hot Reload.
- Disarankan untuk pengembangan, bukan untuk produksi.
Razor Kompilasi
Kompilasi Razor file build-time dan publish-time diaktifkan secara default oleh Razor SDK. Saat diaktifkan, kompilasi runtime melengkapi kompilasi build-time, memungkinkan Razor file diperbarui jika diedit saat aplikasi berjalan.
Memperbarui Razor tampilan dan Razor Halaman selama pengembangan saat aplikasi berjalan juga didukung menggunakan .NET Hot Reload.
Catatan
Saat diaktifkan, kompilasi runtime menonaktifkan .NET Hot Reload. Sebaiknya gunakan Hot Reload alih-alih Razor kompilasi runtime selama pengembangan.
Mengaktifkan kompilasi runtime untuk semua lingkungan
Untuk mengaktifkan kompilasi runtime untuk semua lingkungan:
Instal Microsoft.AspNetCore.Mvc.Razor. Paket RuntimeCompilation NuGet.
Panggil AddRazorRuntimeCompilation di
Program.cs
:var builder = WebApplication.CreateBuilder(args); builder.Services.AddRazorPages() .AddRazorRuntimeCompilation();
Mengaktifkan kompilasi runtime secara kondisional
Kompilasi runtime dapat diaktifkan secara kondisional, yang memastikan bahwa output yang diterbitkan:
- Menggunakan tampilan yang dikompilasi.
- Tidak mengaktifkan pengamat file dalam produksi.
Untuk mengaktifkan kompilasi runtime hanya untuk lingkungan Pengembangan:
Instal Microsoft.AspNetCore.Mvc.Razor. Paket RuntimeCompilation NuGet.
Program.cs
Panggil AddRazorRuntimeCompilation saat lingkungan saat ini diatur ke Pengembangan:var builder = WebApplication.CreateBuilder(args); var mvcBuilder = builder.Services.AddRazorPages(); if (builder.Environment.IsDevelopment()) { mvcBuilder.AddRazorRuntimeCompilation(); }
Kompilasi runtime juga dapat diaktifkan dengan perakitan startup hosting. Untuk mengaktifkan kompilasi runtime di lingkungan Pengembangan untuk profil peluncuran tertentu:
- Instal Microsoft.AspNetCore.Mvc.Razor. Paket RuntimeCompilation NuGet.
- Ubah bagian profil peluncuran
environmentVariables
dilaunchSettings.json
:Verifikasi bahwa
ASPNETCORE_ENVIRONMENT
diatur ke"Development"
.Atur
ASPNETCORE_HOSTINGSTARTUPASSEMBLIES
ke"Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation"
. Misalnya, berikut inilaunchSettings.json
memungkinkan kompilasi runtime untuk profil peluncuranViewCompilationSample
danIIS Express
:{ "iisSettings": { "windowsAuthentication": false, "anonymousAuthentication": true, "iisExpress": { "applicationUrl": "http://localhost:7098", "sslPort": 44332 } }, "profiles": { "ViewCompilationSample": { "commandName": "Project", "dotnetRunMessages": true, "launchBrowser": true, "applicationUrl": "https://localhost:7173;http://localhost:5251", "environmentVariables": { "ASPNETCORE_ENVIRONMENT": "Development", "ASPNETCORE_HOSTINGSTARTUPASSEMBLIES": "Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation" } }, "IIS Express": { "commandName": "IISExpress", "launchBrowser": true, "environmentVariables": { "ASPNETCORE_ENVIRONMENT": "Development", "ASPNETCORE_HOSTINGSTARTUPASSEMBLIES": "Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation" } } } }
Dengan pendekatan ini, tidak ada perubahan kode yang diperlukan dalam Program.cs
. Pada runtime, ASP.NET Core mencari atribut HostingStartup tingkat perakitan di Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation
. Atribut HostingStartup
menentukan kode startup aplikasi untuk dijalankan dan kode startup tersebut memungkinkan kompilasi runtime.
Mengaktifkan kompilasi runtime untuk Razor pustaka kelas
Pertimbangkan skenario di mana Razor proyek Pages mereferensikanRazor pustaka kelas (RCL) bernama MyClassLib. RCL berisi file yang _Layout.cshtml
digunakan oleh proyek MVC dan Razor Pages. Untuk mengaktifkan kompilasi runtime untuk _Layout.cshtml
file di RCL tersebut Razor , buat perubahan berikut dalam proyek Pages:
Aktifkan kompilasi runtime dengan instruksi di Mengaktifkan kompilasi runtime secara kondisional.
Konfigurasikan MvcRazorRuntimeCompilationOptions di
Program.cs
:var builder = WebApplication.CreateBuilder(args); builder.Services.AddRazorPages(); builder.Services.Configure<MvcRazorRuntimeCompilationOptions>(options => { var libraryPath = Path.GetFullPath( Path.Combine(builder.Environment.ContentRootPath, "..", "MyClassLib")); options.FileProviders.Add(new PhysicalFileProvider(libraryPath)); });
Kode sebelumnya membangun jalur absolut ke MyClassLib RCL. PHYSICALFileProvider API digunakan untuk menemukan direktori dan file di jalur absolut tersebut. Terakhir,
PhysicalFileProvider
instans ditambahkan ke koleksi penyedia file, yang memungkinkan akses ke file RCL.cshtml
.
Sumber Daya Tambahan:
Razor file dengan .cshtml
ekstensi dikompilasi pada waktu build dan penerbitan Razor menggunakan SDK. Kompilasi runtime mungkin diaktifkan secara opsional dengan mengonfigurasi proyek Anda.
Razor Kompilasi
Kompilasi Razor file build-time dan publish-time diaktifkan secara default oleh Razor SDK. Saat diaktifkan, kompilasi runtime melengkapi kompilasi build-time, memungkinkan Razor file diperbarui jika diedit.
Mengaktifkan kompilasi runtime saat pembuatan proyek
Templat Razor proyek Pages dan MVC menyertakan opsi untuk mengaktifkan kompilasi runtime saat proyek dibuat. Opsi ini didukung di ASP.NET Core 3.1 dan yang lebih baru.
Dalam dialog Buat aplikasi web ASP.NET Core baru:
- Pilih templat proyek Aplikasi Web atau Aplikasi Web (Model-View-Controller).
- Pilih kotak centang Aktifkan Razor kompilasi runtime.
Mengaktifkan kompilasi runtime dalam proyek yang ada
Untuk mengaktifkan kompilasi runtime untuk semua lingkungan dalam proyek yang ada:
Instal Microsoft.AspNetCore.Mvc.Razor. Paket RuntimeCompilation NuGet.
Perbarui metode proyek
Startup.ConfigureServices
untuk menyertakan panggilan ke AddRazorRuntimeCompilation. Contohnya:public void ConfigureServices(IServiceCollection services) { services.AddRazorPages() .AddRazorRuntimeCompilation(); // code omitted for brevity }
Mengaktifkan kompilasi runtime secara kondisional dalam proyek yang ada
Kompilasi runtime dapat diaktifkan sewaktu-waktu sehingga hanya tersedia untuk pengembangan lokal. Mengaktifkan secara kondisional dengan cara ini memastikan bahwa output yang diterbitkan:
- Menggunakan tampilan yang dikompilasi.
- Tidak mengaktifkan pengamat file dalam produksi.
Untuk mengaktifkan kompilasi runtime hanya di lingkungan Pengembangan:
- Instal Microsoft.AspNetCore.Mvc.Razor. Paket RuntimeCompilation NuGet.
- Ubah bagian profil
environmentVariables
peluncuran dilaunchSettings.json
:- Verifikasi
ASPNETCORE_ENVIRONMENT
diatur ke"Development"
. - Atur
ASPNETCORE_HOSTINGSTARTUPASSEMBLIES
ke"Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation"
.
- Verifikasi
Dalam contoh berikut, kompilasi runtime diaktifkan di lingkungan Pengembangan untuk IIS Express
profil peluncuran dan RazorPagesApp
:
{
"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"
}
}
}
}
Tidak ada perubahan kode yang diperlukan di kelas proyek Startup
. Pada runtime, ASP.NET Core mencari atribut HostingStartup tingkat perakitan di Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation
. Atribut HostingStartup
menentukan kode startup aplikasi untuk dijalankan. Kode startup tersebut memungkinkan kompilasi runtime.
Mengaktifkan kompilasi runtime untuk Razor pustaka kelas
Pertimbangkan skenario di mana Razor proyek Pages mereferensikanRazor pustaka kelas (RCL) bernama MyClassLib. RCL berisi _Layout.cshtml
file yang digunakan semua proyek MVC dan Razor Pages tim Anda. Anda ingin mengaktifkan kompilasi runtime untuk file di RCL tersebut _Layout.cshtml
. Buat perubahan berikut dalam Razor proyek Pages:
Aktifkan kompilasi runtime dengan instruksi di Kompilasi runtime aktifkan secara kondisional di proyek yang ada.
Konfigurasikan opsi kompilasi runtime di
Startup.ConfigureServices
:public void ConfigureServices(IServiceCollection services) { services.AddRazorPages(); services.Configure<MvcRazorRuntimeCompilationOptions>(options => { var libraryPath = Path.GetFullPath( Path.Combine(HostEnvironment.ContentRootPath, "..", "MyClassLib")); options.FileProviders.Add(new PhysicalFileProvider(libraryPath)); }); }
Dalam kode sebelumnya, jalur absolut ke RCL MyClassLib dibangun. PHYSICALFileProvider API digunakan untuk menemukan direktori dan file di jalur absolut tersebut. Terakhir,
PhysicalFileProvider
instans ditambahkan ke koleksi penyedia file, yang memungkinkan akses ke file RCL.cshtml
.
Sumber Daya Tambahan:
ASP.NET Core