在ASP.NET MVC中编译视图

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


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

要使用它, 在您的ASP.NET MVC项目中包含RazorGenerator nuget包,并在工具→扩展和更新下的项目下安装“ Razor Generator ”扩展。

我们使用这种方法,每次编译时使用这种方法的开销要少得多。 最重要的是,我可能会推荐使用RedGate的.NET Demon,它可以进一步减少编译时间的影响。

希望这可以帮助。


从RC1的自述文档文档(未由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>
    

    你可以使用aspnet_compiler来做到这一点:

    C:WindowsMicrosoft.NETFrameworkv2.0.50727aspnet_compiler -v /Virtual/Application/Path/Or/Path/In/IIS/Metabase -p C:PathToYourWebProject -f -errorstack C:WhereToPutCompiledSite
    

    其中“ / 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:inetpubwwwrootMyWebSite"
                TargetPath="c:precompiledwebMyWebSite"
                Force="true"
                Debug="true"
            />
        </Target>
    </Project>
    
    链接地址: http://www.djcxy.com/p/8423.html

    上一篇: Compile Views in ASP.NET MVC

    下一篇: Can an ASP.NET MVC controller return an Image?