Share via


MSBuild

Microsoft Build Engine 是建置應用程式的平台。 這個引擎,也稱為 MSBuild,為控制項的專案檔的 XML 結構描述組建平台如何處理和建置軟體的方式。 Visual Studio 中使用 MSBuild,不過,它不是由 Visual Studio。藉由叫用在專案或方案檔的 msbuild.exe,您在 Visual Studio 未安裝的環境中組織及建置產品。

Visual Studio 中使用 MSBuild 載入和建置 Managed 專案。 在 Visual Studio (.csproj、.vbproj, vcxproj 和其他) 的專案檔包含 MSBuild 使用 IDE,執行的 XML 程式碼,以及指定建置專案。 Visual Studio 專案匯入所有必要的設定和建置流程完成一般開發工作,您可以使用 XML 編輯器,不過,您可以擴充或修改它們從 Visual Studio 內或。

下列範例說明時可能會建置使用 MSBuild 命令列而不是 Visual Studio IDE。

  • 尚未安裝 Visual Studio。

  • 您要使用 MSBuild 64 位元版本。 MSBuild 版本通常這不是必要的,不過,它允許 MSBuild 存取更多記憶體。

  • 您想在多個處理序的組建。 不過,您可以使用 IDE 從 Visual Studio 2012 開始取得在專案的相同結果,並在 C++ 中,, C#。

  • 您要修改建置系統。 例如,您可能想要提供下列動作:

    • 才能達到編譯器之前,請先前置處理檔案。

    • 複製到建置輸出至不同位置。

    • 若要從組建輸出的壓縮檔。

    • 進行後續處理步驟。 例如,您可能想要戳記有不同版本的組件。

使用 MSBuild,您在 Visual Studio IDE 中撰寫程式碼,但是執行組建。 做為另一個替代方式中,您在開發電腦上的 IDE 中建立程式碼,但是使用 MSBuild 命令列會從多個開發人員都整合的程式碼。

注意事項注意事項

您可以使用 Team Foundation Build 編譯,自動測試和部署應用程式。您的建置系統可以自動執行組建,當開發人員根據排程 (例如,夜間組建驗證測試或簽入程式碼 (例如,做為一個連續整合策略的一部分) 或。使用 MSBuild, Team Foundation Build 編譯您的程式碼。如需詳細資訊,請參閱建置應用程式

本主題提供 MSBuild 的概觀。 如需入門教學課程,請參閱逐步解說:使用 MSBuild

本主題內容

  • 在命令提示字元中使用 MSBuild

  • 專案檔

    • 屬性

    • Items

    • 工作

    • 目標

  • 建置記錄

  • 在 Visual Studio 中使用 MSBuild

  • 多目標

在命令提示字元中使用 MSBuild

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

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

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

安全性注意事項安全性提示

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

專案檔

MSBuild 是直接使用和可擴充的 XML 架構專案檔格式。 MSBuild 專案檔格式可以讓開發人員描述將要建置的項目,以及如何針對不同的作業系統和組態來建置這些項目。 此外,專案檔格式可以讓開發人員撰寫可以納入個別檔案的可重複使用的建置規則,讓組建可以在不同的專案一致地執行本產品。

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

Dd393574.collapse_all(zh-tw,VS.110).gif屬性

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

<PropertyGroup>
    <BuildDir>Build</BuildDir>
</PropertyGroup>

您可以將 Condition 屬性有條件地定義屬性在這個項目。 除非條件評估為 true,否則會忽略條件式項目的內容。 在下列範例中,如果,它尚未定義, Configuration 項目定義。

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

在整個專案檔中,可以使用語法 $(PropertyName) 參考屬性。 例如,您可以使用 $(BuildDir) 和 $(Configuration),您可以參考在先前範例中的屬性。

如需屬性的詳細資訊,請參閱 MSBuild 屬性

Dd393574.collapse_all(zh-tw,VS.110).gifItems

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

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

<ItemGroup>
    <Compile Include = "file1.cs"/>
    <Compile Include = "file2.cs"/>
</ItemGroup>

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

在 MSBuild,項目和屬性名稱會區分大小寫。 不過,屬性、項目和中繼資料名稱不是。 下列範例會建立項目類型 Compile, comPile,或任何其他大小寫變化,並將項目型別值「one.cs; two.cs」。

<ItemGroup>
  <Compile Include="one.cs" />
  <comPile Include="two.cs" />
</ItemGroup>

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

Dd393574.collapse_all(zh-tw,VS.110).gif工作

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

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

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

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

<Target Name="MakeBuildDirectory">
    <MakeDir  Directories="$(BuildDir)" />
</Target>

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

Dd393574.collapse_all(zh-tw,VS.110).gif目標

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

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

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

在進階案例中,目標可以用來描述在彼此中的關係並執行相依性分析,讓建置流程的整個區段可以略過,則目標更新。 如需目標的詳細資訊,請參閱 MSBuild 目標

建置記錄

您可以記錄建置錯誤、警告和訊息至主控台或另一組輸出裝置。 如需詳細資訊,請參閱使用 MSBuild 取得建置記錄MSBuild 中的記錄

在 Visual Studio 中使用 MSBuild

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

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

多目標

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

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

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

  • 除了 .NET Framework 之外,您還可以將目標 Framework,例如, Silverlight。

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

  • 如果釋放目前的 .NET Framework 版本的 Service Pack,您可以設定為使用它。

  • 多目標可確保應用程式使用的是目標 Framework 和平台的功能。

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

相關主題

標題

描述

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

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

逐步解說:使用 MSBuild

介紹 MSBuild 的建置組塊顯示如何撰寫,管理和偵錯 MSBuild 專案,而不需關閉 Visual Studio IDE。

MSBuild 概念

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

MSBuild 項目

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

MSBuild 屬性

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

MSBuild 目標

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

MSBuild 工作

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

MSBuild 條件

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

MSBuild 進階概念

批次處理的存在,執行轉換,多目標和其他進階技術。

MSBuild 中的記錄

描述如何記錄建置事件、訊息和錯誤。

其他 MSBuild 資源

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

參考資料