MSBuild

Microsoft Build Engine (MSBuild) 是用於建置應用程式的平台。 MSBuild 提供了專案檔的 XML 結構描述,以控制建置平台處理和建置軟體的方式。 雖然 MSBuild 已整合到 Visual Studio 中,但是兩者並不相依。開發人員可以在未安裝 Visual Studio 的環境中組織及建置產品。

本主題提供 MSBuild 的概觀:

  • MSBuild 專案檔的基本項目。

  • 如何使用 MSBuild 建置專案。

  • MSBuild 的進階功能。

  • Visual Studio 如何使用 MSBuild 建置專案。

  • 如需入門教學課程,請參閱逐步解說:使用 MSBuild

專案檔

MSBuild 使用直接而且可擴充的 XML 專案檔格式。 MSBuild 專案檔格式可以讓開發人員描述將要建置的項目,以及如何針對不同的作業系統和組態來建置這些項目。 此外,專案檔格式還能讓開發人員撰寫可重複使用的建置規則供個別檔案使用,讓這些組建 (Build) 在產品內的不同專案中仍有一致的表現。

以下章節描述 MSBuild 專案檔格式的部分基本項目。如需如何建立基本專案檔的教學課程,請參閱逐步解說:從頭開始建立 MSBuild 專案檔案

屬性

屬性表示成對的索引鍵/值組,可以用來設定組建。 宣告屬性的方式,是建立一個具有屬性名稱的項目,做為 PropertyGroup 項目的子項目。 例如,下列程式碼會建立名為 BuildDir 並具有 Build 值的屬性。

<PropertyGroup>

<BuildDir>Build</BuildDir>

</PropertyGroup>

在整個專案檔中,可以使用語法 $(PropertyName) 參考屬性。 例如,範例中的屬性是藉由使用 $(BuildDir) 參考的。 如需屬性的詳細資訊,請參閱 MSBuild 屬性

Items

項目 (Item) 是建置系統的輸入,通常代表檔案。 項目會依據使定者定義的項目名稱分組為各個項目類型。 這些項目類型可以做為工作的參數,工作會使用個別項目來執行建置流程的步驟。

在專案檔中宣告項目的方式,就是建立一個具有項目 (Item) 類型名稱的項目 (Element),做為 ItemGroup 項目 (Element) 的子系。 例如,下列程式碼會建立名為 Compile 的項目 (Item) 類型,其中包含兩個檔案。

<ItemGroup>

<Compile Include = "file1.cs"/>

<Compile Include = "file2.cs"/>

</ItemGroup>

在整個專案檔中,可以使用語法 @(ItemType) 參考項目 (Item) 類型。 例如,範例中的項目類型應該是藉由使用 @(Compile) 參考的。

在進階的建置案例中,可以使用萬用字元宣告項目,而項目中可包含額外中繼資料。 如需項目的詳細資訊,請參閱 MSBuild 項目

工作

工作是 MSBuild 專案用來執行建置作業之可執行程式碼的單元。 例如,工作可能是編譯輸入檔,或是執行外部工具。 工作可以重複使用,而且可以由不同專案中的不同開發人員共用。

工作的執行邏輯是以 Managed 程式碼撰寫,並且使用 UsingTask 項目對應到 MSBuild。 若想撰寫自己的工作,您可以撰寫一個實作 ITask 介面的 Managed 型別。 如需如何撰寫工作的詳細資訊,請參閱 工作撰寫

MSBuild 包含了您可以修改以符合需求的常用工作,例如用於複製檔案的 Copy、用於建立目錄的 MakeDir,以及用於編譯 Visual C# 原始程式碼檔案的 Csc。 如需可用工作的清單和用法的相關資訊,請參閱 MSBuild 工作參考

在 MSBuild 專案檔中執行工作的方式,就是建立一個具有工作名稱的項目,做為 Target 項目的子項目。 工作通常會接受參數,而這些參數會當做項目的屬性傳遞。 MSBuild 屬性和項目都可當做參數使用。 例如,下列程式碼會呼叫 MakeDir 工作,並且將在前一個範例中宣告的 BuildDir 屬性值傳遞給此工作。

<Target Name="MakeBuildDirectory">

<MakeDir Directories="$(BuildDir)" />

</Target>

如需工作的詳細資訊,請參閱 MSBuild 工作

目標

目標 (Target) 會將工作以特殊順序組成群組,並公開 (Expose) 專案檔的區段做為建置處理序的進入點 (Entry Point)。 目標通常會分組為許多邏輯區段,以提高可讀性且方便擴充。 將建置步驟分成多個目標之後,您就可以從其他目標呼叫一段建置流程,而不需要在每個目標內複製那一段程式碼。 例如,如果建置流程的許多個進入點都必須建置參考,您可以建立一個建置參考的目標,再於每個需要建置參考的進入點執行此目標。

