预编译

预编译是ASP .Net Core的默认方式。在发布时,默认会将系统中的所有Razor视图进行预编译。编译好的视图DLL统一命名为 xxx.PrecompiledViews.dll 或者 xxx.Views.dll

动态编译

将项目整个配置成动态编译很简单,添加一个配置项目MvcRazorCompileOnPublish,值为false即可

<PropertyGroup>

  <MvcRazorCompileOnPublish>false</MvcRazorCompileOnPublish>

</PropertyGroup>

这样在发布的时候,所有的Razor视图都不会被预编译了,并且所有的视图都会一同被发布。

注意:在ASP .Net 2.2以后,仅在开发环境下,修改视图可时时生效。发布以后产线环境修改视图是不会立即生效的,要重启程序才会生效。详细可参阅:https://docs.microsoft.com/en-us/aspnet/core/mvc/views/view-compilation?view=aspnetcore-2.2

如果希望在产线环境也可以修改视图时时生效,需要主动设置RazorViewEngineOptions.AllowRecompilingViewsOnFileChange的值为true

public class RazorViewEngineOptionsSetup : ConfigureOptions<RazorViewEngineOptions>

{

    public RazorViewEngineOptionsSetup(IHostingEnvironment hostingEnvironment, IPluginLoader loader) :

        base(options =>

        {

            options.AllowRecompilingViewsOnFileChange = true;

        })

    {

    }

}

然后添加到容器中:

1

services.TryAddEnumerable(ServiceDescriptor.Singleton<IConfigureOptions<RazorViewEngineOptions>, RazorViewEngineOptionsSetup>());

混合编译

预编译和动态编译都有各自的优点,你可以选择将它们混合起来使用。例如如果你希望在发布时只预编译部分视图,而部分视图要采用动态编译的模式,可以在项目文件上配置排除不需要预编译的视图。例如将Views目录下的全部进行预编译,而主题目录和邮件模板目录下的视图不需要预编译:

<ItemGroup>

  <MvcRazorFilesToCompile Include="Views\**\*.cshtml" Exclude="wwwroot\themes\**\*.cshtml;EmailTemplates\**\*.cshtml" />

</ItemGroup>

进阶

关于更多Razor的配置,可以参阅微软的官方说明文档:https://docs.microsoft.com/en-us/aspnet/core/razor-pages/sdk?view=aspnetcore-2.2

原文地址:http://www.zkea.net/codesnippet/detail/razor-compilation.html

.NET社区新闻,深度好文,欢迎访问公众号文章汇总 http://www.csharpkit.com 

.Net Core Razor 预编译,动态编译,混合编译相关推荐

  1. 静态库-动态库混合编译

    一部分静态连接,一部分动态连接的方法是:-Wl,-dn后面是静态链接-Wl,-dy后面是动态连接,具体如下: cc -g -o test_server main_server.o main_db.o ...

  2. ASP.NET Core Razor 视图预编译、动态编译

    0x01 前言 ASP.NET Core在默认发布情况下,会启动预编译将试图编译成xx.Views.dll,也许在视图中打算修改一处很细小的地方我们需要再重新编译视图进行发布.下面我将从 ASP.NE ...

  3. netcore 编译 html dll,ASP.NET Core Razor 视图预编译、动态编译

    0x01 前言 ASP.NET Core在默认发布情况下,会启动预编译将试图编译成xx.Views.dll,也许在视图中打算修改一处很细小的地方我们需要再重新编译视图进行发布.下面我将从 ASP.NE ...

  4. 找不到编译动态表达式所需的一种或多种类型。是否缺少对 Microsoft.CSharp.dll 和 System.Core.dll 的引用?...

    提示"找不到编译动态表达式所需的一种或多种类型.是否缺少对 Microsoft.CSharp.dll 和 System.Core.dll 的引用? "错误 解决方法:   将引入的 ...

  5. Mysql预编译动态拼接表名查询

    1.实现目标,现在对deal_runnning表进行按年月分表,需要动态拼接表名查询 2.需要执行此sql .表名要动态拼接,目标sql如下,使用concat连接表名无效. SELECT id, ba ...

  6. Android N混合编译与对热补丁影响深度解析

    大约在六月底,Tinker在微信全量上线了一个补丁版本,随即华为反馈在Android N上微信无法启动.冷汗冒一地,Android N又搞了什么东东?为什么与instant run保持一致的补丁方式也 ...

  7. Android N混合编译与对热补丁影响解析

    首先非常抱歉Tinker没有按期内测,这主要因为开源的代码需要通过公司内部审核与评测,这项工作大约还需要一个月左右.当前Tinker已经在公司内部开源,我们会努力让它以更完善的姿态与大家见面. 大约在 ...

  8. AOT,JIT区别,各自优劣,混合编译

    AOT,JIT是什么? JIT,即Just-in-time,动态(即时)编译,边运行边编译:AOT,Ahead Of Time,指运行前编译,是两种程序的编译方式 区别 这两种编译方式的主要区别在于是 ...

  9. 华为鸿蒙OS发布!余承东:随时可替换安卓;方舟编译器将支持混合编译

    乾明 边策 郭一璞 发自 凹非寺  量子位 报道 | 公众号 QbitAI 千呼万唤始出来,华为鸿蒙操作系统,今日正式发布. 英文名HarmonyOS,寓意为和谐. 并不像亿万行代码的安卓那样笨重,鸿 ...

最新文章

  1. springboot系列八、springboot整合kafka
  2. 08年最热门七大技术和最紧缺的IT人才
  3. Uncaught TypeError: Cannot read property 'length' of null错误怎么处理?
  4. mqtt java_MQTT和Java入门
  5. Thunder团队第三周 - Scrum会议6
  6. Java基础学习总结(165)——API 安全最佳实践
  7. 剑指Offer之逆序对问题
  8. 多态_python的小窝_百度空间
  9. 机器学习-支持向量回归
  10. zynq之ps端开发
  11. 整理牛人看文献的方法
  12. python 网络编程 day02
  13. 三网快速充值话费通道源码
  14. torchtext Filed 方法报错解决办法
  15. 一、软件测试学习方向
  16. 马斯克为什么这么厉害?底层有一套强大的思维方式!
  17. 视频教程-vuecli实战商城后台管理系统-Vue
  18. 数据仓库之ODS层设计概要
  19. 元宇宙将如何重塑摄影艺术?
  20. GO、Java、C/C++、Python,这些编程语言谁才是王者?

热门文章

  1. 长江存储年底提供自研32层堆叠3D NAND闪存样品
  2. 关于C3P0容错和自动重连特性的研究
  3. 大话领域驱动设计——简介
  4. 我的技术回顾那些与ABP框架有关的故事-2018年
  5. 高效的动态URL限流实现
  6. 2021.NET Conf China上的GraphQL
  7. 使用Redis Stream来做消息队列和在Asp.Net Core中的实现
  8. Dapr牵手.NET学习笔记:想入非非的服务调用
  9. docker-compose 一键部署分布式配置中心Apollo
  10. 程序出Bug,一定是环境的锅!