VS2013不编译ASP.NET MVC5视图

vto*_*ola 19 asp.net-mvc visual-studio razor visual-studio-2013 asp.net-mvc-5

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

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

我试图添加<MvcBuildViews>true</MvcBuildViews>到.csproj文件,用于在VS2010中工作的东西,但它不再工作了.

知道可能是什么问题吗?

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

mas*_*son 31

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

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

<Project>
  <PropertyGroup>
    <MvcBuildViews>true</MvcBuildViews>
  </PropertyGroup>
</Project>
Run Code Online (Sandbox Code Playgroud)

向下滚动到底部.您应该看到一些注释"要修改您的构建过程,请将您的任务添加到下面的一个目标中并取消注释." 在此之下,添加此标记:

<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>
Run Code Online (Sandbox Code Playgroud)

(<Project>如果您没有看到我提到的评论,上面的代码应该有根节点的父节点)

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

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

这个答案的灵感来自于Chris Hyne对MVCBuildViews无法正常工作的回答以及可以编译Razor视图吗?.


Ily*_*kov 15

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

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

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

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