1

我試圖使用SpecsFor MVC進行自動驗收測試,我注意到它不是在Visual Studio 2012上正確構建/發佈項目,因此IIS Express沒有運行,結束於整個自動驗收測試中的「頁面無法顯示」信息。SpecsFor MVC/MSBuild.exe不在Visual Studio 2012中正確構建/發佈項目

帶你通過了所有的考試得到這個工作,首先,嘗試運行自動化測試時,我得到一個運行

_host = new SpecsForIntegrationHost(config); 
_host.Start(); 

當「構建失敗」的消息。加載SpecsFor MVC源代碼後,我發現錯誤是因爲MSBuild.exe進程失敗,輸出消息正在寫入Console.Output。檢查輸出後,我發現錯誤是找不到Microsoft.WebApplication.targets。經過一番研究,我發現了以下:

  • External VS2013 build error "error MSB4019: The imported project <path> was not found"
    • 得票最多的一個談到去除的.csproj其取出後,將MSBuild.exe沒有錯誤代碼爲退出<PropertyGroup>節點它只有警告仍然導致項目未被正確發佈&。 SpecsFor MVC在這種情況下將此場景視爲成功,並繼續啓動IIS Express,但由於該項目未成功構建,驗收測試導致另一個Page Cannot Be Displayed消息,因爲IIS Express未正常運行。
  • 經過進一步的研究,我發現v11.0\WebApplications\Microsoft.WebApplication.targets was not found when file actually references v10其中概述了VS 2012具有位於C:\Program Files (x86)\MSBuild\12.0\Bin一個新的不同MSBuild.exe文件。
    • 現在的問題是,SpecsFor MVC IISTestRunnerAction.PublishSite()方法中,正在通過 System.Runtime.InteropServices.RuntimeEnvironment.GetRuntimeDirectory()這在我的情況下輸出C:\Windows\Microsoft.NET\Framework64\v4.0.30319\加載MSBuild.exe的路徑。將此手動更改爲C:\Program Files (x86)\MSBuild\12.0\Bin解決了該問題,並且成功發佈了構建&的項目。

我的最後一個問題是:有沒有一種方法,其中一個可以改變的System.Runtime.InteropServices.RuntimeEnvironment.GetRuntimeDirectory()值,這樣我就不需要更新SpecsFor MVC項目的來源是什麼?

在此先感謝您的幫助!

+0

我認爲首要的MSBuild如何SpecsFor MVC認定爲這裏最好的解決方案。我可以公開一種明確設置路徑的方法。你可以在Github上打開一個bug報告或功能請求,所以我可以記得查看這個嗎? –

+0

@MattHoneycutt - 發佈在https://github.com/MattHoneycutt/SpecsFor/issues/41上的問題 - 非常感謝您的幫助! :) –

回答

1

由於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"); 
+0

感謝您的及時幫助@Matt Honeycutt! :) –

0

瞭解如何在Visual Studio中組織這些「.targets」文件是一項挑戰。我對SpecsFor MVC的工作一無所知,但是如果你把正確的「.targets」文件放在它的路徑中,它應該可以工作。通過你的問題,我明白SpecsFor在內部調用MSBuild。

安裝新的生成機器時會出現類似的問題,並且很多Visual Studio組件缺失。並非所有這些都與框架一起部署。有些來自Visual Studio的獨立安裝程序,其他特定的組件。

我沒有找到一個部署這個需要的文件的特定安裝程序。我剛剛找到了MSBuild 2012安裝程序(http://www.microsoft.com/en-us/download/details.aspx?id=40760),我不知道它是否部署以前的版本.targets。

而且你也可以嘗試ASP.NET MVC安裝程序的特定版本。

另一種方法是嘗試在SpecsFor中查找參數,以查看它正在調用哪個版本的MSBuild。可能如果它使用Program Files \ v12中的版本,它應該可以工作。

+0

是的,如果它使用'C:\ Program Files(x86)\ MSBuild \ 12.0 \ Bin'中找到的新VS 2012 MSBuild,它可以正常工作。但它正通過'System.Runtime.InteropServices.RuntimeEnvironment.GetRuntimeDirectory()'讀取MSBuild的路徑,這在我的情況下返回'C:\ Windows \ Microsoft.NET \ Framework64 \ v4.0.30319 \輸出'.targets'錯誤 –

+0

對不起,我沒有回答你的問題。我認爲有兩種方法:1)找到並安裝部署所需.targets文件的正確包(我在某些ASP.NET MVC包中下注)或2)將SpecFlow更改爲接受不同的MSBuild路徑。既然它是一個開源項目,那麼拉請求呢? –

+0

我會說2.如果沒有其他方法可以改變'System.Runtime.InteropServices.RuntimeEnvironment.GetRuntimeDirectory()'的結果輸出,那麼它會更有意義。我已經聯繫了該項目的創建者以獲得反饋,然後將看到一個合併請求 –

相關問題