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

0x01 前言

ASP.NET Core在默认发布情况下,会启动预编译将试图编译成xx.Views.dll,也许在视图中打算修改一处很细小的地方我们需要再重新编译视图进行发布。下面我将从 ASP.NET Core 3 之前版本到 ASP.NET Core 3X 之后版本的一个配置列下下方供大家参考。

0x02 预编译

在ASP.Core中默认是为我们启动的预编译,默认系统会将视图编译进行预编译处理,最终会将编译好的视图生成一个DLL xx.Views.dll.

0x03 动态编译

动态编译也就是当我们视图文件发生变化时进行重新编译和更新Razor文件

ASP.NET Core 3之前版本:

  <PropertyGroup><TargetFramework>netcoreapp2.2</TargetFramework><AspNetCoreHostingModel>InProcess</AspNetCoreHostingModel><RazorCompileOnBuild>false</RazorCompileOnBuild><MvcRazorCompileOnPublish>false</MvcRazorCompileOnPublish></PropertyGroup>

通过上述代码只能帮我们做到在开发环境中进行动态编译,那么我们需要加上如下代码来实现我们生产环境中动态编译.

     public void ConfigureServices(IServiceCollection services){services.AddMvc().AddRazorOptions(options =>options.AllowRecompilingViewsOnFileChange = true);}

条件:

  • MvcRazorCompileOnPublish:设置此选项false将关闭在发布过程中启用的视图编译的所有功能

  • MvcRazorExcludeViewFilesFromPublish:启用MvcRazorCompileOnPublish可防止发布.cshtml文件。此选项禁用此行为。注意:ASP.NET Core Mvc不支持可更新的预编译视图。如果发现该路径的预编译视图,则将忽略对已发布的cshtml文件的任何修改。

  • MvcRazorExcludeRefAssembliesFromPublish:启用MvcRazorCompileOnPublish会使目标阻止refs发布目录。此选项禁用此行为。注意:如果您的应用程序使用了预编译视图和运行时编译视图的组合,则设置此选项很有用。

  • MvcRazorFilesToCompile:指定要编译的视图文件。默认情况下,这包括标记为内容的所有.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>

通过上述代码我们可以在生产环境中也可以进行动态编译,当然我们可以通过条件来限制.

基于环境和配置模式启用运行时编译:

  1. 根据活动的 Configuration 值,有条件地引用 Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation 包:

    <PackageReference Include="Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation" Version="3.1.2" Condition="'$(Configuration)' == 'Debug'" />
  1. 更新项目的 Startup.ConfigureServices 方法以包含对 AddRazorRuntimeCompilation 的调用。有条件地执行 AddRazorRuntimeCompilation,使其仅当 ASPNETCORE_ENVIRONMENT 变量设置为 Development时在调试模式下运行:

public IWebHostEnvironment Env { get; set; }public void ConfigureServices(IServiceCollection services)
{IMvcBuilder builder = services.AddRazorPages();#if DEBUGif (Env.IsDevelopment()){builder.AddRazorRuntimeCompilation();}
#endif
}

Reference

https://docs.microsoft.com/en-us/aspnet/core/mvc/views/view-compilation?view=aspnetcore-3.1

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/311435.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

最大公约数,最小公倍数,质因式分解

目录 简单代码算出最大公约数,最小公倍数: 辗转相除法得到最大公约数: 两数相乘倒序最小公倍数: 分解质因式, 打印输出, 并且存到列表 主程序: 由质因式得到最小公倍数: 简单代码算出最大公约数,最小公倍数: # 最大公约数和最小公倍数 a int(input(please enter 1st num:)…

群晖python套件包_利用群晖Docker安装ubuntu16.04搭建python网站服务器(部署篇)

