Asp.net-Mvc

VS2013 不編譯 ASP.NET MVC5 視圖

  • February 3, 2015

我的 Visual Studio Ultimate 2013 Update 4 不編譯 ASP.NET MVC 5 視圖。

儘管編譯總是成功的,但偶爾會在視圖上發現編譯錯誤。Intellisense 也在視圖上打開和關閉。我會說它在 VS2012 中工作得更好(我在那個版本上沒有太多 MVC)。

我試圖添加<MvcBuildViews>true</MvcBuildViews>到 .csproj 文件中,該文件用於在 VS2010 中工作,但它不再工作了。

知道可能是什麼問題嗎?

更新:我正在尋找查看視圖錯誤的方法,因為它發生在以前版本的 VS 中。

您的項目是否包含目標並在建構事件後掛鉤?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 與您的進行比較。

在解決方案資源管理器中右鍵點擊您的 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("$(BaseIntermediateOutputPath)", "PackageTmp", System.IO.SearchOption.AllDirectories))" />
   </ItemGroup>
   <Delete Files="@(ExtraWebConfigs)" />
   <RemoveDir Directories="@(ExtraPackageTmp)" />
   <AspNetCompiler VirtualPath="temp" PhysicalPath="$(WebProjectOutputDir)" />
 </Target>

(上面的程式碼應該有一個根節點的父<Project>節點,以防你看不到我提到的註釋)

關閉.csproj文件,然後在解決方案資源管理器中右鍵點擊您的項目,然後點擊Reload Project

這會將您的視圖添加到編譯步驟,如果發現錯誤,將停止您的建構。我發現這是一件好事,因為沒有它我有時不會注意到錯誤列表中的錯誤,直到我部署了我的站點然後手動點擊它們。請注意,它會為您的建構步驟增加一些時間,從而顯著減慢它的速度。根據您要實現的目標,您可能希望有選擇地啟用/禁用它以實現快速建構 -> 測試工作流程。

這個答案的靈感來自 Chris Hyne 對MVCBuildViews 無法正常工作Razor 視圖可以編譯嗎?.

引用自:https://stackoverflow.com/questions/28289107