2013-01-17 35 views
3

有關於這個的一些問題在這裏,但沒有一個是有效的(對我來說)的答案。問題是:可靠的定位mstest.exe MSBuild中

有沒有辦法從msbuild項目中確定mstest.exe的位置,而不用硬編碼路徑或使用$(VSxxComnTools)或$(VSINSTALLDIR)變量?

原因是後者,因爲這需要在構建服務器(非TFS但竹或TeamCity的),只有安裝了VS測試代理,而不是一個完整的運行VS.

附加信息:當然,這也必須適用於每檯安裝了msbuild,安裝了c#編譯器和mstest的機器,因爲每個人都應該能夠從github檢出項目,調用msbuild並且所有應該只運行順利。

回答

3

你可以使用

$(MSBuildProgramFiles32)\Microsoft Visual Studio 11.0\Common7\Ide 

這是假設您正在使用您的所有資產的SKU版本相同即2012工作。當然,您可以輕鬆地在項目本身中創建其他版本的回退。

參考Use 32bit "Program Files" directory in msbuild

0

您可以添加在MSBuild的指向它和參考,一個機器的環境變量?所以如果你添加了var MSTEST_HOME,你可以在msbuild中使用$(MSTEST_HOME)?

+0

我可以,但是這將使它不可能對每一個其他人只是抓住從即項目github並構建和測試它。所以這對我來說不是一個有效的選擇。 –

0

這不是優雅,但要找到主機上安裝最新的MSTest.exe一個可靠的方法是

<MSTestPath Condition="'$(MSTestPath)'=='' And Exists('$(MSBuildProgramFiles32)\Microsoft Visual Studio 14.0\Common7\IDE\MSTest.exe')">$(MSBuildProgramFiles32)\Microsoft Visual Studio 14.0\Common7\IDE\MSTest.exe</MSTestPath> 
<MSTestPath Condition="'$(MSTestPath)'=='' And Exists('$(MSBuildProgramFiles32)\Microsoft Visual Studio 13.0\Common7\IDE\MSTest.exe')">$(MSBuildProgramFiles32)\Microsoft Visual Studio 13.0\Common7\IDE\MSTest.exe</MSTestPath> 
<MSTestPath Condition="'$(MSTestPath)'=='' And Exists('$(MSBuildProgramFiles32)\Microsoft Visual Studio 12.0\Common7\IDE\MSTest.exe')">$(MSBuildProgramFiles32)\Microsoft Visual Studio 12.0\Common7\IDE\MSTest.exe</MSTestPath> 
<MSTestPath Condition="'$(MSTestPath)'=='' And Exists('$(MSBuildProgramFiles32)\Microsoft Visual Studio 11.0\Common7\IDE\MSTest.exe')">$(MSBuildProgramFiles32)\Microsoft Visual Studio 11.0\Common7\IDE\MSTest.exe</MSTestPath> 
<MSTestPath Condition="'$(MSTestPath)'=='' And Exists('$(MSBuildProgramFiles32)\Microsoft Visual Studio 10.0\Common7\IDE\MSTest.exe')">$(MSBuildProgramFiles32)\Microsoft Visual Studio 10.0\Common7\IDE\MSTest.exe</MSTestPath> 
<MSTestPath Condition="'$(MSTestPath)'=='' And Exists('$(MSBuildProgramFiles32)\Microsoft Visual Studio 9.0\Common7\IDE\MSTest.exe')">$(MSBuildProgramFiles32)\Microsoft Visual Studio 9.0\Common7\IDE\MSTest.exe</MSTestPath>