MSBuild Toolset (ToolsVersion)
MSBuild 使用工作、目標以及工具組建置應用程式。通常, MSBuild Toolset 包含 microsoft.common.tasks 檔案、microsoft.common.targets 檔案和編譯器 (例如 csc.exe 和 vbc.exe。大部分的工具組可用來編譯應用程式到多個 .NET Framework 的版本和多個系統平台。不過, MSBuild 開發工具組只能用於目標為 .NET Framework 套件。
ToolsVersion 屬性
指定工具組在 ToolsVersion 屬性在專案檔的 Project 項目。下列範例會指定使用 MSBuild 建立工具組,應建立專案。
<Project ToolsVersion="2.0" ... </Project>
ToolsVersion 屬性的運作方式
當您在 Visual Studio 中建立新專案或升級現有專案時,名為 ToolsVersion 的屬性在專案檔自動包含,且其值對應於 Visual Studio 版本中的 .NET Framework 版本。如需詳細資訊,請參閱以特定的 .NET Framework 版本或設定檔為目標。
當 ToolsVersion 值在專案檔中定義,值判斷 Toolset 屬性值對專案可用的 MSBuild 用途。一組屬性是 $(MSBuildToolsPath),指定 .NET Framework 工具的路徑。需要該工具組只屬性 (或 $(MSBuildBinPath))。
使用 MSBuildToolsPath 保留的屬性,如下列範例所示, MSBuild 尋找 Microsoft.CSharp.targets 檔案。
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
您可以定義自訂工具組 MSBuildToolsPath 修改的值。如需詳細資訊,請參閱標準和自訂工具組的組態。
當您在命令列建置方案並為指定 ToolsVersion msbuild.exe 時,所有專案以及專案對專案間的相依性根據該 ToolsVersion,建置,即使方案中的每個專案指定其 ToolsVersion。若要在中定義的 ToolsVersion 值每個專案為基礎,請參閱 覆寫 ToolsVersion 設定。
ToolsVersion 屬性為專案移轉也使用。例如,如果設定為,在 Visual Studio Test 的 Visual Studio 專案,此專案檔更新包括 ToolsVersion=」Windows "。如果您接著嘗試開啟 Visual Studio SP1 之專案,它無法辨識升級的 ToolsVersion 也不會建立專案,就像屬性仍然設定為必要條件。
Visual Studio 和 Visual Studio Load Test 2012 使用 ToolsVersion 版)。在大部分情況下,可以在 Visual Studio 的兩個版本的專案,而不需修改。
子 Toolset,本主題稍後會說明,允許設定工具會根據內容來執行組建的 MSBuild 自動切換至。例如, MSBuild 會使用較新的工具組,包含在 Visual Studio 2012 執行不同的是,在上安裝 Visual Studio 時,執行,而不需要您明確變更專案檔。如需詳細資訊,請參閱How to: 修改專案系統,使專案載入多個版本的 Visual Studio。
工具組實作
藉由選取組成 Toolset 各種工具、目標和工作的路徑實作工具組。在 MSBuild 定義的 Toolset 的工具來自下列資源:
.NET Framework 資料夾。
其他 Managed 工具。
managed 工具包括 ResGen.exe 和 TlbImp.exe。
MSBuild 會提供兩種方式存取工具組:
藉由使用工具組屬性
使用 ToolLocationHelper 方法
Toolset 屬性指定工具的路徑。在 MSBuild 專案檔在登錄機碼使用 ToolsVersion 屬性值找出對應的登錄機碼,然後使用工具組資訊設定屬性。例如,如果有, ToolsVersion 值,然後 使用MSBuild 根據這個登錄機碼設定 Toolset 屬性:HKLM \ Software \ Microsoft \ MSBuild \ ToolsVersions \ Jet。
這些是 Toolset 屬性:
MSBuildToolsPath 指定 .NET Framework 工具的路徑。
SDK40ToolsPath 指定其他 Managed 工具路徑為 MSBuild Windows NT。
SDK35ToolsPath 指定其他 Managed 工具路徑為 MSBuild 執行目標。
或者,您可以呼叫類別的方法 ToolLocationHelper 判斷工具組的方式。類別包含下列方法:
GetPathToDotNetFramework 傳回 .NET Framework 資料夾的路徑。
GetPathToDotNetFrameworkFile 傳回檔案的路徑在 .NET Framework 中的資料夾。
GetPathToDotNetFrameworkSdk 傳回 Managed 工具資料夾的路徑。
GetPathToDotNetFrameworkSdkFile 傳回檔案的路徑,通常位於 managed 工具資料夾。
子 Toolset
如所述。本主題, MSBuild 會使用登錄機碼指定基礎工具的路徑。如果索引鍵有子機碼, MSBuild 會用它來指定包含其他工具子 Toolset 的路徑。在這種情況下, Toolset 是藉由合併兩個索引鍵定義的屬性定義所定義的。
注意事項 |
---|
如果工具組屬性名稱衝突,為子機碼路徑定義的值覆寫為根目錄機碼路徑所定義的值。 |
子 Toolset 成為 VisualStudioVersion 建置屬性面前。這個屬性可能會採用下列其中一個值:
「\」指定 .NET Framework、子 Toolset
「列」指定 .NET Framework 4.5 子 Toolset
在建置期間,,如果尚未定義, MSBuild 會自動判斷和設定 VisualStudioVersion 屬性的預設值。
MSBuild 會將 VisualStudioVersion 列舉值做為參數的 ToolLocationHelper 方法提供多載。此外, MSBuild 會提供這些新方法傳回不同的原生工具路徑:
GetPathToWindowsSdk
GetPathToWindowsSdkFile
這些新方法也接受 VisualStudioVersion 列舉值做為參數判斷要使用哪一個子工具組。VisualStudioVersion 列舉值可以是下列其中一項:
VisualStudio10
VisualStudio11
VisualStudioLatest
子 Toolset 在 .NET Framework 4.5 中引入。