在帖子《利用群晖Docker安装ubuntu16.04搭建python网站服务器(安装篇)(地址&#xff1a;http://www.cirdown.com:81/thread-185-1-1.html)》中介绍了在群晖docker中如何安装和配置ubuntu容器&#xff0c;那么服务器系统有了&#xff0c;这篇我们就来讲部署篇&#xff0c;因为我…

《C++ Primer》2.1.2节练习

练习2.3 #include <iostream> using namespace std;int main() {unsigned u 10, u2 42;cout << u2 - u << endl;cout << u - u2 << endl;int i 10, i2 42;cout << i2 - i << endl;cout << i - i2 << endl;cout <…

从未来看 C#

前言如今 C# 虽然发展到了 8.0 版本&#xff0c;引入了诸多的函数式特性&#xff0c;但其实在 C# 未来的规划当中&#xff0c;还有很多足以大规模影响现有 C# 代码结构和组成的特性&#xff0c;本文中将会对就重要的特性进行介绍&#xff0c;并用代码示例展示这些特性。以下特性…

Python--第1次平时作业

目录 一、单项选择题 二:填空题 三:大题代码 四:题目 五:测试代码 一、单项选择题 题号 1 2 3 4 5 6 7 8 9 10 答案 D C C D A B A B A C 题号 11 12 13 14 15 16 17 18 19 20 答案 C D D B C B A A D B 题号 21 22 23 2…

python二级考试怎么报名_全国计算机二级考什么 怎么报名

全国计算机二级是很多大学生都要参加的考试&#xff0c;计算机二级的证书含金量还是较高的&#xff0c;那么全国计算机二级主要考的科目有哪些&#xff0c;要怎么报名呢&#xff0c;小编对此进行了整理。计算机二级考哪些科目全国计算机二级可以考的科目如下表&#xff0c;考生…

如何构建基于.NET Core和云环境下的微服务技术体系?

这个内核用处不大&#xff0c;但.NET 内核却666随着业务需求的增长&#xff0c;我们现在开发非常大型和复杂的项目&#xff0c;需要更多时间来构建和部署。每当质量检查报告任何问题时&#xff0c;我们都需要对其进行调试或修复&#xff0c;然后部署整个代码。为了降低这些复杂…

UVA - 11059 Maximum Product-暴力枚举

输入n个元素组成的序列s,找出一个乘积最大的连续子序列&#xff0c;如果这个子序列不是整数&#xff0c;则输出0. 解题思路&#xff1a; 枚举起点和终点&#xff0c;把中间的数相乘&#xff0c;然后找到最大的结果。 代码如下&#xff1a; #include <iostream> using…

Python--第2次平时作业

目录 一、单项选择题 二、程序填空题 三、题目 四、测试代码 一、单项选择题 题号 1 2 3 4 5 6 7 8 9 10 答案 D D D D D D C D D C 题号 11 12 13 14 15 16 17 18 19 20 答案 D C B B D B C A B A 题号 21 22 23 24 25 …

好用的vp n推荐2020_哪个牌子的沐浴露好,2020年最新沐浴露选购测评,好用好闻易清洗沐浴露品牌推荐...

您好&#xff0c;感谢您关注并阅读本文。声明&#xff1a;本文系作者原创&#xff0c;未经作者授权不得转载、引用。如果您看完本文觉得对您有帮助&#xff0c;请点赞、收藏和关注&#xff0c;作者感激不尽。本文详细地介绍一下沐浴露使用方法和选购建议指南&#xff0c;以及沐…

【朝夕Net社区技术专刊】Core3.1 WebApi集群实战专题---WebApi环境搭建运行发布部署篇...

欢迎大家阅读《朝夕Net社区技术专刊》第1期我们致力于.NetCore的推广和落地&#xff0c;为更好的帮助大家学习&#xff0c;方便分享干货&#xff0c;特创此刊&#xff01;很高兴你能成为首期读者&#xff0c;文末福利不要错过哦&#xff01;本文通过5大部分进行解读&#xff1a…

《C++ Primer》1.51节练习

练习1.20 #include <iostream> #include "Sales_item.h" using namespace std;int main() {Sales_item book;cout << "请输入销售记录:" << endl;while (cin >> book) {cout << "ISBN,售出本数&#xff0c;销售额和平…

python schedule运行了一遍说没有任务_python-schedule模块(定时任务)基于官方文档总结...

一.模块安装pip3 install schedule二.常用的使用案例#基本格式#创建方法def func():print("方法")#创建定时schedule.every().seconds.do(func) #每秒运行一次#如果方法需要传参的话do(func,参数1)#开循环while True:schedule.run_pending()#如果值运行一次schedule.…

Python--第4次平时作业

目录 一、单项选择题 二、程序填空题 三、题目 四、测试代码 一、单项选择题 题号 1 2 3 4 5 6 7 8 9 10 答案 B D D C A B B C C C 题号 11 12 13 14 15 16 17 18 19 20 答案 C C B B C A A B A A 题号 21 22 23 24 25 …

【朝夕Net社区技术专刊】Core3.1 WebApi集群实战专题-Corre3.1WebApi配置集成日志/配置Swagger...

欢迎大家阅读《朝夕Net社区技术专刊》第2期我们致力于.NetCore的推广和落地&#xff0c;为更好的帮助大家学习&#xff0c;方便分享干货&#xff0c;特创此刊&#xff01;很高兴你能成为首期读者&#xff0c;文末福利不要错过哦&#xff01;本文通过3大部分进行解读&#xff1a…

python 16进制补零_Python输出16进制不带0x补零,整数转16进制,字符串转16进制

python输出16进制不带0x补零&#xff0c;整数转16进制&#xff0c;字符串转16进制在开发中&#xff0c;我们偶尔会遇到需要将数据通过控制台打印出来&#xff0c;以检查数据传输的准确性。例如调试服务端刚接到的二进制数据(里面包含很多非可见字符&#xff0c;也就是ascii码之…

一文读懂开源许可证异同

对开源许可证异同的对比并非源自担忧。对开源许可证进行比较并不容易&#xff0c;什么 copyleft 啦&#xff0c;什么宽松许可证啦&#xff0c;光 GNU 就有 GPL 2 和 GPL 3 之分&#xff0c;OSI 批准的许可证就有八十多个&#xff0c;而开源生态下存在了数百个许可证。对于我们这…

WARNING: Ignoring invalid distribution -ip

原因: 之前安装插件失败/中途退出&#xff0c;导致插件安装出现异常导致 解决方案: 进入你的项目里面,进入venv文件夹,进入Lib,进入site-packages,删除~ip开头的文件如图所示