共用方式為


標準和自訂工具組的組態

更新:2007 年 11 月

MSBuild 3.5 包含兩個預先定義的「工具組」(Toolset)。工具組是可用來建置專案的工作、目標和命令列工具集合。您也可以建立自己的自訂工具組。

注意事項:

在繼續之前,建議您先閱讀使用 MSBuild 針對特定 .NET Framework,深入了解工具組、目標架構和工具版本。

工具組類型

定義自訂工具組時,也會一起定義 $(MSBuildToolsPath) 所指目錄的值。因此,您可以在專案檔中使用 $(MSBuildToolsPath) 來匯入工作和目標,而不需要使用硬式編碼將工作和目標值寫入專案檔中。這可讓您在登錄或組態檔中全域定義工具組,以在開發人員桌面或在建置實驗室案例中進行建置。

藉由使用工具組,您可以指示 MSBuild 將目標設定在特定的 .NET Framework 版本。這表示您可以建置只適用於 Visual Studio 2008 的專案,而且也可以在 Visual Studio 2008 中建置 Visual Studio 2005 專案。

Visual Studio 2008 包含兩個「標準」工具組。其中一個工具組在 Visual Studio 2005MSBuild 2.0 就已經提供,目標為 .NET Framework 2.0。另一個工具組則是隨附 MSBuild 3.5 提供,可將目標設為 .NET Framework 2.0、.NET Framework 3.0 和 .NET Framework 3.5。

標準工具組的組態

MSBuild 3.5 包含下列標準工具組:

ToolsVersion

MSBuildToolsPath 或 MSBuildBinPath

2.0

<Windows installation path>\Microsoft.Net\Framework\v2.0.50727\

3.5

<Windows installation path>\Microsoft.NET\Framework\v3.5.20223\

當您執行 MSBuild.exe 或建立 MSBuild 引擎的執行個體時,可以在電腦上任何位置使用標準工具組,除非工具組的資訊在 MSBuild.exe.config 檔案或主應用程式特定的組態檔中被覆寫。

ToolsVersion 值是在專案檔的 Project 標記中指定的屬性,會決定 Visual Studio 產生的專案使用哪一個工具組。您可將 ToolsVersion 視為工具組的「名稱」。如果專案中未指定 ToolsVersion,就會使用預設 ToolsVersion。MSBuild 3.5 的預設 ToolsVersion 值會設為 2.0。這表示在沒有明確指定 ToolsVersion 的情況下,建置的專案將使用 Visual Studio 2005 隨附的 2.0 工具組。Visual Studio 2008 專案會使用 3.5 的 ToolsVersion 值自動產生所有專案。由於使用新的工具組,因此可以將目標設為所有三個 .NET Framework 版本。

標準工具組的資訊是在下列登錄機碼中定義的:

登錄區

字串機碼名稱

字串機碼值

\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSBuild\3.5\

DefaultToolsVersion

2.0

\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSBuild\ToolsVersions\2.0\

ToolsPath

.NET Framework 2.0 安裝路徑

\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSBuild\ToolsVersions\3.5\

ToolsPath

.NET Framework 3.5 安裝路徑

DefaultToolsVersion 會在沒有指定工具組的情況下,指定建置專案時使用哪一個工具組。例如,Visual Studio 2008MSBuild 的 DefaultToolsVersion 值為 2.0。DefaultToolsVersion 的值可在主應用程式特定組態檔中覆寫。其他值則會定義 .NET Framework 版本的安裝路徑。

注意事項:

建議您在非必要的情況下不要變更這些設定。不過,您可以加入自己的設定,並定義電腦通用的自訂工具組定義,如下節所述。

自訂工具組定義

當標準工具組無法滿足建置需求時,您可以建立自訂工具組。例如,在某個建置實驗室案例中,您必須使用另外的建置系統來建置 Visual C++ 專案。藉由使用自訂工具組,您就可以在建立專案或執行 MSBuild.exe 時,指派自訂值給 ToolsVersion 屬性。這麼做也可讓您使用 $(MSBuildToolsPath) 屬性從該目錄匯入 .targets 檔案 (或者,如果您不想定義另外的工具組,也可以使用環境變數)。

請在 MSBuild.exe (或若有其他工具裝載 MSBuild 引擎,則為 MSBuild 的自訂主應用程式) 的組態檔中指定自訂工具組。例如,MSBuild.exe 的組態檔可能包含下列工具組定義:

<msbuildToolsets default="3.0">
   <toolset toolsVersion="4.0">
      <property name="MSBuildToolsPath" 
        value="C:\Windows\Microsoft .NET\Framework\v3.0" />
   </toolset>
</msbuildToolsets>

<msbuildToolsets> 是自訂的 .NET 組態區段,此區段也必須在組態檔中定義,如下所示:

<configSections>
   <section name="msbuildToolsets"       
       Type="Microsoft.Build.BuildEngine.ToolsetConfigurationSection, 
       Microsoft.Build.Engine, Version=3.5.0.0, Culture=neutral, 
       PublicKeyToken=b03f5f7f11d50a3a"
   </section>
</configSections>
注意事項:

為正確讀取,configSections 標記必須是組態標記底下的第一個標記。

ToolsetConfigurationSection 是自訂的組態區段,自訂組態的任何主應用程式都可使用此區段。如果您使用自訂工具組,主應用程式除了提供組態檔項目,無須再執行任何動作,就可初始化建置引擎。藉由在登錄定義項目,您可以指定電腦通用工具組,此工具組適用於 MSBuild.exe、Visual Studio 和 MSBuild 的所有主應用程式

注意事項:

如果組態檔定義 ToolsVersion 的設定,但在登錄中已經有定義,這兩個定義不會合併。組態檔中的定義優先適用,該 ToolsVersion 在登錄中的設定會被忽略。

下列屬性是專案中所用 ToolsVersion 的值特有的屬性:

  • $(MSBuildBinPath) - MSBuildBinPath 會設定為 ToolsPath 值,此值是在登錄或定義 ToolsVersion 所在的組態檔中指定的。登錄或組態檔中的 $(MSBuildToolsPath) 設定會指定工具組的位置。在專案檔中,這相當於 $(MSBuildBinPath) 屬性,也相當於 $(MSBuildToolsPath) 屬性。

  • $(MSBuildToolsPath) - 此保留屬性是由組態檔中指定的 MSBuildToolsPath 屬性所提供 (此屬性取代 $(MSBuildBinPath)。不過,為相容性考量,仍沿用 $(MSBuildBinPath))。

您也可以使用加入 MSBuildToolsPath 屬性的相同語法,將自訂的 ToolsVersion 特有屬性加入組態檔。專案檔可以使用組態檔中指定值的相同名稱來使用這些自訂屬性。

請參閱

概念

MSBuild 進階概念