#1 楼
坦率地说,我会推荐RazorGenerator的nuget包。这样一来,您的视图就会在保存时生成一个.designer.cs
文件,并且除了获得视图的编译时错误外,它们还被预先编译到了程序集中(=更快的预热),并且Resharper也提供了一些其他帮助。要使用此功能,请在ASP.NET MVC项目中包括RazorGenerator nuget包,并在“工具”→“扩展和更新”下的项目下安装“ Razor Generator”扩展。
我们使用此功能和开销使用这种方法的每次编译要少得多。最重要的是,我可能会推荐RedGate的.NET Demon,它可以进一步大大减少编译时间的影响。
希望这会有所帮助。
评论
VS2012是否有类似的解决方案?
–丹尼尔
13年5月7日在12:22
不幸的是,它仅支持C#,不支持VB.Net
– Ed DeGagne
13年7月26日在14:59
@zoidbergi RazorGenerator与VS2012一起使用;使用RazorGenerator.Mvc和RazorGenerator.MsBuild时:不需要扩展。在stacktoheap.com上查看博客条目
– Jeroen K
2014年8月1日在9:19
可以将其仅用于查找错误吗?还是在部署应用程序时取代视图引擎?
– niico
17年7月7日在23:57
我已经安装了RazorGenerator nuget软件包和Razor Generator扩展。我的项目没有任何改变。没有出现.designer.cs文件。我使用Visual Studio 2017。
–迈克尔·萨姆泰拉泽(Michael Samteladze)
18/12/19在6:34
#2 楼
从RC1的自述文件doc(未由Google编制索引)ASP.NET编译器生成后步骤
当前,视图文件中的错误直到运行时才被检测到。为了让您在编译时检测到这些错误,ASP.NET MVC项目现在包括一个MvcBuildViews属性,该属性默认情况下处于禁用状态。要启用此属性,请打开项目文件并将MvcBuildViews属性设置为true,如以下示例所示:
<Project ToolsVersion="3.5" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<MvcBuildViews>true</MvcBuildViews>
</PropertyGroup>
注意启用此功能会增加一些开销。构建时间。
您可以通过执行以下步骤来更新使用早期版本的MVC创建的项目,以包括视图的构建时验证:
打开
在最上方的
<PropertyGroup>
元素下方添加以下元素:<MvcBuildViews>true</MvcBuildViews>
在项目文件的末尾,取消注释
<Target Name="AfterBuild">
元素,并对其进行修改以匹配以下内容:<Target Name="AfterBuild" Condition="'$(MvcBuildViews)'=='true'">
<AspNetCompiler VirtualPath="temp" PhysicalPath="$(ProjectDir)\..$(ProjectName)" />
</Target>
评论
如果这不适用于您的项目,请检查项目文件中的某处是否没有
– Adrian Grigore
09年4月20日在16:59
@mxmissile:Scott Guthrie建议向您的解决方案中添加一个Web部署项目,以在Web应用程序项目中获得这种支持:weblogs.asp.net/scottgu/archive/2006/09/22/…
–扎夫-本·杜吉德
09年7月28日在20:06
确保将EnableUpdateable设置为false,否则视图将不会被预编译。
–卡尔·霍尔伯格
2010年4月14日在8:41
为什么,为什么,为什么...没有用于构建视图的键盘快捷键? MS为什么?
– dariol
2011年7月11日在7:50
这是添加到MVC工具中的解决方案。 stackoverflow.com/a/2670792/878612
–lko
2014年5月7日晚上8:06
#3 楼
您可以为此使用aspnet_compiler:C:\Windows\Microsoft.NET\Framework\v2.0.50727\aspnet_compiler -v /Virtual/Application/Path/Or/Path/In/IIS/Metabase -p C:\Path\To\Your\WebProject -f -errorstack C:\Where\To\Put\Compiled\Site
其中“ / Virtual / Application / Path / Or / Path / In / IIS / Metabase”是这样的:“ / MyApp”或“ / lm / w3svc2 / 1 / root /”
此外,MSDN上还有一个AspNetCompiler任务,展示了如何将aspnet_compiler与MSBuild集成:
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Target Name="PrecompileWeb">
<AspNetCompiler
VirtualPath="/MyWebSite"
PhysicalPath="c:\inetpub\wwwroot\MyWebSite\"
TargetPath="c:\precompiledweb\MyWebSite\"
Force="true"
Debug="true"
/>
</Target>
</Project>
评论
这已经过时,请参见下面的自述文件摘录。
– JarrettV
09年2月12日20:00
另一个答案更详细地描述了项目任务,但是aspnet_compiler部分仍然是正确的(对构建代理有用)。
– mlhDev
19-09-27在20:22
#4 楼
另外,如果使用Resharper,则可以激活“解决方案范围分析”,它会检测aspx文件中可能存在的所有编译器错误。那就是我们要做的...评论
它确实适用于aspx文件,但解决方案范围的分析不包括ascx文件(用户控件)
–mookid8000
09年1月11日在11:12
我相信它可以在R#5中使用,但这对大型项目来说是巨大的资源(即使在我的16GB家用计算机上也不值得使用)。
–安德鲁(Andrew)
10年7月24日在13:47
@Andrew / @ mookid8000-R#还将捕获编译器不会捕获的错误,例如缺少/不正确的视图和操作。 R#会使您的PC速度变慢(我发现在具有4GB内存和超线程CPU的大型项目中,它会很好),但是我很容易就把时间花在等待它上,而最终我的操作减少了作为R#的代码提供了更高级别的操作,这些操作将我要手动完成同一任务所需执行的许多步骤组合在一起。您的项目一定很大!
–德鲁·诺克斯(Drew Noakes)
10-9-2'1:08
对于大型项目,“降低PC速度”是一种轻描淡写的说法。我的构建机器具有16GB的RAM和8个内核(2个Xeon),并且只是CRAWLS。我觉得R#并不是针对我们这样规模的项目而制作的...我们的解决方案有约30个项目,数百万个LOC和数百个视图。我喜欢R#应用于较小的项目(例如,几个项目且视图不超过50个),但是对于大项目,我们总是必须将其关闭。
–哔哔声
2011-6-26 at 0:53
这可能有效,但请逃之!!我以为我的解决方案很小,却从未完成“分析”并吃掉我所有的RAM和CPU来解决这个问题。花了我15分钟才能恢复。
–松果
2014年10月10日22:15
#5 楼
下一版本的ASP.NET MVC(在一月左右发布)应该具有编译视图的MSBuild任务,因此您可能要等待。请参阅公告
#6 楼
此处给出的答案适用于某些MVC版本,但不适用于其他版本。简单的解决方案适用于MVC1,但在升级到MVC2时不再遵守视图。这是由于网站项目文件中的错误。请参阅这篇Haacked文章。
请参见以下文章:http://haacked.com/archive/2011/05/09/compiling-mvc-views-in-a-build-environment.aspx
#7 楼
构建>运行代码分析热键:Alt + F11
帮助我捕获Razor错误。
评论
我赞成这个答案,因为热键确实暴露了Razor错误。但是我随后注意到,只有在IDE中打开.cshtml文件时,它似乎才起作用。
– Michael12345
17年8月17日在2:07
#8 楼
使用Visual Studio的Productivity Power Tools(免费)扩展会有所帮助。具体来说,是Solution Error Visualizer
功能。使用它,可以在解决方案资源管理器中(在发现错误的源文件中)以可视方式标记编译错误。但是由于某种原因,此功能无法与代码中其他任何地方的其他错误一起使用。对于MVC视图,任何编译时错误仍将在其各自的.cs文件中以红色加下划线。 ,但表示这些错误的信号不会在解决方案资源管理器中向上传播(绝对不会,甚至不会在包含的源文件中)。
感谢
BlueClouds
更正了我的上一个语句。我刚刚将此问题报告为扩展程序的github项目上的问题。
评论
我尝试了生产力电动工具。但是不像这里所说的那样。剃刀视图中有错误,但构建成功。视图未在红色或解决方案浏览器树中的任何位置标记或加下划线。
–蓝云
17年2月9日在15:19
@BlueClouds:您是对的。我创建了一个示例项目,并在视图中添加了编译时错误。该扩展名将在红色的错误行下划线,但不会在解决方案资源管理器中向上传播错误。我正在纠正我在答案中所说的。将答案留在这里,因为它仍然会有所帮助,而实际上并不能有效地解决问题。
– Veverke
17年2月12日在7:43
评论
我不知道您使用的是哪种Viewengine,但是如果您使用的是Razor,则可能要查看我的博客文章:应该也可以将该代码用于其他viewengine,但尚未完成并进行测试