簡體   English   中英

SpecsFor MVC / MSBuild.exe無法在Visual Studio 2012中正確構建/發布項目

[英]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 經過研究,我發現以下內容:

  • 外部VS2013生成錯誤“錯誤MSB4019:找不到導入的項目<路徑>”
    • 得票最多的人談到從.csproj刪除<PropertyGroup>節點,該節點刪除后, MSBuild.exe不會退出並顯示錯誤代碼,因為它只有警告,仍會導致項目無法正確構建和發布。 在這種情況下,SpecsFor MVC將這種情況視為成功,然后繼續啟動IIS Express,但是由於未成功構建項目,因此由於IIS Express運行不正常,驗收測試導致出現另一條Page Cannot Be Displayed消息。
  • 經過一些進一步的研究,我發現文件實際引用v10時未找到v11.0 \\ WebApplications \\ Microsoft.WebApplication.targets,它概述了VS 2012在C:\\Program Files (x86)\\MSBuild\\12.0\\Bin具有一個新的不同MSBuild.exe文件C:\\Program Files (x86)\\MSBuild\\12.0\\Bin
    • 現在的問題是,在SpecsFor MVC 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM