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>
通过上述代码我们可以在生产环境中也可以进行动态编译,当然我们可以通过条件来限制.
基于环境和配置模式启用运行时编译:
- 根据活动的 Configuration 值,有条件地引用 Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation 包:
<PackageReference Include="Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation" Version="3.1.2" Condition="'$(Configuration)' == 'Debug'" />
- 更新项目的 Startup.ConfigureServices 方法以包含对 AddRazorRuntimeCompilation 的调用。 有条件地执行 AddRazorRuntimeCompilation,使其仅当 ASPNETCORE_ENVIRONMENT 变量设置为 Development时在调试模式下运行:
public IWebHostEnvironment Env { get; set; }
public void ConfigureServices(IServiceCollection services)
{
IMvcBuilder builder = services.AddRazorPages();
#if DEBUG
if (Env.IsDevelopment())
{
builder.AddRazorRuntimeCompilation();
}
#endif
}
Reference
https://docs.microsoft.com/en-us/aspnet/core/mvc/views/view-compilation?view=aspnetcore-3.1
ASP.NET Core Razor 视图预编译、动态编译的更多相关文章
- ASP.NET Core Razor 视图导入 - ASP.NET Core 基础教程 - 简单教程,简单编程
原文:ASP.NET Core Razor 视图导入 - ASP.NET Core 基础教程 - 简单教程,简单编程 ASP.NET Core Razor 视图导入 上一章节我们介绍了视图起始页,学习 ...
- ASP.NET Core Razor 视图起始页 - ASP.NET Core 基础教程 - 简单教程,简单编程
原文:ASP.NET Core Razor 视图起始页 - ASP.NET Core 基础教程 - 简单教程,简单编程 ASP.NET Core Razor 视图起始页 上一章节中我们介绍了布局视图, ...
- ASP.NET Core Razor 视图组件
视图组件简介 在新的ASP.NET Core MVC中,视图组件类似于局部视图,但它们更强大.视图组件不使用模型绑定,仅依赖于您在调用时提供的数据. 视图组件特性: 呈现页面响应的某一部分而不是整个响 ...
- Asp.net MVC Razor视图模版动态渲染PDF,Razor模版生成静态Html
Asp.net MVC Razor视图模版动态渲染PDF,Razor模版生成静态Html 1.前言 上一篇文章我开源了轮子,Asp.net Core 3.1 Razor视图模版动态渲染PDF,然后,很 ...
- ASP.NET Core Razor 布局视图 - ASP.NET Core 基础教程 - 简单教程,简单编程
原文:ASP.NET Core Razor 布局视图 - ASP.NET Core 基础教程 - 简单教程,简单编程 ASP.NET Core Razor 布局视图 上一章节中我们学习了如何使用 EF ...
- C# -- HttpWebRequest 和 HttpWebResponse 的使用 C#编写扫雷游戏 使用IIS调试ASP.NET网站程序 WCF入门教程 ASP.Net Core开发(踩坑)指南 ASP.Net Core Razor+AdminLTE 小试牛刀 webservice创建、部署和调用 .net接收post请求并把数据转为字典格式
C# -- HttpWebRequest 和 HttpWebResponse 的使用 C# -- HttpWebRequest 和 HttpWebResponse 的使用 结合使用HttpWebReq ...
- C#编译器优化那点事 c# 如果一个对象的值为null,那么它调用扩展方法时为甚么不报错 webAPI 控制器(Controller)太多怎么办? .NET MVC项目设置包含Areas中的页面为默认启动页 (五)Net Core使用静态文件 学习ASP.NET Core Razor 编程系列八——并发处理
C#编译器优化那点事 使用C#编写程序,给最终用户的程序,是需要使用release配置的,而release配置和debug配置,有一个关键区别,就是release的编译器优化默认是启用的.优化代码 ...
- C#中的函数式编程:递归与纯函数(二) 学习ASP.NET Core Razor 编程系列四——Asp.Net Core Razor列表模板页面
C#中的函数式编程:递归与纯函数(二) 在序言中,我们提到函数式编程的两大特征:无副作用.函数是第一公民.现在,我们先来深入第一个特征:无副作用. 无副作用是通过引用透明(Referential ...
- ASP.NET Core Razor 标签助手 - ASP.NET Core 基础教程 - 简单教程,简单编程
原文:ASP.NET Core Razor 标签助手 - ASP.NET Core 基础教程 - 简单教程,简单编程 ASP.NET Core Razor 标签助手 上一章节我们介绍了视图导入,学习了 ...
随机推荐
- KVM管理工具 WebVirtMgr
WEB管理工具 WebVirtMgr WebVirtMgr是一个基于libvirt的Web界面,用于管理虚拟机.它允许您创建和配置新域,并调整域的资源分配.VNC查看器为来宾域提供完整的图形控制台.K ...
- Docker学习(十)Docker容器编排 Docker-compose
Docker学习(十)Docker容器编排 Docker-compose 标签(空格分隔): docker 容器编排是什么 应用一般由单独容器化的组件组成,须按照一定顺序在网络级别进行组织,以使其能够 ...
- leetcode 最大水池
leetcode 11题 水池最大容积 题目描述 给定 n 个非负整数 a1,a2,...,an,每个数代表坐标中的一个点 (i, ai) .在坐标内画 n 条垂直线,垂直线 i 的两个端点分别为 ( ...
- NC使用教程
NetCat参数说明: 一般netcat做的最多的事情为以下三种: 扫描指定IP端口情况 端口转发数据(重点) 提交自定义数据包 1.扫描常用命令. 以下IP 处可以使用域名,nc会调用NDS解析成I ...
- arch_遇到的问题
archlinux安装 wiki安装 可以参考这个来安装 $如果你跟我一样是用校园网安装的$ 记得使用pppoe-setup 来联网 arclinux 图形界面安装 参考 kde图形安装 需要创建一个 ...
- Stream排序Map集合
最近小编自己一个人在负责一个项目的后台开发,其中有一部分是统计相关的功能,所以需要一些排序或者分组的操作,之前这种操作小编觉得还是比较麻烦的,虽热有一些现成的工具类,但是工具类的写法也是比较复杂的,但 ...
- 玩转Django2.0---Django笔记建站基础七(表单与模型)
第七章 表单与模型 表单是搜集用户数据信息的各种表单元素的集合,作用是实现网页上的数据交互,用户在网站输入信息,然后提交到网站服务器端进行处理(如数据录入和用户登录.注册等). 用户表单是web开发的 ...
- MyBatis5——Mybatis整合log4j、延迟加载
开启日志:Log4j (1)加入jar包 (2)在conf.xml中配置开启日志: <settings> <!-- 开启日志,并指定要使用的具体日志为log4j -- ...
- 定义可选URL片段 定义自定义片段变量 精通ASP-NET-MVC-5-弗瑞曼
- 从O365中获取users到D365中
用D365 online可能会遇到这样的问题. 顾客需要获取O365 user的email address 发email使用. 但是又不想给这部分的users licenses. 那我们就可以通过g ...