MS2015中的MvcBuildViews需要很长时间

2024-04-21

我们正在转换解决方案以使用新的 Roslyn 编译器。当我在发布模式下通过 teamCity 构建它时,MVCBuildViews 步骤仍然使用 aspnet_compiler.exe,并且预编译视图需要大约 15 分钟。在 .NET 4.5 上使用早期版本的 aspnet_compiler.exe,相同的过程需要 3 分钟

这是需要一段时间的命令:

C:\Windows\Microsoft.NET\Framework\v4.0.30319\aspnet_compiler.exe -v temp -p E:\path\to\web\project\Directory

我尝试调整 MSBuild 参数,但没有任何改变。这是一个已知问题吗?有什么解决办法吗?我需要使用 Roslyn 预编译视图吗? 如果可以选择关闭 MVCBuildViews 步骤,那么它的缺点是什么(我相信我们选择在发布时预编译是导致此步骤运行的原因)。


我们在 Stack Overflow 上遇到了同样的问题,这就是我们创建的原因StackExchange.预编译 https://github.com/StackExchange/StackExchange.Precompilation。您可以在以下位置阅读相关内容:我们的公告博客文章 https://blog.stackoverflow.com/2015/07/announcing-stackexchange-precompilation/,但这里有一些血淋淋的技术细节,我们自然地进行了调查why aspnet_compiler.exe在编写我们自己的替代品之前,速度太慢了。

aspnet_compiler.exe很久以前就已经存在了ASP.NET-MVC /questions/tagged/asp.net-mvc and razor /questions/tagged/razor,当然,它支持诸如批量编译之类的东西<compilation batch="true" />。不过,为了编译视图,必须首先将 CSHTML 模板转换为 C# (CodeDOM)。不幸的是,这不是汇编如此,所以batch="true"不适用于它。 (in-)实际上,视图是按顺序处理的,一次处理一个视图。并且您在其之上添加的任何 roslyn 功能只会减慢速度,因为在某些时候必须进行 CodeDOM -> roslyn 转换。

这是一个很好的堆栈跟踪,显示了之前发生的情况batch编译于aspnet_compiler.exe发生。

Notice 此 AddBuildProvider 调用 http://referencesource.microsoft.com/#System.Web/Compilation/BuildProvidersCompiler.cs,188(这称为生成代码 http://referencesource.microsoft.com/#System.Web/Compilation/AssemblyBuilder.cs,470) 已经在两个里面了foreach循环。我猜是batch="true"选项仅在加速编译时有效App_Code在网站项目中...

这是我们的构建时间之后发生的情况:

我不建议任何在生产中运行 ASP.NET MVC 应用程序的人禁用预编译。

  • 最明显的论据是,它验证您查看的代码。否则,您将用构建服务器上的编译时错误来交换生产中的运行时错误。
  • 另一个论据是性能。您的视图必须在某个时刻进行编译,如果在编译时没有进行编译,则访问您网站的前几个用户必须再次在生产中等待。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

MS2015中的MvcBuildViews需要很长时间 的相关文章

随机推荐