共用方式為


MSBuild 多目標

更新:2010 年 8 月

您可以使用 Visual Studio,將應用程式編譯為在數個 .NET Framework 版本中的任何一版上執行。 例如,您可以將應用程式編譯為在 .NET Framework 2.0 版上執行,並將同一個應用程式編譯為在 .NET Framework 4 版上執行。 編譯為一個以上 Framework 版本的能力稱為「多目標」(Multitargeting)。

注意事項注意事項

Visual Studio 會以開發電腦上安裝的最新版 .NET Framework 執行。

以下為多目標的一些優點:

  • 您可以開發以較舊版 .NET Framework (例如 2.0、3.0 和 3.5 版) 為目標的應用程式。

  • 您可以以 .NET Framework 以外的 Framework 為目標,例如 Silverlight Framework。

  • 您可以以「架構設定檔」(Framework Profile) 為目標,這是預先定義的目標 Framework 子集。

  • 如果 .NET Framework 4 版有任何 Service Pack 已發行,您可以以它們為目標。

  • 多目標可保證應用程式只使用目標 Framework 中提供的功能。

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

當您將應用程式編譯為以特定 Framework 為目標時,必須協調下列三組軟體元件:

  • 工具集,包含用來建立應用程式的編譯器、工作和目標。

  • 參考組件,用來設計和建置應用程式。

  • 執行階段組件,用來執行應用程式。

工具集 (ToolsVersion)

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

例如,設定專案檔的專案項目的 ToolsVersion 屬性,即可指定工具集。

<Project ToolsVersion="4.0" ...

您可以使用 4.0 版工具集,將應用程式編譯為在各種目標 Framework 上執行,但前提是您必須已安裝每個目標 Framework 的目標套件。 如需詳細資訊,請參閱本主題後面的<目標套件>。

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

注意事項注意事項

Visual Studio 並不包含用於變更工具集的使用者介面。

參考組件

Framework 通常會有相關聯的參考組件。 參考組件是一個簡化的組件,它不含程式碼,只公開公用型別和成員。

在設計階段和建置階段,Visual Studio 會使用目標 Framework 的參考組件做為篩選條件,只提供與該 Framework 相容的型別和成員。 例如,當您以 .NET Framework 3.5 版為目標時,只由 .NET Framework 4 版提供的型別和成員不會顯示在 Visual Studio 設計工具 (例如 [加入參考] 對話方塊的 [.NET] 索引標籤) 中,而且無法供建置處理序使用。

例如,LINQ 是 Visual Studio 2008 中包含的一項新技術。.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 應用程式。

目標套件

安裝對應的目標套件之後,參考組件即可使用。 目標套件包含了參考組件和列出這些組件的 FrameworkList.xml 檔。 FrameworkList.xml 檔也稱為可轉散發 (redist) 清單。

目標套件可從下列來源取得:

  • .NET Framework 2.0、3.0 和 3.5 版的目標套件包含在 .NET Framework 3.5 版 SP1 中。

  • .NET Framework 3.5 用戶端設定檔、.NET Framework 4 版和其用戶端設定檔以及 Silverlight 的目標套件都包含在 Visual Studio 中。

目標套件通常是安裝在 .. \Program Files (x86)\Reference Assemblies\Microsoft\Framework\ 資料夾。 .NET Framework 2.0 版的目標套件通常安裝在 .. \Windows\Microsoft.NET\Framework\v2.0.50727\ 資料夾。

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

執行階段組件

除非已安裝目標 Framework 的目標套件,否則您無法在 Visual Studio 中設定目標 Framework。 例如,若要以 .NET Framework 3.0 版為目標,必須已安裝該版的參考組件和相容組件。 在執行階段,Common Language Runtime (CLR) 融合載入器會將應用程式繫結至其目標 Framework 的執行階段組件。

選取目標 Framework

若要選取現有專案的目標 Framework

  1. 在 [方案總管] 中,以滑鼠右鍵按一下專案節點,然後按一下 [屬性]。

  2. 在 [應用程式] 索引標籤的 [目標 Framework] 清單中選取架構。 唯有已安裝目標套件的 Framework 才會顯示在此清單上。

    Visual Studio 會使用您的選擇,將這三個項目的值設定在專案檔中:

    • 例如,TargetFrameworkIdentifier 項目會命名如下目標 Framework:

      <TargetFrameworkIdentifier>Silverlight</TargetFrameworkIdentifier>

      如果遺漏這個項目,則其值預設為 ".NETFramework"。

    • 例如,TargetFrameworkVersion 項目會命名如下目標 Framework 版本:

      <TargetFrameworkVersion>v3.0</TargetFrameworkVersion>

    • 例如,TargetFrameworkProfile 項目會命名如下目標 Framework 設定檔:

      <TargetFrameworkProfile>Client</TargetFrameworkVersion>

      如果遺漏這個項目,則會以完整 Framework 為目標。

    Visual Studio 建置系統的 Common 目標會將這三個項目結合為一個識別項,即所謂的目標 Framework Moniker (TFM)。

案例:Visual Studio 以 .NET Framework 3.5 版為目標

假設 Visual Studio 是以 .NET Framework 4 版執行。 若要以 .NET Framework 3.5 版為目標,您必須已安裝相關聯的參考組件和執行階段組件。 這些組件包含在 .NET Framework 3.5 版 SP1 中。

在此案例中,Visual Studio 設計工具只會顯示經 .NET Framework 3.5 版參考組件篩選後的項目,而當您建置專案時,就會根據這些參考組件來建置專案。 當您執行這個專案時,這個專案會以 .NET Framework 3.5 版執行階段組件執行,而這些組件會以 CLR 2.0 版執行。

當您將應用程式部署到另一台電腦時,該電腦必須已安裝 .NET Framework 3.5 版。 您可以檢查目標電腦上是否有 3.5 版,並在必要時使用適當的可轉散發套件 (redist) 加以安裝。

案例二:Visual Studio 以 .NET Framework 4.1 版執行,並以 .NET Framework 4 版為目標

假設有 .NET Framework 4.1 版可用,而且 4 版和 4.1 版都以 CLR 4 版執行。 如果已安裝 .NET Framework 4.1 版,則 Visual Studio 會自動以該版執行。

對於以 .NET Framework 4 版為目標的專案,4 版的參考組件會篩選 Visual Studio 設計工具中可用的型別和成員,因此專案會根據這些參考組件建置,而最後產生的應用程式會以 4 版的執行階段組件執行。

請參閱

概念

MSBuild 進階概念

其他資源

在設計階段時解析組件

變更記錄

日期

記錄

原因

2010 年 8 月

已在本主題中合併了<使用 MSBuild 以特定 .NET Framework 版本為目標>。

資訊加強。