900字范文,内容丰富有趣,生活中的好帮手!
900字范文 > ASP.NET Core Razor 视图预编译 动态编译

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

时间:2019-07-28 01:57:29

相关推荐

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

0x01 前言

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

0x02 预编译

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

0x03 动态编译

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

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文件。此选项禁用此行为。注意: Core Mvc不支持可更新的预编译视图。如果发现该路径的预编译视图,则将忽略对已发布的cshtml文件的任何修改。

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

MvcRazorFilesToCompile:指定要编译的视图文件。默认情况下,这包括标记为内容的所有.cshtml文件。

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

/en-us/aspnet/core/mvc/views/view-compilation?view=aspnetcore-3.1

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。