ASP.NET Core Razor 视图预编译、动态编译
0x01 前言
ASP.NET Core在默認(rèn)發(fā)布情況下,會啟動預(yù)編譯將試圖編譯成xx.Views.dll,也許在視圖中打算修改一處很細(xì)小的地方我們需要再重新編譯視圖進(jìn)行發(fā)布。下面我將從?ASP.NET Core 3?之前版本到?ASP.NET Core 3X?之后版本的一個配置列下下方供大家參考。
0x02 預(yù)編譯
在ASP.Core中默認(rèn)是為我們啟動的預(yù)編譯,默認(rèn)系統(tǒng)會將視圖編譯進(jìn)行預(yù)編譯處理,最終會將編譯好的視圖生成一個DLL?xx.Views.dll.
0x03 動態(tài)編譯
動態(tài)編譯也就是當(dāng)我們視圖文件發(fā)生變化時進(jìn)行重新編譯和更新Razor文件
ASP.NET Core 3之前版本:
<PropertyGroup><TargetFramework>netcoreapp2.2</TargetFramework><AspNetCoreHostingModel>InProcess</AspNetCoreHostingModel><RazorCompileOnBuild>false</RazorCompileOnBuild><MvcRazorCompileOnPublish>false</MvcRazorCompileOnPublish></PropertyGroup>通過上述代碼只能幫我們做到在開發(fā)環(huán)境中進(jìn)行動態(tài)編譯,那么我們需要加上如下代碼來實(shí)現(xiàn)我們生產(chǎn)環(huán)境中動態(tài)編譯.
public void ConfigureServices(IServiceCollection services){services.AddMvc().AddRazorOptions(options =>options.AllowRecompilingViewsOnFileChange = true);}條件:
MvcRazorCompileOnPublish:設(shè)置此選項(xiàng)false將關(guān)閉在發(fā)布過程中啟用的視圖編譯的所有功能
MvcRazorExcludeViewFilesFromPublish:啟用MvcRazorCompileOnPublish可防止發(fā)布.cshtml文件。此選項(xiàng)禁用此行為。注意:ASP.NET Core Mvc不支持可更新的預(yù)編譯視圖。如果發(fā)現(xiàn)該路徑的預(yù)編譯視圖,則將忽略對已發(fā)布的cshtml文件的任何修改。
MvcRazorExcludeRefAssembliesFromPublish:啟用MvcRazorCompileOnPublish會使目標(biāo)阻止refs發(fā)布目錄。此選項(xiàng)禁用此行為。注意:如果您的應(yīng)用程序使用了預(yù)編譯視圖和運(yùn)行時編譯視圖的組合,則設(shè)置此選項(xiàng)很有用。
MvcRazorFilesToCompile:指定要編譯的視圖文件。默認(rèn)情況下,這包括標(biāo)記為內(nèi)容的所有.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>通過上述代碼我們可以在生產(chǎn)環(huán)境中也可以進(jìn)行動態(tài)編譯,當(dāng)然我們可以通過條件來限制.
基于環(huán)境和配置模式啟用運(yùn)行時編譯:
根據(jù)活動的 Configuration 值,有條件地引用 Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation 包:
更新項(xiàng)目的 Startup.ConfigureServices 方法以包含對 AddRazorRuntimeCompilation 的調(diào)用。有條件地執(zhí)行 AddRazorRuntimeCompilation,使其僅當(dāng) ASPNETCORE_ENVIRONMENT 變量設(shè)置為 Development時在調(diào)試模式下運(yùn)行:
Reference
https://docs.microsoft.com/en-us/aspnet/core/mvc/views/view-compilation?view=aspnetcore-3.1
總結(jié)
以上是生活随笔為你收集整理的ASP.NET Core Razor 视图预编译、动态编译的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。