副檔名為 .cshtml
的 Razor 檔案會在使用 Razor SDK 的組建和發佈時間進行編譯。 您可以透過設定專案,選擇性地啟用執行階段編譯。
Razor SDK 預設會啟用 Razor 檔案的建置和發佈階段編譯。 啟用時,執行階段編譯可補充建置時間編譯,以允許在應用程式執行時編輯 Razor 檔案。
使用 .NET 熱重新載入也支援應用程式執行的同時,在開發期間更新 Razor 檢視和 Razor Pages。
注意
啟用時,執行階段編譯會停用 .NET 熱重新載入。 建議您在開發期間使用熱重新載入,而不是 Razor 執行階段編譯。
若要為所有環境啟用執行階段編譯:
安裝 Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation NuGet 套件。
在
Program.cs
中呼叫 AddRazorRuntimeCompilation:var builder = WebApplication.CreateBuilder(args); builder.Services.AddRazorPages() .AddRazorRuntimeCompilation();
執行階段編譯可以有條件地啟用,以確保已發佈的輸出:
- 使用編譯的檢視。
- 不會在生產環境中啟用檔案監看員。
若要只針對開發環境啟用執行階段編譯:
安裝 Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation NuGet 套件。
當目前的環境設定為 [開發] 時呼叫
Program.cs
中的 AddRazorRuntimeCompilation:var builder = WebApplication.CreateBuilder(args); var mvcBuilder = builder.Services.AddRazorPages(); if (builder.Environment.IsDevelopment()) { mvcBuilder.AddRazorRuntimeCompilation(); }
執行階段編譯也可以使用裝載啟動組件來啟用。 若要在特定啟動設定檔的開發環境中啟用執行階段編譯:
- 安裝 Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation NuGet 套件。
- 在
launchSettings.json
中修改啟動設定檔的environmentVariables
區段:確認
ASPNETCORE_ENVIRONMENT
設為"Development"
。將
ASPNETCORE_HOSTINGSTARTUPASSEMBLIES
設定為"Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation"
。 例如,下列launchSettings.json
會啟用ViewCompilationSample
和IIS 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" } } } }
使用此方法時,不需要在 Program.cs
中變更程式碼。 在執行階段中,ASP.NET Core 會在 Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation
中搜尋組件層級 HostingStartup 屬性。 屬性 HostingStartup
會指定要執行的應用程式啟動程式碼,且該啟動程式碼會啟用執行階段編譯。
假設 Razor Pages 專案參考名為 MyClassLib 的 Razor 類別庫 (RCL)。 RCL 包含 MVC 和 Razor Pages 專案所使用的 _Layout.cshtml
檔案。 若要啟用該 RCL 中 _Layout.cshtml
檔案的執行階段編譯,請在 Razor Pages 專案中進行下列變更:
使用條件式啟用執行階段編譯中的指示來啟用執行階段編譯。
在
Program.cs
中設定 MvcRazorRuntimeCompilationOptions: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)); });
上述程式碼會建置 MyClassLib RCL 的絕對路徑。 PhysicalFileProvider API 可用來找出位於該絕對路徑的目錄和檔案。 最後,
PhysicalFileProvider
執行個體會新增至檔案提供者集合,以允許存取 RCL 的.cshtml
檔案。
副檔名為 .cshtml
的 Razor 檔案會在使用 Razor SDK 的組建和發佈時間進行編譯。 您可以透過設定專案,選擇性地啟用執行階段編譯。
Razor SDK 預設會啟用 Razor 檔案的建置和發佈階段編譯。 啟用時,執行階段編譯會補充建置時間編譯,以允許更新 Razor 檔案 (如果該檔案已被編輯)。
RazorPages 和 MVC 專案範本包含一個選項,可在建立專案時啟用執行階段編譯。 此選項只有在 ASP.NET Core 3.1 和更新版本中才支援。
在 [建立新的 ASP.NET Core Web 應用程式] 對話方塊中:
- 選取 Web 應用程式或 Web 應用程式 (Model-View-Controller) 專案範本。
- 選取 [啟用 Razor 執行階段編譯] 核取方塊。
若要為現有專案中的所有環境啟用執行階段編譯:
安裝 Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation NuGet 套件。
更新專案的
Startup.ConfigureServices
方法以包括對 AddRazorRuntimeCompilation 的呼叫。 例如:public void ConfigureServices(IServiceCollection services) { services.AddRazorPages() .AddRazorRuntimeCompilation(); // code omitted for brevity }
您可以啟用執行階段編譯,使其僅適用於本機開發。 以這種方式有條件的啟用,可確保已發佈的輸出:
- 使用編譯的檢視。
- 不會在生產環境中啟用檔案監看員。
若要只在開發環境中啟用執行階段編譯:
- 安裝 Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation NuGet 套件。
- 修改
launchSettings.json
中的啟動設定檔environmentVariables
區段:- 確認
ASPNETCORE_ENVIRONMENT
已設定為"Development"
。 - 將
ASPNETCORE_HOSTINGSTARTUPASSEMBLIES
設定為"Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation"
。
- 確認
在下列範例中,IIS Express
和 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"
}
}
}
}
專案類別 Startup
中不需要變更程式碼。 在執行階段中,ASP.NET Core 會在 Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation
中搜尋組件層級 HostingStartup 屬性。 屬性 HostingStartup
會指定要執行的應用程式啟動程式碼。 該啟動程式碼會啟用執行階段編譯。
假設 Razor Pages 專案參考名為 MyClassLib 的 Razor 類別庫 (RCL)。 RCL 包含您小組所有 MVC 和 Razor Pages 專案的 _Layout.cshtml
檔案。 您想要在該 RCL 中啟用 _Layout.cshtml
檔案的執行時間編譯。 在 Razor Pages 專案中進行下列變更:
使用條件式啟用現有專案中的執行時間編譯來啟用執行時間編譯。
在
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)); }); }
在上述程式碼中,會建構 MyClassLib RCL 的絕對路徑。 PhysicalFileProvider API 可用來找出位於該絕對路徑的目錄和檔案。 最後,
PhysicalFileProvider
執行個體會新增至檔案提供者集合,以允許存取 RCL 的.cshtml
檔案。