ASP.NET Core Razor 视图预编译、动态编译
2020-02-27 17:34
549 查看
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 1.1 中预编译 MVC Razor 视图
- ASP.NET Core中使用Razor视图引擎渲染视图为字符串(转)
- 体验 ASP.NET Core 1.1 中预编译 MVC Razor 视图
- ASP.NET Core 中的SEO优化(2):中间件中渲染Razor视图
- ASP.NET Core Razor 视图组件
- ASP.NET Core Razor 视图组件
- ASP.NET Core中使用Razor视图引擎渲染视图为字符串
- ASP.NET Core Razor 视图组件
- Do You Kown Asp.Net Core - 根据实体类自动创建Razor Page CURD页面模板
- Asp.Net Core-几行代码解决Razor中的嵌套if语句
- 深入剖析ASP.NET的编译原理之一:动态编译(Dynamical Compilation)(转)
- ASP.NET MVC 3 Razor 视图引擎 基本语法
- ASP.NET MVC 自定义Razor视图WorkContext
- [翻译]ASP.NET MVC 教程 - 传递数据到视图母版页(适合动态绑定菜单)
- ASP.NET Core 入门教程 7、ASP.NET Core MVC 分部视图入门
- ASP.NET MVC Razor视图引擎
- ASP.NET 动态编译、预编译和 WebDeployment 项目
- 基于 ASP.NET Core 2.1 的 Razor Class Library 实现自定义错误页面的公用类库
- [转]介绍“Razor”— ASP.NET的一个新视图引擎