剃刀视图没有给出编译时错误[重复]

Posted

技术标签:

【中文标题】剃刀视图没有给出编译时错误[重复]【英文标题】: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 个错误?

【问题讨论】:

【参考方案1】:

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

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

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

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

【讨论】:

有用的信息。谢谢 @Darin Dimitrov 这会使执行速度更快吗?至少是第一次? @elranu,是的,应用程序池重新启动后的第一个请求可能会稍微快一些,但差异甚至可能不明显。预编译 Razor 视图的真正好处不是性能,而是您在开发期间获得的编译时安全性。 我不建议在调试模式下使用此标签,因为每次运行应用程序时,都必须编译视图(使其变慢),并且除非您停止,否则您无法更改视图应用程序。看看我的回答,看看如何在视图中获得编译时检查,同时能够编辑视图。 ***.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 语法是否正常工作。

我确定。

【讨论】:

以上是关于剃刀视图没有给出编译时错误[重复]的主要内容,如果未能解决你的问题,请参考以下文章

编译 Qt 应用程序时架构 x86_64 错误的重复符号

QSqlDatabasePrivate::addDatabase: 重复连接名称“MyConnection”错误

在表格视图中实现搜索栏 [重复]

正确编译的代码(没有错误)给出分段错误核心转储

c ++ unordered_set .find方法不会编译,给出“表达式必须有类类型”的错误

归档时:结构给出“冗余协议错误”,但在运行时没有