[英]Visual Studio 2015 builds my project without problems, MSBuild.exe cannot
[英]SpecsFor MVC / MSBuild.exe not building / publishing project correctly in Visual Studio 2012
我正在嘗試使用SpecsFor MVC進行自動驗收測試,並且我注意到它無法在Visual Studio 2012上正確構建/發布項目,因此IIS Express沒有運行,在整個自動驗收中均以 “無法顯示頁面”消息結尾測試。
為了引導您完成所有測試,起初在嘗試運行自動化測試時,我在運行時收到“ Build Failed”消息
_host = new SpecsForIntegrationHost(config);
_host.Start();
。 加載SpecsFor MVC源代碼后,我注意到該錯誤是因為MSBuild.exe
進程失敗並且輸出消息正在寫入Console.Output
。 檢查輸出后,我注意到錯誤是找不到Microsoft.WebApplication.targets
。 經過研究,我發現以下內容:
.csproj
刪除<PropertyGroup>
節點,該節點刪除后, MSBuild.exe
不會退出並顯示錯誤代碼,因為它只有警告,仍會導致項目無法正確構建和發布。 在這種情況下,SpecsFor MVC將這種情況視為成功,然后繼續啟動IIS Express,但是由於未成功構建項目,因此由於IIS Express運行不正常,驗收測試導致出現另一條Page Cannot Be Displayed
消息。 C:\\Program Files (x86)\\MSBuild\\12.0\\Bin
具有一個新的不同MSBuild.exe文件C:\\Program Files (x86)\\MSBuild\\12.0\\Bin
。
IISTestRunnerAction.PublishSite()
方法中, MSBuild.exe
的路徑是通過System.Runtime.InteropServices.RuntimeEnvironment.GetRuntimeDirectory()
加載的,在我的案例中,該輸出是C:\\Windows\\Microsoft.NET\\Framework64\\v4.0.30319\\
。 手動將其更改為C:\\Program Files (x86)\\MSBuild\\12.0\\Bin
可解決此問題,並且項目已成功構建和發布。 我的最后一個問題是:有沒有一種方法可以更改System.Runtime.InteropServices.RuntimeEnvironment.GetRuntimeDirectory()
的值,這樣我就不需要更新SpecsFor MVC項目的源代碼了嗎?
在此先感謝您的幫助!
從SpecsFor.Mvc 3.2.0-rc01(仍是目前的預覽版)開始,您可以像這樣配置MSBuild的路徑:
var config = new SpecsForMvcConfig();
config.UseIISExpress()
.With(Project.Named("SpecsFor.Mvc.Demo"))
.CleanupPublishedFiles()
//Set the full path to MSBuild.exe here!
.UseMSBuildExecutableAt(@"C:\Program Files (x86)\MSBuild\12.0\Bin\msbuild.exe")
.ApplyWebConfigTransformForConfig("Test");
要了解如何在Visual Studio中組織這些“ .targets”文件是一個挑戰。 我對SpecsFor MVC的工作原理一無所知,但是,如果在路徑中放入正確的“ .targets”文件,它應該可以工作。 通過您的問題,我知道SpecsFor在內部調用MSBuild。
當您安裝新的構建計算機時,這是一個類似的問題,並且缺少許多Visual Studio組件。 並非所有這些都與框架一起部署。 有些是與Visual Studio分開的安裝程序一起提供的,其他則帶有特定的組件。
我沒有找到部署此所需文件的特定安裝程序。 我剛剛找到了MSBuild 2012安裝程序( http://www.microsoft.com/zh-cn/download/details.aspx?id=40760 ),但我不知道它是否部署了先前版本的.targets。
您也可以嘗試使用特定版本的ASP.NET MVC安裝程序。
另一種方法是嘗試在SpecsFor中查找參數,以查看它正在調用哪個版本的MSBuild。 如果它使用Program Files \\ v12中的版本,則應該可以使用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.