MSBuild 工作

組建平台必須能夠在建置程序期間執行任意數目的動作。 MSBuild 會使用「工作」來執行這些動作。 工作是 MSBuild 用來執行不可部分完成之建置作業的可執行程式碼單元。

工作邏輯

MSBuild XML 專案檔格式無法完全獨立執行建置作業,因此,必須在專案檔以外的地方實作工作邏輯。

工作的執行邏輯會實作為 .NET 類別,此類別會實作 Microsoft.Build.Framework 命名空間中所定義的 ITask 介面。

工作類別也會定義可供專案檔中的工作使用的輸入和輸出參數。 工作類別公開的所有公用可設定非靜態非抽象屬性都可以在專案檔中指定值,方法是將具有相同名稱的對應屬性放在 Task 元素上,並設定其值,如本文稍後的範例所示。

若要撰寫自己的工作,請編寫可實作 ITask 介面的 Managed 類別。 如需詳細資訊,請參閱工作撰寫

從專案檔執行工作

在執行專案檔中的工作之前,您必須先使用 UsingTask 項目,將實作工作之組件中的類型對應到工作名稱。 這讓 MSBuild 知道,如果它在您的專案檔中找到工作,應該到何處尋找該工作的執行邏輯。

若要執行 MSBuild 專案檔中的工作,請使用工作名稱建立項目以做為 Target 項目的子系。 如果工作接受參數,則會傳遞這些參數以做為項目的屬性。

MSBuild 項目清單和屬性都可用來做為參數。 例如,下列程式碼會呼叫 MakeDir 工作,並將 MakeDir 物件的 Directories 屬性值設為等於 BuildDir 屬性值:

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

工作也可以將資訊傳回專案檔,資訊可儲存於項目或屬性中,以供稍後使用。 例如,下列程式碼會呼叫 Copy 工作,並將來自 CopiedFiles 輸出屬性的資訊儲存於 SuccessfullyCopiedFiles 項目清單中。

<Target Name="CopyFiles">
    <Copy
        SourceFiles="@(MySourceFiles)"
        DestinationFolder="@(MyDestFolder)">
        <Output
            TaskParameter="CopiedFiles"
            ItemName="SuccessfullyCopiedFiles"/>
     </Copy>
</Target>

包含的工作

MSBuild 隨附許多工作,例如,用於複製檔案的 Copy、用於建立目錄的 MakeDir,以及用於編譯 C# 原始程式碼檔的 Csc。 如需可用工作的完整清單和用法資訊,請參閱工作參考

覆寫的工作

MSBuild 會在數個位置中尋找工作。 第一個位置位於副檔名為 .OverrideTasks 儲存在 MSBuild 目錄中的檔案中。 這些檔案中的工作會覆寫任何其他具有相同名稱的工作,包括專案檔中的工作。 第二個位置位於專案檔及其匯入中。 如果未在專案中定義工作,則會在 MSBuild 的預設工作中搜尋此工作,這些工作定義於 MSBuild 目錄中的 .tasks 檔案中。