在專案檔中,目標是使用 Target 項目宣告的。 例如,下列程式碼會建立名為 Compile 的目標,這個目標接著會呼叫 Csc 工作,此工作具有在前面範例中宣告的項目清單。

<Target Name="Compile">

<Csc Sources="@(Compile)" />

</Target>

在進階案例中,目標可用於描述彼此之間的關係並執行相依性分析,如果目標是最新版,即可略過建置流程的整個區段。 如需目標的詳細資訊,請參閱 MSBuild 目標

條件式項目

許多 MSBuild 項目會視條件而定義,也就是說,Condition 屬性會出現在項目中。 除非條件評估為 "true",否則會忽略條件式項目的內容。 例如:

<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>

表示「如果尚未定義 Configuration 屬性,則加以定義,並為其提供 Debug 值」。

幾乎所有 MSBuild 項目都可以有 Condition 屬性。 如需詳細資訊,請參閱 MSBuild 條件

區分大小寫

MSBuild XML 結構描述會遵循 XML 的規則。 項目和屬性名稱需區分大小寫。 但是,MSBuild 物件模型中的屬性、項目和中繼資料名稱不區分大小寫。 請考慮下列項目群組。

<ItemGroup>

<Compile Include="one.cs" />

<comPile Include="two.cs" />

</ItemGroup>

這會建立項目類型 Compile 或 comPile 或任何其他大小寫變化,並提供給它 "one.cs;two.cs" 值。

在命令提示字元中使用 MSBuild

若要在命令提示字元執行 MSBuild,請使用適當的命令列選項,將專案檔傳遞給 MSBuild.exe。 命令列選項能讓您設定屬性、執行特定目標,以及設定可控制建置流程的其他選項。 例如,您可以使用下列命令列語法,在 Configuration 屬性設為 Debug 的情況下建置 MyProj.proj 檔案。

MSBuild.exe MyProj.proj /property:Configuration=Debug

如需 MSBuild 命令列選項的詳細資訊,請參閱 MSBuild 命令列參考。 

安全性注意事項安全性注意事項

下載專案之前,請判斷程式碼的可信度。

進階概念

MSBuild 也可以用於執行其他作業,例如將錯誤、警告和訊息記錄到主控台或其他輸出裝置、執行目標的相依性分析,以及對項目中繼資料批次處理工作和目標。 如需這些進階概念的詳細資訊,請參閱 MSBuild 進階概念

在 Visual Studio 中使用 MSBuild

Visual Studio 會使用 MSBuild 專案檔格式儲存 Managed 專案的建置資訊。 使用 Visual Studio 介面加入或變更的專案設定會反映在針對每個專案產生的 .*proj 檔案中。 Visual Studio 會使用 MSBuild 的裝載執行個體 (Hosted Instance) 來建置 Managed 專案。 這表示 Managed 專案可以在 Visual Studio 中或是於命令提示字元  (即使未安裝  Visual Studio) 建置,其結果完全相同。

如需在 Visual Studio 中使用 MSBuild 的教學課程,請參閱逐步解說:使用 MSBuild

多目標

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

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

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

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

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

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

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

  • 如需詳細資訊,請參閱MSBuild 多目標

相關主題

標題

描述

逐步解說:從頭開始建立 MSBuild 專案檔案

顯示如何僅使用文字編輯器來累加建立基本專案檔。

逐步解說:使用 MSBuild

介紹 MSBuild 的建置區塊,以及顯示如何在不關閉 Visual Studio 整合式開發環境 (IDE) 的情況下,撰寫、管理和偵錯 MSBuild 專案。

MSBuild 概念

呈現 MSBuild 的四個建置組塊:屬性、項目、目標和工作。

MSBuild 項目

描述 MSBuild 檔案格式的一般概念,以及項目如何彼此搭配。

MSBuild 屬性

介紹屬性和屬性集合。 屬性是成對的索引鍵/值組,可以用來設定組建 (Build)。

MSBuild 目標

解釋如何以特定順序將各項工作集合在一起成為群組,並能夠在命令列上呼叫建置流程的區段。

MSBuild 工作

顯示如何建立 MSBuild 可用來執行原子建置作業的可執行程式碼單元。

MSBuild 條件

討論如何在 MSBuild 項目中使用 Condition 屬性。

MSBuild 進階概念

呈現批次處理、執行轉換、監視 (記錄) 組建,以及其他進階技巧。

其他 MSBuild 資源

列出社群和支援資源,以提供 MSBuild 的詳細資訊。

參考資料