0x01 前言 ASP.NET Core在預設發佈情況下,會啟動預編譯將試圖編譯成 xx.Views.dll ,也許在視圖中打算修改一處很細小的地方我們需要再重新編譯視圖進行發佈。下麵我將從 ASP.NET Core 3 之前版本到 ASP.NET Core 3X 之後版本的一個配置列下下方供大家參 ...
0x01 前言
ASP.NET Core在預設發佈情況下,會啟動預編譯將試圖編譯成xx.Views.dll,也許在視圖中打算修改一處很細小的地方我們需要再重新編譯視圖進行發佈。下麵我將從 ASP.NET Core 3 之前版本到 ASP.NET Core 3X 之後版本的一個配置列下下方供大家參考。
0x02 預編譯
在ASP.Core中預設是為我們啟動的預編譯,預設系統會將視圖編譯進行預編譯處理,最終會將編譯好的視圖生成一個DLL xx.Views.dll.
0x03 動態編譯
動態編譯也就是當我們視圖文件發生變化時進行重新編譯和更新Razor文件
ASP.NET Core 3之前版本:
<PropertyGroup>
<TargetFramework>netcoreapp2.2</TargetFramework>
<AspNetCoreHostingModel>InProcess</AspNetCoreHostingModel>
<RazorCompileOnBuild>false</RazorCompileOnBuild>
<MvcRazorCompileOnPublish>false</MvcRazorCompileOnPublish>
</PropertyGroup>
通過上述代碼只能幫我們做到在開發環境中進行動態編譯,那麼我們需要加上如下代碼來實現我們生產環境中動態編譯.
public void ConfigureServices(IServiceCollection services)
{
services.AddMvc().AddRazorOptions(options =>
options.AllowRecompilingViewsOnFileChange = true);
}
條件:
- MvcRazorCompileOnPublish:設置此選項false將關閉在發佈過程中啟用的視圖編譯的所有功能
- MvcRazorExcludeViewFilesFromPublish:啟用MvcRazorCompileOnPublish可防止發佈.cshtml文件。此選項禁用此行為。註意:ASP.NET Core Mvc不支持可更新的預編譯視圖。如果發現該路徑的預編譯視圖,則將忽略對已發佈的cshtml文件的任何修改。
- MvcRazorExcludeRefAssembliesFromPublish:啟用MvcRazorCompileOnPublish會使目標阻止refs發佈目錄。此選項禁用此行為。註意:如果您的應用程式使用了預編譯視圖和運行時編譯視圖的組合,則設置此選項很有用。
- MvcRazorFilesToCompile:指定要編譯的視圖文件。預設情況下,這包括標記為內容的所有.cshtml文件。
ASP.NET Core 3.X版本:
安裝NuGet包
Install-Package Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation
public void ConfigureServices(IServiceCollection services)
{
services.AddRazorPages()
.AddRazorRuntimeCompilation();
}
<PropertyGroup>
<TargetFramework>netcoreapp3.1</TargetFramework>
<RazorCompileOnBuild>false</RazorCompileOnBuild>
<MvcRazorCompileOnPublish>false</MvcRazorCompileOnPublish>
</PropertyGroup>
通過上述代碼我們可以在生產環境中也可以進行動態編譯,當然我們可以通過條件來限制.
基於環境和配置模式啟用運行時編譯:
- 根據活動的 Configuration 值,有條件地引用 Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation 包:
<PackageReference Include="Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation" Version="3.1.2" Condition="'$(Configuration)' == 'Debug'" />
- 更新項目的 Startup.ConfigureServices 方法以包含對 AddRazorRuntimeCompilation 的調用。 有條件地執行 AddRazorRuntimeCompilation,使其僅當 ASPNETCORE_ENVIRONMENT 變數設置為 Development時在調試模式下運行:
public IWebHostEnvironment Env { get; set; }
public void ConfigureServices(IServiceCollection services)
{
IMvcBuilder builder = services.AddRazorPages();
#if DEBUG
if (Env.IsDevelopment())
{
builder.AddRazorRuntimeCompilation();
}
#endif
}
Reference
https://docs.microsoft.com/en-us/aspnet/core/mvc/views/view-compilation?view=aspnetcore-3.1