我想要一个msbuild任务来编译视图,以便可以查看编译时是否存在编译时错误。有什么想法吗?

评论

我不知道您使用的是哪种Viewengine,但是如果您使用的是Razor,则可能要查看我的博客文章:应该也可以将该代码用于其他viewengine,但尚未完成并进行测试

#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>


评论


如果这不适用于您的项目,请检查项目文件中的某处是否没有 false 。它覆盖了我在其之上添加的新元素。

– 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,否则视图将不会被预编译。 false true (devcarl.posterous.com/…)

–卡尔·霍尔伯格
2010年4月14日在8:41

为什么,为什么,为什么...没有用于构建视图的键盘快捷键? MS为什么?

– dariol
2011年7月11日在7:50

这是添加到MVC工具中的解决方案。 stackoverflow.com/a/2670792/878612

–lko
2014年5月7日晚上8:06

#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