VS2013 不编译 ASP.NET MVC5 视图

VS2013 does not compile ASP.NET MVC5 views

我的 Visual Studio Ultimate 2013 Update 4 无法编译 ASP.NET MVC 5 次查看。

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

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

知道可能是什么问题吗?

更新:我正在寻找查看视图错误的方法,因为它发生在以前版本的 VS 中。

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

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

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

向下滚动到底部。您应该会看到一些评论 "To modify your build process, add your task inside one of the targets below and uncomment it." 在其下方添加此标记:

<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>

(上面的代码应该有根 <Project> 节点的父节点,以防你看不到我提到的评论)

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

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

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

您的项目是否包含目标并挂接到构建事件之后?从命令行尝试 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 与您的进行比较。