del*_*iro 6 c# msbuild teamcity roslyn visual-studio-2015
我们正在转换解决方案以使用新的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.Precompilation的原因。您可以在我们的公告博客文章 中阅读它,但这里有一些血腥的技术细节,因为我们自然而然地调查了为什么 aspnet_compiler.exe这么慢,然后再编写我们自己的替代品。
aspnet_compiler.exe早在asp.net-mvc和razor之前就已经存在了,当然,它支持通过<compilation batch="true" />. 不过,为了编译视图,必须首先将 CSHTML 模板转换为 C# (CodeDOM)。不幸的是,这不是编译本身,因此batch="true"不适用于它。(in-)有效地,视图按顺序处理,一次一个视图。并且您在其上添加的任何 roslyn 功能只会减慢它的速度,因为在某些时候必须进行 CodeDOM -> roslyn 转换。
这是一个很好的堆栈跟踪,在批处理编译aspnet_compiler.exe发生之前发生了什么。
注意这个 AddBuildProvider 调用(它调用GenerateCode)已经在两个foreach循环中。我猜这些batch="true"选项只会在加快App_Code网站项目中的编译速度方面有效...
这就是我们的构建时间之后发生的事情:
我不建议对在生产中运行 ASP.NET MVC 应用程序的任何人禁用预编译。
| 归档时间: |
|
| 查看次数: |
998 次 |
| 最近记录: |