C# MS2015中的MvcBuildViews需要很长时间

C# MS2015中的MvcBuildViews需要很长时间,c#,msbuild,visual-studio-2015,teamcity,roslyn,asp.net-mvc,razor,C#,Msbuild,Visual Studio 2015,Teamcity,Roslyn,Asp.net Mvc,Razor,我们正在将一个解决方案转换为使用新的Roslyn编译器。当我在发布模式下通过teamCity构建它时,MVCBuildViews步骤仍然使用aspnet_compiler.exe,预编译视图大约需要15分钟。在.NET 4.5上使用以前版本的aspnet_compiler.exe时,此过程通常需要3分钟 这是需要一段时间的命令: C:\Windows\Microsoft.NET\Framework\v4.0.30319\aspnet\u compiler.exe-v temp-pe:\path\

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

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

C:\Windows\Microsoft.NET\Framework\v4.0.30319\aspnet\u compiler.exe-v temp-pe:\path\to\web\project\Directory

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

我们在堆栈溢出时遇到了相同的问题,这就是我们创建的原因。您可以在中阅读,但这里有一些血淋淋的技术细节,因为在编写我们自己的替代品之前,我们自然调查了
aspnet\u compiler.exe
为何如此缓慢

aspnet\u compiler.exe
早就存在了,当然,它通过
支持批编译之类的东西。但是,为了编译视图,必须首先将CSHTML模板转换为C#(CodeDOM)。不幸的是,这不是编译本身,因此
batch=“true”
不适用于它。(in-)有效地,视图按顺序处理,一次处理一个视图。你在它上面添加的任何roslyn功能都只会减慢它的速度,因为在某一点上必须进行CodeDOM->roslyn转换

下面是一个很好的堆栈跟踪,它描述了在
aspnet\u compiler.exe
中进行批编译之前发生的情况

注意(哪些调用)已经在两个
foreach
循环中。我想
batch=“true”
选项只能有效地加快网站项目中
App\u code
的编译速度

这就是我们之后的构建时间:

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

  • 最明显的理由是,它验证您查看代码。否则,您将在生产环境中用生成服务器上的编译时错误替换运行时错误
  • 另一个理由是性能。您的视图必须在某个时刻进行编译,如果它没有在编译时发生,那么访问您站点的前几个用户必须再次在生产中等待

谢谢!我将探索StackExchange.precomplation。并传递任何反馈。感谢StackExchange的各位工作出色。