如何在ASP.NET Core 5.0中禁用MVC .cshtml页面发布时预编译
解决ASP.NET Core 5.0 MVC发布时关闭cshtml预编译的方案
配置失效的核心原因是MvcRazorCompileOnPublish是ASP.NET Core 2.x版本的旧属性,3.0及以上版本已被RazorCompileOnPublish替代,旧属性不会生效,按以下步骤调整即可:
第一步:修正项目文件(.csproj)配置
替换原有PropertyGroup的相关配置如下:
<PropertyGroup> <TargetFramework>net5.0</TargetFramework> <!-- 关闭发布时的Razor预编译 --> <RazorCompileOnPublish>false</RazorCompileOnPublish> <!-- 保留编译上下文供运行时编译使用 --> <PreserveCompilationContext>true</PreserveCompilationContext> <!-- 将cshtml源文件复制到发布目录 --> <CopyRazorGenerateFilesToPublishDirectory>true</CopyRazorGenerateFilesToPublishDirectory> </PropertyGroup> <ItemGroup> <!-- 保持运行时编译包引用,建议使用5.0大版本下的最新补丁版避免兼容问题 --> <PackageReference Include="Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation" Version="5.0.17" /> </ItemGroup>
第二步:调整Startup.cs配置(可选优化)
如果需要适配不同环境的运行时编译规则,可以参考以下写法,原有全局开启的写法也可正常使用:
public void ConfigureServices(IServiceCollection services) { var mvcBuilder = services.AddControllersWithViews(); // 可根据实际需求调整启用运行时编译的环境 mvcBuilder.AddRazorRuntimeCompilation(); }
第三步:验证发布结果
发布后检查输出目录:
- 不会生成
[项目名].Views.dll这类视图预编译程序集 - Views目录下会保留所有原始.cshtml文件,修改发布目录下的cshtml文件刷新页面即可生效,无需重新发布
注意:如果使用命令行执行发布操作,不要额外附加
/p:RazorCompileOnPublish=true参数,否则会覆盖项目文件中的配置导致预编译依然生效。
内容的提问来源于stack exchange,提问作者M005
相关产品推荐
相关产品推荐

