You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

升级Microsoft.CodeDom.Providers.DotNetCompilerPlatform 3.6.0后cshtml编译极慢求解决方案

解决ASP.NET 4.8升级Microsoft.CodeDom.Providers.DotNetCompilerPlatform 3.6.0后Razor编译缓慢的问题

我来分享几个针对性的解决方案,帮你在保留3.6.0版本的前提下,恢复.cshtml页面的编译速度:

1. 关闭Roslyn代码分析(最可能见效的方案)

新版本Roslyn默认启用了代码分析功能,这会大幅增加Razor页面的编译耗时。你可以在web.config的<system.codedom>节点中,给C#编译器添加-skip-analyzers参数,跳过代码分析:

<system.codedom>
  <compilers>
    <compiler language="c#;cs;csharp" extension=".cs" 
              type="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.CSharpCodeProvider, Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=3.6.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" 
              warningLevel="4" 
              compilerOptions="-skip-analyzers -optimize+ -cachePath:$(Temp)\RoslynCache" />
  </compilers>
</system.codedom>

另外添加-cachePath指定缓存目录,让编译结果可以复用,也能减少重复编译的开销。

2. 启用Razor预编译

ASP.NET 4.8支持Razor页面预编译,把.cshtml提前编译成DLL,避免运行时动态编译的开销:

  • 安装NuGet包Microsoft.AspNet.WebPages.Precompilation
  • 在项目属性的「生成」选项卡中,勾选「预编译站点」(开发环境也可以启用测试)
  • 发布时选择「预编译所有页面」,确保部署后无需动态编译

3. 修复程序集绑定重定向

升级后可能存在版本冲突,导致Roslyn加载错误的依赖。在web.config的<runtime>节点中添加正确的绑定重定向:

<runtime>
  <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
    <dependentAssembly>
      <assemblyIdentity name="Microsoft.CodeDom.Providers.DotNetCompilerPlatform" publicKeyToken="31bf3856ad364e35" culture="neutral" />
      <bindingRedirect oldVersion="0.0.0.0-3.6.0.0" newVersion="3.6.0.0" />
    </dependentAssembly>
    <dependentAssembly>
      <assemblyIdentity name="Microsoft.Net.Compilers" publicKeyToken="31bf3856ad364e35" culture="neutral" />
      <bindingRedirect oldVersion="0.0.0.0-3.7.0.0" newVersion="3.7.0.0" />
    </dependentAssembly>
  </assemblyBinding>
</runtime>

4. 排查自定义Razor扩展

如果项目中有自定义标签助手、视图引擎或HTML助手,新版本Roslyn可能对这些扩展的兼容性有变化,导致编译额外耗时:

  • 临时注释掉自定义扩展的注册代码
  • 测试页面加载速度是否恢复
  • 逐一恢复扩展,排查出导致缓慢的具体组件后针对性调整

5. 启用Visual Studio增量编译

在Visual Studio中开启增量编译和后台编译,减少重复编译的时间:

  1. 打开「工具」→「选项」
  2. 进入「项目和解决方案」→「生成并运行」
  3. 勾选「启用增量编译」和「启用后台编译」

如果以上方案仍无法解决,你可以给编译器添加-log:RoslynCompile.log参数生成编译日志,查看日志中哪个步骤耗时最长,再针对性优化。

内容的提问来源于stack exchange,提问作者taiji123

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.09 15:37:53