Nguon: Microsoft Learn · .NET 8.0

Biên dịch file Razor trong ASP.NET Core

Nguồn: View compilation

Các file Razor với phần mở rộng .cshtml được biên dịch cả tại thời điểm build và publish bằng cách sử dụng Razor SDK. Runtime compilation (biên dịch tại thời điểm chạy) có thể được bật tùy chọn bằng cách cấu hình dự án.

Lưu ý

Runtime compilation:

Đối với các kịch bản production, hãy sử dụng build-time compilation (biên dịch tại thời điểm build) mặc định. Đối với các kịch bản phát triển, hãy sử dụng Hot Reload.

Biên dịch Razor

Build-time và publish-time compilation của các file Razor được bật theo mặc định bởi Razor SDK. Khi được bật, runtime compilation bổ sung cho build-time compilation, cho phép cập nhật các file Razor nếu chúng được chỉnh sửa trong khi ứng dụng đang chạy.

Cập nhật Razor views và Razor Pages trong quá trình phát triển khi ứng dụng đang chạy cũng được hỗ trợ bằng cách sử dụng .NET Hot Reload.

Lưu ý: Razor runtime compilation đã bị đánh dấu là obsolete bắt đầu từ .NET 10. Khi được bật, runtime compilation vô hiệu hóa .NET Hot Reload. Chúng tôi khuyến nghị sử dụng Hot Reload thay thế cho các kịch bản phát triển.

Bật runtime compilation cho tất cả môi trường

Để bật runtime compilation cho tất cả môi trường:

  1. Cài đặt gói NuGet Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation.
  2. Gọi AddRazorRuntimeCompilation trong Program.cs:

```csharp var builder = WebApplication.CreateBuilder(args);

builder.Services.AddRazorPages() .AddRazorRuntimeCompilation(); ```

Bật runtime compilation có điều kiện

Runtime compilation có thể được bật có điều kiện, đảm bảo rằng đầu ra khi publish:

Để chỉ bật runtime compilation cho môi trường Development:

  1. Cài đặt gói NuGet Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation.
  2. Gọi AddRazorRuntimeCompilation trong Program.cs khi môi trường hiện tại được đặt thành Development:

```csharp var builder = WebApplication.CreateBuilder(args);

var mvcBuilder = builder.Services.AddRazorPages();

if (builder.Environment.IsDevelopment()) { mvcBuilder.AddRazorRuntimeCompilation(); } ```

Runtime compilation cũng có thể được bật với hosting startup assembly. Để bật runtime compilation trong môi trường Development cho các launch profiles cụ thể:

  1. Cài đặt gói NuGet Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation.
  2. Sửa đổi phần environmentVariables của launch profile trong launchSettings.json:
  3. Xác minh rằng ASPNETCORE_ENVIRONMENT được đặt thành "Development".
  4. Đặt ASPNETCORE_HOSTINGSTARTUPASSEMBLIES thành "Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation". Ví dụ, launchSettings.json sau bật runtime compilation cho các launch profiles ViewCompilationSampleIIS Express:

``json { "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" } } } } ``

Với cách tiếp cận này, không cần thay đổi code trong Program.cs. Tại runtime, ASP.NET Core tìm kiếm thuộc tính HostingStartup cấp assembly trong Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation. Thuộc tính HostingStartup chỉ định code khởi động ứng dụng cần thực thi và code khởi động đó bật runtime compilation.

Bật runtime compilation cho Razor class library

Hãy xem xét một kịch bản trong đó dự án Razor Pages tham chiếu đến Razor class library (RCL) có tên MyClassLib. RCL chứa file _Layout.cshtml được sử dụng bởi các dự án MVC và Razor Pages. Để bật runtime compilation cho file _Layout.cshtml trong RCL đó, hãy thực hiện các thay đổi sau trong dự án Razor Pages:

  1. Bật runtime compilation với hướng dẫn tại phần Bật runtime compilation có điều kiện.
  2. Cấu hình MvcRazorRuntimeCompilationOptions trong Program.cs:

```csharp 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)); }); ```

Đoạn code trên xây dựng đường dẫn tuyệt đối đến RCL MyClassLib. PhysicalFileProvider API được sử dụng để định vị các thư mục và file tại đường dẫn tuyệt đối đó. Cuối cùng, instance PhysicalFileProvider được thêm vào một collection file providers, cho phép truy cập vào các file .cshtml của RCL.

Tài nguyên bổ sung