1

我會盡力解釋清楚,因爲我可以MSBuild multitargeting如何工作

我想完全理解MSBuild multitargeting是如何工作的。

我已經閱讀了微軟的幾篇文章,我想我明白了基本的內容,但我想確保我不會錯過任何東西。

據微軟稱:

通過使用Visual Studio,你可以編譯應用程序在.NET Framework的幾個版本中的任何一個運行。例如,您可以編譯應用程序以在.NET Framework 2.0版上運行,並編譯相同的應用程序以在.NET Framework 4上運行。編譯爲多個框架的功能被命名爲multitargeting。

Visual Studio在開發計算機上安裝的最新版本的.NET Framework下運行。

http://msdn.microsoft.com/en-us/library/ee395432.aspx

所以不要這意味着Visual Studio中總是從最新框架裝電話的MSBuild?假設安裝了Visual Studio 2010,它將始終調用:%WINDIR%\Microsoft.NET\Framework\v4.0.30319\MsBuild.exe當構建任何項目targettting任何.Net Framework版本正確?

如果是的話,那麼定位舊的.Net Framewrok版本的能力是基於ToolsVersion和/或TargetFrameworkVersion的屬性?

如果是再次,那豈不是剛剛安裝最新的框架(還舊的框架,而不是安裝Visual Studio)在我的持續集成盒,我可以指出總是建立任何解決:%WINDIR%\Microsoft.NET\Framework\v4.0.30319\MsBuild.exe和只需指定ToolsVersion參數(如果需要,因爲每個項目都可以在TargetFrameworkVersion中指定它自己的目標版本,這會導致它們定位到舊的.Net Framework版本)。

在此之後,我認爲我的CI框會像Visual Studio那樣構建。我對嗎?我錯過了什麼?有什麼辦法可以完全確定嗎?

我做了一個快速測試,並我認爲它的工作原理:對按照指定的.Net框架項目正在建設中,但就像我說我要確保我沒有錯過什麼。

有什麼想法?

BTW:

原因很簡單,想做到這一點是因爲我有幾個可重用翻過項目自定義的MSBuild腳本,但一些在這些腳本的功能性要求的MSBuild 4.0和我也有幾個MSBuild任務建立在框架4.0的頂部,所以如果我有例如針對Framework 2.0的解決方案,並嘗試使用它來構建它:%WINDIR%\Microsoft.NET\Framework\v2.0.50727\MsBuild.exe我嘗試加載我的自定義目標時出現MSBuild錯誤

回答

0

是的,正確。從4.0目錄調用MSBuild將對以前的版本做正確的事情。他們唯一想補充的是3。5必須在框中才能實際構建目標爲2.0,3.0和3.5的項目。

此頁面在這裏:http://msdn.microsoft.com/en-us/library/bb822049.aspx調出Windows預裝什麼版本的預裝版本。