ASP.NET Core - 预编译视图改为运行时编译,即(解决 ASP.Net Core 视图文件会编译成DLL的问题)
作者: 发布时间:2022-04-27 来源:本站原创
点击数:
ASP.Net Core 2.0 默认会将项目中的所有视图文件编译成一个DLL文件,后面每次对视图文件进行修改还得编译发布成DLL再更新,比较麻烦。要和ASP.NET MVC一样直接发布VIEW文件,需要修改WEB项目工程文件(.csproj)加入一句话:<MvcRazorCompileOnPublish>false</MvcRazorCompileOnPublish>
:
.csproj 示例
<Project Sdk="Microsoft.NET.Sdk.Web">
<PropertyGroup>
<TargetFramework>netcoreapp2.1</TargetFramework>
<MvcRazorCompileOnPublish>false</MvcRazorCompileOnPublish>
</PropertyGroup>
<ItemGroup>
<Compile Remove="logfile\**" />
<Content Remove="logfile\**" />
<EmbeddedResource Remove="logfile\**" />
<None Remove="logfile\**" />
</ItemGroup>
</Project>
思路解析
默认情况下,生成项目时会把Views的视图文件编译成dll*.Views.dll
同时我们也看不到Views文件夹,如果有频繁修改视图内容的需求,这样就很不方便
我们可以将视图预编译改为运行时编译
1、添加Nuget:
<PackageReference Include="Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation" Version="3.1.9" />
2、在项目文件的节点下添加:
<RazorCompileOnPublish>false</RazorCompileOnPublish>
3、在AddControllersWithViews()方法后添加AddRazorRuntimeCompilation()
services.AddControllersWithViews()
.AddRazorRuntimeCompilation();
4、重新发布项目,发布后就可以看到多了Views文件夹,同时*.Views.dll没了
dotNET 6代码片断:
<PropertyGroup>
<TargetFramework>net6.0</TargetFramework>
<StartupObject>ZoomLaCMS.Program</StartupObject>
<RazorCompileOnPublish>false</RazorCompileOnPublish>
<RazorCompileOnBuild>False</RazorCompileOnBuild>
<MvcRazorCompileOnPublish>false</MvcRazorCompileOnPublish>
</PropertyGroup>