在ASP.NET MVC中编译视图

Joh*_*ley 545 asp.net msbuild asp.net-mvc

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

Jar*_*ttV 551

来自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>
Run Code Online (Sandbox Code Playgroud)

注意 启用此功能会增加构建时间的开销.

您可以通过执行以下步骤来更新使用以前版本的MVC创建的项目,以包括视图的构建时验证:

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

  • 为什么,为什么,为什么......没有用于构建视图或不具有视图的键盘快捷键?MS为什么? (55认同)
  • 如果这对您的项目不起作用,请检查项目文件中是否存在<MvcBuildViews> false </ MvcBuildViews>.它覆盖了我在其上添加的新<MvcBuildViews>元素. (27认同)
  • 确保将EnableUpdateable设置为false,否则视图将不会被预编译.<EnableUpdateable> false </ EnableUpdateable> <MvcBuildViews> true </ MvcBuildViews>(http://devcarl.posterous.com/dont-combine-enableupdateable-and-mvcbuildvie) (6认同)
  • @mxmissile:Scott Guthrie建议在您的解决方案中添加Web部署项目,以便在Web应用程序项目中获得此类支持:http://weblogs.asp.net/scottgu/archive/2006/09/22/Tip_2F00_Trick_3A00_-Optimizing-ASP .NET-2.0的Web项目 - 建造 - 性能 - 与-VS-2005.aspx (3认同)
  • 这是添加到MVC工具的解决方案.http://stackoverflow.com/a/2670792/878612 (2认同)
  • 12年后还在处理这个问题... (2认同)

Mir*_*rko 148

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

要使用此包括RazorGenerator NuGet包在你的ASP.NET MVC项目,并安装了" 剃刀发电机项下在"扩展工具→扩展和更新.

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

希望这可以帮助.

  • 不幸的是它只支持C#而没有VB.Net (6认同)
  • @zoidbergi RazorGenerator与VS2012合作; 使用RazorGenerator.Mvc和RazorGenerator.MsBuild时:不需要扩展名.请参阅[stacktoheap.com]上的博客文章(http://stacktoheap.com/blog/2013/01/19/precompiling-razor-views-in-asp-dot-net-mvc-3/) (3认同)
  • 这可以用于仅查找错误 - 还是在部署应用程序时替换视图引擎? (2认同)

max*_*xnk 50

您可以使用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
Run Code Online (Sandbox Code Playgroud)

其中" / 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>
Run Code Online (Sandbox Code Playgroud)

  • 这已过时,请参阅下面的自述文档摘录. (5认同)

bh2*_*213 26

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

  • 对于大型项目来说,"将PC放慢一点"是一种保守的说法.我的构建机器有16GB的RAM和8个核心(2个Xeons),它只是CRAWLS.我有一种感觉R#只是不是为我们的大小项目而制作的......例如我们的解决方案有~30个项目,几百万个LOC,以及数百个视图.我喜欢R#在我们较小的项目上(例如一些项目,不超过50个视图),但在我们的大项目中,我们总是要把它关掉. (5认同)
  • 它适用于aspx文件,但解决方案范围的分析不包括ascx文件(用户控件) (4认同)
  • 我相信它确实在R#5中,但它对于大型项目来说是一个巨大的资源浪费(即使在我的16GB家用机器上它也不值得使用). (3认同)
  • @Andrew/@ mookid8000 - R#还会捕获编译器不会发生的错误,例如缺少/错误的视图和操作.R#会慢慢降低你的PC速度(我发现在4GB ram和超线程CPU的大型项目中它很好)但是我很容易回过头来等待它的时间,最后我的操作更少了作为R#的代码提供了更高级别的操作,这些操作将我必须采取的许多步骤批量组合在一起以手动完成相同的任务.你的项目必须是巨大的! (3认同)

bh2*_*213 11

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

公告


小智 7

构建 > 运行代码分析

热键:Alt+F11

帮助我发现 Razor 错误。

  • 我赞成这个答案,因为热键确实暴露了 Razor 错误。但是我随后注意到它似乎只有在您在 IDE 中打开 .cshtml 文件时才有效。 (2认同)

use*_*323 6

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

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

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