.Net Core 5.0 Razor 预编译,动态编译,混合编译
适用环境
本篇文章操作环境 Visual Studio 2019 + ASP.Net Core Web 应用 + .NET 5.0
预编译
预编译是ASP.Net Core 5.0 的默认方式。在发布时,默认会将系统中的所有Razor视图进行预编译。编译好的视图DLL统一命名为 xxx.Views.dll
动态编译
将项目整个配置成动态编译很简单,仅需3步:
1、在 NuGet 中添加包“Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation”
2、修改代码文件“Startup.cs”中的方法“ ConfigureServices ”,调用方法“ AddRazorRuntimeCompilation ”以支持动态编译 .cshtml 文件
services.AddRazorPages().AddRazorRuntimeCompilation();
3、修改项目文件 xxx.csproj,添加配置项 RazorCompileOnBuild 和 MvcRazorCompileOnPublish ,值都设置为 false。
<PropertyGroup> <RazorCompileOnBuild>false</RazorCompileOnBuild> <MvcRazorCompileOnPublish>false</MvcRazorCompileOnPublish> </PropertyGroup>
这样在发布的时候,所有的 Razor 视图都不会被预编译了,并且所有的视图都会一同被发布。
注意:在发布的生产环境中,修改视图文件是不会立即生效的,需要重启程序(对于 IIS 宿主的运行环境需要重启站点)才会生效。
混合编译
预编译和动态编译都有各自的优点,你可以选择将它们混合起来使用。例如如果你希望在发布时只预编译部分视图,而部分视图要采用动态编译的模式,可以在项目文件上配置排除不需要预编译的视图。其他步骤与前一章节“动态编译”相同,仅步骤3需要按照下面的方式修改,多个项目之间使用分号“;”分隔。例如:
<ItemGroup> <MvcRazorFilesToCompile Include="Pages\**\*.cshtml" Exclude="Pages\page_group1\**\*.cshtml;Pages\page_group2\pg1.cshtml" /> </ItemGroup>