动态编译

ASP.NET中cshtml视图页面是动态编译的,仅当访问到的页面使用到该视图的时候才会进行编译,这会导致第一次访问变慢。不过好处就是更新页面的时候,可以不用编译直接上传视图文件即可。

预编译

在ASP.NET Core 2.0开始,在发布的时候预编译视图已经是默认选项。如果要修改这个默认配置,需要修改项目文件*.csproj,加上MvcRazorCompileOnPublish的配置选项:

<PropertyGroup>
<MvcRazorCompileOnPublish>true</MvcRazorCompileOnPublish>
</PropertyGroup>

ZKEACMS默认已将该设置配置为true,即为预编译模式。要注意的是,如果要修改该选项,要将解决方案中的所有项目都做修改。

预编译的好处就是有更好的性能,较低的内存占用。就是更新视图的时候麻烦一些,要先发布DLL,再替换。

有关ASP.NET Core预编译的更多内容,请查看微软的官方文档:https://docs.microsoft.com/en-us/aspnet/core/mvc/views/view-compilation

混合模式

ZKEACMS支持动态编译和预编译的混合模式。在预编译以后,如果添加新的视图文件也会动态被编译。

开启方式

  1. 通过发布一次基础版来得到refs文件,并手动将发布根目录的refs文件夹整个复制过来使用
  2. 注意加上对应的 /Views/_ViewImports.cshtml,/Views/_ViewStart.cshtml

如果缺少该refs文件夹,在动态编译的时候会因为编译环境的不完整而报错。

如果不想手动复制refs文件夹,也可在ZKEACMS.WebHost.csproj中添加配置项

<MvcRazorExcludeRefAssembliesFromPublish>false</MvcRazorExcludeRefAssembliesFromPublish>

这样在发布的时候依然会带上refs的相关文件,详细请查看:https://github.com/aspnet/MvcPrecompilation