Share via


使用 MSBuild 針對特定 .NET Framework

更新:2007 年 11 月

Visual Studio 2008 和 MSBuild 3.5 可讓您在建立或建置專案時,將目標設為 .NET Framework 的多個版本 (2.0、3.0 和 3.5 版)。這項功能就稱為「多目標」(Multi-Targeting) 功能。在 MSBuild 中,多目標是使用 Project 項目 (MSBuild) 上名為 ToolsVersion 的新屬性達成的。

工具組、目標 Framework 和 ToolsVersion

若要了解 MSBuild 如何與 Visual Studio 2008 搭配使用,就必須知道工具組與目標 Framework 之間的差異,以及這兩者與新 ToolsVersion 屬性的關係。這些都會決定 MSBuild 3.5 建置專案的方式。

工具組

工具組是將 MSBuild 工作、MSBuild 目標以及隨 MSBuild 和 .NET Framework 安裝的工具搭配在一起的集合。工具組包含編譯器 (例如 csc.exe 和 vbc.exe)、通用目標檔 (microsoft.common.targets) 以及通用工作檔 (microsoft.common.tasks)。3.5 工具組適用於目標 .NET Framework 2.0 和 3.0 版。但 2.0 工具組則只能用於目標 .NET Framework 2.0 版。

Visual Studio 2008 會安裝 .NET Framework 3.5,此版本包含兩個預先定義的工具組,分別用於 .NET Framework 2.0 和 .NET Framework 3.5。隨 Windows Vista 提供的 .NET Framework 3.0 則沒有特別定義的工具組。.NET Framework 2.0 工具組的目標只能是 .NET Framework 2.0,而 .NET Framework 3.5 工具組的目標則可以是 .NET Framework 2.0、3.0 或 3.5 版。

您也可以建立自己的自訂工具組。如需詳細資訊,請參閱標準和自訂工具組的組態

目標 Framework

目標 Framework 是建置的專案要在上面執行的 .NET Framework 版本。這之所以必要,是因為它能啟用 .NET Framework 2.0 版本特有的編譯器功能,或能參考只有該架構版本才隨附的組件。

目前,有三個 .NET Framework 版本適用於 Visual Studio 2008:

  • .NET Framework 2.0 (隨 Visual Studio 提供)。

  • .NET Framework 3.0 (隨 Windows Vista 提供)。

  • .NET Framework 3.5 (隨 Visual Studio 2008 提供)。

雖然有三種不同的 .NET Framework 版本,但這三個版本都是以 Visual Studio 2005 隨附的基本 Common Language Runtime (CLR) 2.0 版為基礎。

目標 Framework 版本是在專案檔中使用 TargetFrameworkVersion 屬性指定的。當您透過整合式開發環境 (IDE) 切換目標 Framework 版本時,Visual Studio 就會設定此值 (如需詳細資訊,請參閱 HOW TO:以特定的 .NET Framework 為目標平台)。TargetFrameworkVersion 的可能值包括 v2.0、v3.0 和 v3.5。它會指定為 MSBuild 屬性,例如:

<TargetFrameworkVersion>v2.0</TargetFrameworkVersion>

ToolsVersion 屬性

工具組版本可在專案檔中使用 Project 項目 (MSBuild) 上的 ToolsVersion 屬性指定。下列範例指出專案應使用 .NET Framework 2.0 工具組建置:

<Project ToolsVersion="2.0" ... </Project>

當您在命令列建置方案或專案時,若指定 msbuild.exe 的 ToolsVersion,可讓所有專案及專案間的相依性根據該 ToolsVersion 建置,即使方案中的每個專案在其 Project 項目 (MSBuild) 中指定了各自的 ToolsVersion 也無妨。

.NET Framework 版本之間的差別

