我们有一个项目,如果视图的 .cshtml 文件中有任何错误,我们希望构建视图以生成编译时错误。
尽管如此,编译时间还是会急剧增加:
MvcBuildViews = true
耗时 62 秒MvcBuildViews = false
需要 9 秒
这是可以接受的吗?因为增长非常剧烈,我们无法忍受等待这样的编译时间。我们有什么办法可以改进这种编译?
到目前为止,该项目包含大约 130 个视图和部分视图(.cshtml 文件)。这被认为是大/中/小吗?
我们有一个项目,如果视图的 .cshtml 文件中有任何错误,我们希望构建视图以生成编译时错误。
尽管如此,编译时间还是会急剧增加:
MvcBuildViews = true
耗时 62 秒MvcBuildViews = false
需要 9 秒这是可以接受的吗?因为增长非常剧烈,我们无法忍受等待这样的编译时间。我们有什么办法可以改进这种编译?
到目前为止,该项目包含大约 130 个视图和部分视图(.cshtml 文件)。这被认为是大/中/小吗?
好吧,我认为有可能编译视图本身就是一件好事,但我也不能等那么久。所以我更喜欢做的是MvcBuildViews = true
在ProperyGroup
Release 中添加它,这样你就只在 Release 时和部署之前编译视图
属性组应如下所示:
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
所以把你的
<MvcBuildViews>true</MvcBuildViews>
在此 Release 块内。这样,您仍然可以编译一次视图,而不是每次尝试调试时...
我们在同样的问题上苦苦挣扎。我们开始编译 Views 是为了捕捉在集成测试和UX 测试期间会出现在我们身上的明显问题。更糟糕的是不知何故潜入生产的错误。
但是,正如您所注意到的,我们的构建时间变得无法忍受。像您一样,我们的开发人员构建了无数次,这成为我们一天的主要部分。我们在午餐后开玩笑说要进行测试,这样我们就可以在外出时完成构建。
我们最终在UX-tests之前开始构建。
现在我们正朝着预编译的方向发展。目前我们团队中只有一个人采用了它,并且显然预编译明显优于构建(增量与总)。设置基本上是一个 nuget 提取。
这些文章应该是一个好的开始
http://stacktoheap.com/blog/2013/01/19/precompiling-razor-views-in-asp-dot-net-mvc-3/
http://blog.davidebbo.com/2011/06/precompile-your-mvc-views-using.html
在调试配置的 csproj 中将 MvcBuildViews 设置为 false。
<MvcBuildViews Condition=" '$(Configuration)' != 'Debug' ">true</MvcBuildViews>
在菜单“工具/外部工具”中添加以下外部命令
Title: Compile with MVC views
Command: C:\Windows\Microsoft.NET\Framework64\v4.0.30319\MSBuild.exe
Arguments: $(SolutionDir)$(SolutionFileName) /p:MvcBuildViews=true
Initial directory: $(SolutionDir)
Use Output window: checked
然后添加一个快捷方式:进入工具/选项/环境/键盘找到命令“Tools.ExternalCommandX”,其中X是您刚刚添加的外部命令的位置。分配一个键(例如:Ctrl-shift-1)
现在解释:我们有同样的问题。大多数时候我们不想编译视图,但我们喜欢在签入代码之前编译它们,这样我们在 50 个视图中编译 1 次。为了实现这一点,我使用 mvcbuildviews 参数向 msbuild 添加了一个外部工具命令。唯一的缺点是 Visual Studio 的错误窗口中没有列出错误,您必须查看输出窗口并双击错误(如果有)。