预编译

预编译是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;
})
{ }
}

  

然后添加到容器中:

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 Core Razor 预编译,动态编译,混合编译的更多相关文章

  1. c编译动态库可以编译但是无法导入解决方法

    $(CC) $(CFLAGS) -Wl,--whole-archive ${libusb} -Wl,--no-whole-archive $(lib_objs) $(LFLAGS) -o $(lib) ...

  2. 混合编译.c/.cpp与.cu文件

    混合编译.c/.cpp与.cu文件 项目中用到cuda编程,写了kernel函数,需要nvcc编译器来编译..c/.cpp的文件,假定用gcc编译. 如何混合编译它们,整体思路是:.cu文件编译出的东 ...

  3. ndk学习8: 编译动态库

    目录: 手工编译动态库 ndk-build编译动态库(Eclipse环境)   手工编译静态库 老规矩还是先手工操作,知其然并知其所以然   需要用到的核心命令: gcc -g -c -fpic -W ...

  4. linux gcc 编译动态类库(.so)和静态类库(.a)

    linux gcc 编译动态类库(.so)和静态类库(.a) 我的编译环境 ubuntu desktop 16.04 一:测试代码 测试有3个文件:AB.h,AB.c,test.c //AB.h vo ...

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

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

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

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

  7. 【VS工程设置】 编译动态库,命令行添加参数,不使用预编译头,指定该项目链接 哪种 运行库

    编译动态库 注意: 动态库: [目标文件扩展] => .dll + [配置类型] => 动态库(.dll) 静态库: [目标文件扩展] => .lib + [ 配置类型]=> ...

  8. ASP.NET Core 3.x Razor视图运行时刷新实时编译

    前言: 很长一段时间没有写过ASP.NET Core Razor(.cshtml)视图开发WEB页面了,今天刚好把之前做的一个由ASP.NET Core 2.2+Razor开发的项目升级到ASP.NE ...

  9. AOT和JIT以及混合编译的区别、优劣

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

随机推荐

  1. Maximum Average Subarray II LT644

    Given an array consisting of n integers, find the contiguous subarray whose length is greater than o ...

  2. bootstrap css布局

    1.移动先行 <meta name="viewport" content="width=device-width, initial-scale=1, maximum ...

  3. android开发笔记(2)

    我之前完成了SDK的安装,这次需要在eclipse中导入相关的控件. 一.下载ADT 在之前下载的网站上下载相关的ADT的压缩包. 二.在eclipse中进行导入 在eclipse中的Help-> ...

  4. Opencv基本数据类型

    1.OpenCV中数据类型和常用数据类型对应 Mat<uchar>                            CV_8U Mat<char>            ...

  5. 6. Uniforms in American's Eyes 美国人眼里的制服

    6. Uniforms in American's Eyes 美国人眼里的制服 (1) Americans are proud of their variety and individuality,y ...

  6. python code(1)

    from collections import UserList class MthChianList(UserList): def filter(self,predicste): return Mt ...

  7. CloneZilla 恢复系统报错Waiting for device dev/disk/by-id/.....

    利用CloneZilla备份好系统,在恢复系统时候显示恢复成功,但在重启系统时出现如下错误: 出现问题的原因: 原因在于suse系统的一个新的默认设置,这个新的默认设置为存储设备由原来的名称相关改为I ...

  8. 使用hibernate从一方获取多方信息时报错:org.hibernate.LazyInitializationException: failed to lazily initialize a collection of role

    引起原因:hibernate加载关联对象的方式有懒加载方式和立即加载方式. 如果在多对一的配置中没有指定加载方式,而一对多的配置中指定了懒加载方式,因此在获取一方是可获取到值,而获取多方时sessio ...

  9. go语言判断末尾不同的长字符串的方法

    判断两种末尾不同的长字符串,在使用正则表达式的基础上,进一步利用好字符串的方法,最后成功对问题进行解决. package utils import ( "io/ioutil" &q ...

  10. C++ dynamic_cast 的使用

    C++中的dynamic_cast 执行运行时刻类型转换,起作用有点类似于Java当中的instance of reference:http://www.cnblogs.com/chio/archiv ...