【问题标题】:razor views are not giving compile time error [duplicate]剃刀视图没有给出编译时错误[重复]
【发布时间】:2013-04-09 19:08:03
【问题描述】:

我最近安装了 VS 2012 Professional。

当我尝试构建我的 MVC4 Web 项目时。当我执行“构建”或“重新构建”时,它无法识别剃刀视图中的错误。

示例
我从项目中删除了一个命名空间/或者说重命名了它。我构建了解决方案,它给了我所有 cs 文件中的错误,我通过更改命名空间来修复。整个解决方案构建成功。当我运行该项目时,它给了我 编译错误 说找不到命名空间,因为在某些视图(*.cshtml 文件)中仍然引用了旧的命名空间。

预期的解决方案
我希望当我执行“构建”或“重新构建”时,它应该能够识别此类错误并显示任何其他错误。

这在 VS 2010 上运行良好,我是否缺少任何配置?

提前致谢!! 阿米特

编辑 我自己找到了答案,我认为现在发布问题还为时过早:

razor syntax with errors compiles when it should not compile

另一个问题

在 .csproject 文件中将值更改为 True 后,当我开始构建时 它显示错误的项目,但一次只显示一个错误。 比方说,我总共有 3 个视图有 5 个错误。它只会给我看一个 错误。是否有任何解决方案可以显示所有 5 个错误?

【问题讨论】:

    标签: asp.net-mvc asp.net-mvc-4 razor visual-studio-2012


    【解决方案1】:

    当我尝试构建我的 MVC4 Web 项目时。它无法识别错误 执行“构建”或“重新构建”时的剃刀视图。

    看起来很正常。 Razor 视图由 ASP.NET 运行时动态编译。如果您希望在编译时构建视图,可以将以下选项添加到您的 .csproj 文件中:

    <PropertyGroup>
        <MvcBuildViews>true</MvcBuildViews>
    </PropertyGroup>
    

    您可以查看this article 了解更多详情。

    【讨论】:

    • 有用的信息。谢谢
    • @Darin Dimitrov 这会使执行速度更快吗?至少是第一次?
    • @elranu,是的,应用程序池重新启动后的第一个请求可能会稍微快一些,但差异甚至可能不明显。预编译 Razor 视图的真正好处不是性能,而是您在开发期间获得的编译时安全性。
    • 我不建议在调试模式下使用此标签,因为每次运行应用程序时,都必须编译视图(使其变慢),并且除非您停止,否则您无法更改视图应用程序。看看我的回答,看看如何在视图中获得编译时检查,同时能够编辑视图。 stackoverflow.com/a/24665580/754049
    • 来自@buffjape 的链接线程:“使用 MvcBuildViews = true,您仍然可以编辑视图并按 F5 立即查看更改。”
    【解决方案2】:

    我建议您将 MmvcBuildViews 标记添加为 Release PropertyGroup 标记的子标记,以便仅当您在发布模式下编译(或在发布模式下发布时)编译视图。这样,您的应用程序在调试时会更快。而且,在部署之前(在发布模式下构建时),您会获得编译时检查。总之,您可以两全其美。

    <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
        <MvcBuildViews>true</MvcBuildViews>
      </PropertyGroup>
    

    【讨论】:

    • 使用 MvcBuildViews = true,您仍然可以编辑视图并按 F5 立即查看更改。
    • 你是对的,谢谢。我刚刚编辑了我的答案。
    【解决方案3】:

    根据我的经验,除了 真的 上面提到的设置,您仍然需要确保您的 csproj 文件中存在以下设置:

    <Target Name="MvcBuildViews" AfterTargets="AfterBuild" Condition="'$(MvcBuildViews)'=='true'">
    <AspNetCompiler VirtualPath="temp" PhysicalPath="$(WebProjectOutputDir)" />
    </Target>
    

    【讨论】:

    • 对我来说,这是完整的答案。谢谢
    • AspNetCompiler MSBuild 可以对 bin 文件夹执行 AfterBuild。本地构建 bin 文件夹位于源代码树中。 TFS Teambuild 编译到构建服务器上的不同目录。 AspNetCompiler 任务需要找到 bin 目录来引用所需的 DLL。解决方案是修改MVC项目的AfterBuild目标需要2个条目然后你在本地和TFS编译。
    • 还添加了:true
    【解决方案4】:

    默认情况下它不编译视图。您可以启用此功能,但请记住,它会增加构建时间。

    您可以按照以下步骤启用编译视图:

    • 卸载项目
    • 打开项目文件
    • 查找 &lt;MvcBuildViews&gt;false&lt;/MvcBuildViews&gt; 并将其更改为具有 true
    • 关闭项目文件并重新加载项目

    【讨论】:

      【解决方案5】:

      这是非常简单的答案 完成以下步骤:

      卸载项目

      编辑项目

      比搜索:

      <Target Name="MvcBuildViews" AfterTargets="AfterBuild" Condition="'$(MvcBuildViews)'=='true'">
        <AspNetCompiler VirtualPath="temp" PhysicalPath="$(WebProjectOutputDir)" />
      </Target>
      

      下面添加

      <Target Name="AfterBuild" Condition="'$(Configuration)'!='Debug'">
        <RemoveDir Directories="$(BaseIntermediateOutputPath)" />
      </Target>
      

      这就是卸载项目。构建

      并检查 Ur 语法是否正常工作。

      我确定。

      【讨论】:

        猜你喜欢
        • 2021-07-27
        • 2015-07-15
        • 2015-04-01
        • 1970-01-01
        • 1970-01-01
        • 2018-12-14
        • 1970-01-01
        • 2014-03-04
        • 2016-12-25
        相关资源
        最近更新 更多