在ASP.NET MVC中编译视图

时间:2008-12-20 10:51:00

标签: asp.net asp.net-mvc msbuild

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

8 个答案:

答案 0 :(得分:544)

来自RC1的自述文字doc(未经谷歌索引)

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创建的项目,以包括视图的构建时验证:

  1. 在文本编辑器中打开项目文件。
  2. 在最顶层的<PropertyGroup>元素下添加以下元素: <MvcBuildViews>true</MvcBuildViews>
  3. 在项目文件的末尾,取消注释<Target Name="AfterBuild">元素并修改它以匹配以下内容:
  4. <Target Name="AfterBuild" Condition="'$(MvcBuildViews)'=='true'">
        <AspNetCompiler VirtualPath="temp" PhysicalPath="$(ProjectDir)\..\$(ProjectName)" />
    </Target>
    

答案 1 :(得分:144)

我坦率地推荐 RazorGenerator nuget包。这样,您的视图在保存时会生成.designer.cs文件,并且除了为视图获取编译时错误之外,它们还会预编译到程序集中(=更快的预热),Resharper也会提供一些额外的帮助。

要使用此功能,请在ASP.NET MVC项目中包含 RazorGenerator nuget包,并在工具→扩展程序项下的项目下安装“ Razor Generator ”扩展名更新

我们使用这个,并且使用这种方法的每次编译的开销要少得多。除此之外,我可能会推荐 .NET Demon by RedGate ,这会进一步减少编译时间的影响。

希望这有帮助。

答案 2 :(得分:47)

您可以使用 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 /根/

MSDN上还有一个 AspNetCompiler Task ,显示了如何将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>

答案 3 :(得分:25)

此外,如果您使用Resharper,您可以激活Solution Wide Analysis,它将检测您在aspx文件中可能存在的任何编译器错误。这就是我们所做的......

答案 4 :(得分:11)

ASP.NET MVC的下一个版本(1月左右可用)应该具有编译视图的MSBuild任务,因此您可能需要等待。

请参阅announcement

答案 5 :(得分:6)

这里给出的答案适用于某些MVC版本,但不适用于其他版本。

这个简单的解决方案适用于MVC1,但在升级到MVC2时,视图不再受到影响。这是由于网站项目文件中的错误。看到这篇Haacked文章。

请参阅:http://haacked.com/archive/2011/05/09/compiling-mvc-views-in-a-build-environment.aspx

答案 6 :(得分:4)

构建&gt;运行代码分析

热键: Alt + F11

帮助我抓住Razor错误。

答案 7 :(得分:1)

使用Visual Studio的Productivity Power Tools免费)扩展程序有点帮助。具体来说,Solution Error Visualizer功能。有了它,解决方案资源管理器(在发现错误的源文件中)可视地标记了编译错误。但是,出于某种原因,此功能与代码中的其他任何错误都不起作用。

使用MVC视图时,任何编译时错误仍会在各自的.cs文件中以红色加下划线,但发出这些错误的信号不会在解决方案资源管理器中向上传播(绝不会在包含的源文件中传播)

感谢BlueClouds更正我之前的陈述。

我刚刚在扩展程序的github项目中将其报告为issue