Share via


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 會提供兩種方式存取工具組:

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 判斷工具組的方式。 類別包含下列方法:

Bb383796.collapse_all(zh-tw,VS.110).gif子 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 中引入。

請參閱

概念

標準和自訂工具組的組態

其他資源

MSBuild 多目標概觀