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 DEBUGif (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 视图预编译、动态编译相关推荐
- netcore 编译 html dll,ASP.NET Core Razor 视图预编译、动态编译
0x01 前言 ASP.NET Core在默认发布情况下,会启动预编译将试图编译成xx.Views.dll,也许在视图中打算修改一处很细小的地方我们需要再重新编译视图进行发布.下面我将从 ASP.NE ...
- ASP.NET Core Razor 视图组件
视图组件简介 在新的ASP.NET Core MVC中,视图组件类似于局部视图,但它们更强大.视图组件不使用模型绑定,仅依赖于您在调用时提供的数据. 视图组件特性: 呈现页面响应的某一部分而不是整个响 ...
- ASP.NET Core Razor 布局视图 - ASP.NET Core 基础教程 - 简单教程,简单编程
ASP.NET Core Razor 布局视图 - ASP.NET Core 基础教程 - 简单教程,简单编程 原文:ASP.NET Core Razor 布局视图 - ASP.NET Core 基础 ...
- ASP.NET Core Razor 标签助手 - ASP.NET Core 基础教程 - 简单教程,简单编程
原文:ASP.NET Core Razor 标签助手 - ASP.NET Core 基础教程 - 简单教程,简单编程 ASP.NET Core Razor 标签助手 上一章节我们介绍了视图导入,学习了 ...
- ASP.NET Core 入门教程 6、ASP.NET Core MVC 视图布局入门
一.前言 1.本教程主要内容 ASP.NET Core MVC (Razor)视图母版页教程 ASP.NET Core MVC (Razor)带有Section的视图母版页教程 ASP.NET Cor ...
- ASP.Net Core Razor 部署AdminLTE框架
1.AdminLTE 一个基于 bootstrap 的轻量级后台模板 2.AdminLTE 文档 在线中文Demo:http://adminlte.la998.com/ 在线中文文档:http://a ...
- ASP.NET Core Razor 页面使用教程
ASP.NET Core Razor 页面作为 ASP.NET Core 2.0的一部分发布,它是基于页面的全新的Web开发框架.如果您想学习如何使用 ASP.NET Core Razor 页面,可以 ...
- ASP.NET Core Razor页面禁用防伪令牌验证
这篇短文中,我将向您介绍如何ASP.NET Core Razor页面中禁用防伪令牌验证. Razor页面是ASP.NET Core 2.0中增加的一个页面控制器框架,用于构建动态的.数据驱动的网站:支 ...
- ASP.NET Core - Razor 页面介绍
简介 随着ASP.NET Core 2 即将来临,最热门的新事物是Razor页面.在之前的一篇文章中,我们简要介绍了ASP.NET Core Razor 页面. Razor页面是ASP.NET Cor ...
最新文章
- pcb结构链表_第2章 2-1进程与PCB
- Java NIO系列教程(五)Buffer
- TextView属性大全
- maven打包:找不到符号 符号: 方法 getXxx()
- 【转】从头说catalan数及笔试面试里那些相关的问题
- linux误删除 dev disk文件,误删除 linux 系统文件了?这个方法教你解决
- 系统的延时与定时任务
- 一个dsp最小系统至少要有_DSP原理及应用(2812)试卷_附答案卷B2(2015城南)
- python数学符号大全_数学符号大全
- java+添加分割符_如何给数字添加分隔符
- HTML基础期末速成笔记
- 冯诺依曼体系结构(现代计算机的原型)+cpu的两个核心指标
- 2022-10-17 环境映射
- 阿里云云计算ACP学习---汇总
- 关于原神沙漠痕迹效果的踩坑记录
- 多人赛跑用多线程实现
- background-attachment: fixed/scroll
- 一篇理解GFS与HDFS的重要理念
- [本人经历]嵌入式工程师2022校招面试题:cvte+北京朝歌
- NodeJS开发博客(二) 接入数据库
热门文章
- border:none 与border:0的区别
- html frame跳转实例,HTML frame标签怎么用?frame标签的具体使用实例
- ISE14.7兼容性问题集锦
- WiFi行业将走向何方?
- 【 Tomcat 】tomcat8.0 调优配置
- 安装Wamp时出现无法启动此程序,因为计算机中丢失MSVCR110.dll的解决方法
- Bootstrap在线编辑器简单分享
- Beta版本发布报告
- [转载]Android Layout标签之-viewStub,requestFocus,merge,include
- 面向对象编程设计模式--简单工厂模式讲解(历史上最简单明白的例子)