剃刀视图没有给出编译时错误[重复]
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编译。默认情况下它不编译视图。您可以启用此功能,但请记住,它会增加构建时间。
您可以按照以下步骤启用编译视图:
卸载项目 打开项目文件 查找<MvcBuildViews>false</MvcBuildViews>
并将其更改为具有 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 语法是否正常工作。
我确定。
【讨论】:
以上是关于剃刀视图没有给出编译时错误[重复]的主要内容,如果未能解决你的问题,请参考以下文章
QSqlDatabasePrivate::addDatabase: 重复连接名称“MyConnection”错误