.NET Framework 的三個版本都是以 CLR 2.0 版為基礎。.NET Framework 各版本間的差異在於可讓您在專案中參考的組件清單。例如,Visual Studio 2008 包含 LINQ 這項新技術。.NET Framework 3.5 是唯一有 LINQ 相關組件的 .NET Framework 版本。因此,除非專案特別將目標設為 .NET Framework 3.5,否則就無法使用 LINQ。同樣地,Windows Presentation Foundation (WPF) 是隨 Windows Vista 提供的功能。除非專案將目標設為 .NET Framework 3.0 和更新的 .NET Framework 版本,否則就無法建置 WPF 應用程式。

如需詳細資訊,請參閱標準和自訂工具組的組態

專案如何找出工具組

若要建立專案,Visual Studio 2008 需要使用工具組。MSBuild 會使用 $(MSBuildToolsPath) 屬性找出目標和工作。例如,MSBuild 會使用下列 XML 項目尋找 Microsoft.CSharp.targets 檔案:

<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" /> 

Microsoft.CSharp.targets 是 Visual Studio 2008 用來建立 Visual C# 專案的語言特定建置處理序範例。$(MSBuildToolsPath) 會解析為安裝 Microsoft.CSharp.targets 所在之適當 .NET Framework 版本的路徑 (例如 C:\Windows\Microsoft.Net\Framework\v2.0.50727)。

在 MSBuild 3.5 工具組建置此專案之前,它必須將 $(MSBuildToolsPath) 解析為 MSBuild 3.5 的安裝位置,如此工具組才能匯入 Visual Studio 2008 版的 Microsoft.CSharp.targets。

視 ToolsVersion 而定,$(MSBuildToolsPath) 會取得不同的值,使它根據 ToolsVersion 值載入不同的工具組。這個靈活的系統可讓專案、MSBuild 主應用程式或使用者指定用來建置專案的工具組,並指定 MSBuild 如何使用位置資訊挑選正確的工具組。

ToolsVersion 屬性的運作方式

當您在 Visual Studio 2008 中建立新專案或升級現有專案時,名為 ToolsVersion 的屬性會自動包含在專案檔中,並設為預設值 "3.5"。如需詳細資訊,請參閱以特定的 .NET Framework 為目標平台

若專案檔中定義了 ToolsVersion 值,MSBuild 會使用它來判斷 $(MSBuildToolsPath) (或 $(MSBuildBinPath)) 的值,這是 MSBuild 工具的路徑。如果沒有定義 ToolsVersion 值,MSBuild 會繼續使用舊的工具組路徑,因為它會假設專案是 Visual Studio 2005 專案。

如果您在 Visual Studio 2008 中開啟現有的 Visual Studio 2005 專案,專案實際上會「升級」並加入 "ToolsVersion=3.5",因為 Visual Studio 2008 只支援使用 3.5 工具組建置。因此,當您在 Visual Studio 2008 中建置專案時,使用的會是 Visual Studio 2008 工具組 (3.5),而不是 Visual Studio 工具組 (2.0)。

使用 2.0 工具組建立的專案可將 .NET Framework 2.0 設為目標,而使用 3.5 工具組建立的專案則可將 .NET Framework 2.0、3.0 或 3.5 版設為目標。即使 Visual Studio 專案已移轉為 Visual Studio 2008 且升級使用 3.5 工具組,但專案的目標 Framework 仍為 .NET Framework 2.0。此設計可確保專案移轉為 Visual Studio 2008 時,不會引入新的相依性。專案仍會如它在 Visual Studio 中一樣建置。

注意事項:

如果專案中已經定義了 ToolsVersion,Visual Studio 2008 不會變更其值。ToolsVersion 的值可供覆寫。如需詳細資訊,請參閱覆寫 ToolsVersion 設定

Visual Studio 2005 和 MSBuild 3.5 的相容性

Visual Studio 2005 無法開啟或建置 Visual Studio 2008 專案,或升級為 Visual Studio 2008 的專案。但如果您沒有使用 Visual Studio 2008 工具組所特有的任何新功能,如 LINQ、新 Visual C# 2008 或 Visual Basic 2008 語法功能等,MSBuild 2.0 工具組就可建置 Visual Studio 2008 專案。

請參閱

概念

覆寫 ToolsVersion 設定

標準和自訂工具組的組態