【问题标题】:VS2013 does not compile ASP.NET MVC5 viewsVS2013 不编译 ASP.NET MVC5 视图
【发布时间】:2015-04-02 01:40:54
【问题描述】:

我的 Visual Studio Ultimate 2013 Update 4 不编译 ASP.NET MVC 5 视图。

虽然编译总是成功的,但偶尔会在视图中发现编译错误。 Intellisense 也在视图上打开和关闭。我会说它在 VS2012 中工作得更好(我在那个版本上没有太多 MVC)。

我尝试将<MvcBuildViews>true</MvcBuildViews> 添加到 .csproj 文件中,该文件用于在 VS2010 中工作,但它不再工作了。

知道可能是什么问题吗?

更新:我正在寻找查看视图错误的方法,就像以前版本的 VS 中发生的那样。

【问题讨论】:

标签: asp.net-mvc visual-studio razor visual-studio-2013 asp.net-mvc-5


【解决方案1】:

在解决方案资源管理器中右键单击您的 Web 项目。点击Unload Project。右键单击该项目,然后单击Edit <projname>.csproj

确保你有这个元素(如果它不存在就添加它)。

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

向下滚动到底部。您应该会看到一些注释“要修改您的构建过程,请将您的任务添加到以下目标之一中并取消注释它。”在其下方,添加此标记:

<Target Name="MvcBuildViews" AfterTargets="AfterBuild" Condition="'$(MvcBuildViews)'=='true'">
    <ItemGroup>
      <ExtraWebConfigs Include="$(BaseIntermediateOutputPath)\**\web.config" />
      <ExtraPackageTmp Include="$([System.IO.Directory]::GetDirectories(&quot;$(BaseIntermediateOutputPath)&quot;, &quot;PackageTmp&quot;, System.IO.SearchOption.AllDirectories))" />
    </ItemGroup>
    <Delete Files="@(ExtraWebConfigs)" />
    <RemoveDir Directories="@(ExtraPackageTmp)" />
    <AspNetCompiler VirtualPath="temp" PhysicalPath="$(WebProjectOutputDir)" />
  </Target>

(上面的代码应该有一个根&lt;Project&gt;节点的父节点,以防你看不到我提到的评论)

关闭.csproj 文件,然后在解决方案资源管理器中右键单击您的项目并单击Reload Project

这会将您的视图添加到编译步骤,并在发现错误时停止您的构建。我发现这是一件好事,因为没有它我有时不会注意到错误列表中的错误,直到我部署了我的站点然后手动点击它们。请注意,它会为您的构建步骤增加一些时间,从而显着减慢它的速度。根据您要实现的目标,您可能希望有选择地启用/禁用它以实现快速构建 -> 测试工作流程。

此答案的灵感来自 Chris Hyne 对 MVCBuildViews not working correctlyCan Razor views be compiled? 的回答。

【讨论】:

  • 这只是编译构建后的视图,并在生成的 C# 文件上显示错误。但我需要的是视图中的编译错误。
  • @vtortola 我不确定我是否理解你之后的想法。使用此配置,它将停止您的构建,显示编译错误列表,然后您可以双击它们以转到相应的视图并处理它们。如果这不是你所追求的,你能解释得更好吗?
  • 等待它现在工作。我收到关于不存在模型的错误,有两个错误,一个将我带到视图,另一个只是到生成的 C# 文件。谢谢!
  • 这在 VS2015 和 MVC5 中仍然有效吗?它似乎对我不起作用。我的解决方法是通过在发布期间启用预编译来编译构建服务器上的视图,但这似乎阻止了 EmbeddedResourceVirtualPathProvider 工作,这是该项目所必需的。我真的想要对 cshtml 进行一些错误检查,但目前似乎不可能。
【解决方案2】:

您的项目是否包含构建事件后的目标和挂钩?从命令行尝试msbuild WebApplication1.csproj /t:MvcBuildViews,它会检查您是否同时设置了默认属性集和定义了目标。

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

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

尝试从 VS2013U4 中创建一个空白 MVC 项目,并将 csproj 与您的进行比较。

【讨论】:

  • MvcBuildViews 在 VS2013 MVC5 应用程序中设置为 false。谢谢(你的)信息。打开,现在我可以看到在哪里查看 - 授予它是生成的 MVC 文件,但名称表示哪个剃刀视图。在命名空间重命名后必须遍历所有视图是一场噩梦。
猜你喜欢
  • 2014-03-04
  • 2014-11-08
  • 2023-04-05
  • 1970-01-01
  • 2011-08-13
  • 2010-09-27
  • 1970-01-01
  • 1970-01-01
  • 2016-08-05
相关资源
最近更新 更多