在建構時嘗試建構 ASP MVC 視圖時出錯
我有一個 ASP MVC 4 項目。它從 MVC 1 開始,因此它使用舊式 ASPX/ASCX 視圖。我希望在建構時編譯視圖,主要是為了進行編譯時錯誤檢查(而且,重要的是,讓錯誤直接在 Visual Studio 中顯示)。我正在使用 IIS Express 作為調試伺服器在 Visual Studio Pro 2015 中進行開發。
根據msdn、Haacked和諸如此類的問題,我設置了以下我的 .vbproj:
<MvcBuildViews>true</MvcBuildViews>並且還在我的 .vbproj 中創建了一個任務
<Target Name="BuildViews" Condition="'$(MvcBuildViews)'=='true'" AfterTargets="Build"> <Message Importance="normal" Text="Precompiling views" /> <AspNetCompiler VirtualPath="temp" PhysicalPath="$(WebProjectOutputDir)" /> </Target>但是,這在嘗試建構時給了我一個錯誤:
“/temp”不是有效的 IIS 應用程序。
作為一個文件,它只是引用ASPNETCOMPILER
我嘗試了各種替代方法作為VirtualPath - 我將項目配置為在 dev 中作為子目錄*/local*執行,所以我嘗試了,並且 .vs 文件夾中配置的站點名稱沒有任何作用。
我應該更改VirtualPath(如果是的話)還是缺少其他一些配置以使temp工作?
編輯
此外,我在執行命令行 MSBuild 時遇到同樣的錯誤。對於我的實際生產系統,我有一個腳本,它使用命令行 MSBuild 進行建構,然後將建構的包移動到產品伺服器並進行部署。因此,它在建構時不會有 IIS express(或 IIS 執行)。您是否需要連接 Web 伺服器來編譯視圖?
編輯 2
我對這裡需要 virtulPath 以及與 Web 伺服器的明顯連接感到困惑。一些建議的解決方案涉及配置 IIS。IIS Express(我用於調試)在我理解的成功建構之前甚至不一定執行?無論如何,我的應用程序非常愉快地在虛擬目錄中執行(/local在調試模式下),但是將其用作值不起作用。如果重要,這是我項目中 .vs 文件夾中 applicationhost.config 的相關部分(我嘗試將相同的路徑放入 Documents/IIS Express 中的 applciationhost.config 中):
<site name="CarWeb-Site" id="2"> <application path="/" applicationPool="Clr4IntegratedAppPool"> <virtualDirectory path="/" physicalPath="C:\Users\adam.conway\Documents\My Web Sites\CarWeb-Site" /> </application> <application path="/local" applicationPool="Clr4IntegratedAppPool"> <virtualDirectory path="/" physicalPath="filesystem path to my project" /> </application> <bindings> <binding protocol="http" bindingInformation="*:57047:localhost" /> <binding protocol="http" bindingInformation="*:57047:*" /> </bindings> </site>所以我真的不明白為什麼
VirtualPath="/"不起作用,因為那是那些配置中引用的虛擬路徑。雖然我在這裡的主要目的是在 Visual Studio 中顯示視圖錯誤(我會接受僅限於此的答案),但我在一台甚至不一定安裝 IIS 的機器上使用 MSBuild 為生產環境建構也是這種情況。
AspNetCompiler 呼叫 aspnet_compiler.exe ( https://msdn.microsoft.com/en-us/library/ms229863.aspx?f=255&MSPPError=-2147217396 )。在 Visual Studio 錯誤列表中,對此 exe 的呼叫顯示為 ASPNETCOMPILER。
我建議您啟用診斷級別日誌記錄https://msdn.microsoft.com/en-us/library/jj651643.aspx,然後在建構日誌中搜尋 aspnet_compiler.exe 字元串並檢查正在使用的參數(特別是什麼路徑)呼叫 aspnet_compiler.exe。您也可以從日誌中複製並在 cmd.exe 中手動呼叫 aspnet_compiler.exe。
最有可能的問題是 PhysicalPath 屬性,而不是 VirtualPath,似乎 VirtualPath 屬性不影響建構。檢查這些答案:
- AspNetCompiler MSBuild 任務中的 VirtualPath - 它是否必須等於最終部署的虛擬路徑?
- 為什麼我需要用於 AspNetCompiler 任務的 VirtualPath 屬性
如果您需要 MSBuild 和 Visual Studio 的單獨路徑,您可以使用此技術http://web4.codeproject.com/Articles/156989/Resolve-temp-global-asax-error-ASPPARSE-Could?display=Print