预编译
预编译是ASP .Net Core的默认方式。在发布时,默认会将系统中的所有Razor视图进行预编译。编译好的视图DLL统一命名为 xxx.PrecompiledViews.dll 或者 xxx.Views.dll
动态编译
Net 5.X 配置:
Add
<PackageReference Include="Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation" Version="5.0.0-rc.2.20475.17" />
<Project Sdk="Microsoft.NET.Sdk.Web">
<PropertyGroup>
<TargetFramework>net5.0</TargetFramework>
<CopyRefAssembliesToPublishDirectory>false</CopyRefAssembliesToPublishDirectory>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation" Version="5.0.0-rc.2.20475.17" /> //add here
</ItemGroup>
</Project>
.Net Core 2.x
将项目整个配置成动态编译很简单,添加一个配置项目MvcRazorCompileOnPublish,值为false即可
<PropertyGroup>
<MvcRazorCompileOnPublish>false</MvcRazorCompileOnPublish>
</PropertyGroup>
在发布的时候,所有的Razor视图都不会被预编译了,并且所有的视图都会一同被发布。
混合编译
预编译和动态编译都有各自的优点,你可以选择将它们混合起来使用。例如如果你希望在发布时只预编译部分视图,而部分视图要采用动态编译的模式,可以在项目文件上配置排除不需要预编译的视图。例如将Views目录下的全部进行预编译,而主题目录和邮件模板目录下的视图不需要预编译:
<ItemGroup>
<MvcRazorFilesToCompile Include="Views\**\*.cshtml" Exclude="wwwroot\themes\**\*.cshtml;EmailTemplates\**\*.cshtml" />
</ItemGroup>
.net core 3.0视图动态编译
asp.net 3.0中没有cshtml动态编译的功能了.
ASP.NET Core 3.0 shared framework中不再依赖Roslyn,也就失去了视图动态编译的能力,发布了一个nuget扩展包来支持该功能。
安装 Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation NuGet 包。
更新应用程序的 ConfigureServices 以包含对 AddMvcRazorRuntimeCompilation 的调用:
services.AddMvc()
.AddRazorRuntimeCompilation();
不过,这种方式仍然会将视图编译为dll,如果需要保留cshtml文件,仍然需要在加入 csproj 工程文件中加入相应的编译选项,如:
<PropertyGroup>
<RazorCompileOnBuild>false</RazorCompileOnBuild>
<RazorCompileOnPublish>false</RazorCompileOnPublish>
</PropertyGroup>