共用方式為


目標元素 (MSBuild)

包含一組 MSBuild 要循序執行的工作。

<項目><目標>

語法

<Target Name="Target Name"
        Inputs="Inputs"
        Outputs="Outputs"
        Returns="Returns"
        KeepDuplicateOutputs="true/false"
        BeforeTargets="Targets"
        AfterTargets="Targets"
        DependsOnTargets="DependentTarget"
        Condition="'String A' == 'String B'"
        Label="Label">
    <Task>... </Task>
    <PropertyGroup>... </PropertyGroup>
    <ItemGroup>... </ItemGroup>
    <OnError... />
</Target>

屬性和元素

下列各節說明屬性、子元素和父元素。

Attributes

Attribute Description
Name 必要屬性。

目標的名稱。 目標名稱可以包含除 $@()%*?.之外的任何字元。
Condition 選擇性屬性。

要評估的條件。 如果條件評估為 false,目標將不會執行目標的主體或屬性中 DependsOnTargets 設定的任何目標。 如需條件的詳細資訊,請參閱 條件
Inputs 選擇性屬性。

形成輸入到此目標的檔案。 多個檔案會以分號分隔。 檔案的時間戳記將與檔案 Outputs 的時間戳記進行比較,以確定是否 Target 是最新的。 如需詳細資訊,請參閱 累加式建置如何:累加式建置轉換
Outputs 選擇性屬性。

形成輸出到此目標的檔案。 多個檔案會以分號分隔。 檔案的時間戳記將與檔案 Inputs 的時間戳記進行比較,以確定是否 Target 是最新的。 如需詳細資訊,請參閱 累加式建置如何:累加式建置轉換
Returns 選擇性屬性。

將可供叫用此目標之工作的專案集,例如 MSBuild 工作。 多個目標以分號分隔。 如果檔案中的目標沒有 Returns 屬性,則會改用 輸出 屬性來達到此目的。
KeepDuplicateOutputs 選用布林值屬性。

如果 ,則 true會記錄目標退貨中相同項目的多個參照。 依預設,此屬性為 false
BeforeTargets 選擇性屬性。

以分號分隔的目標名稱清單。 指定時,指出此目標應該在指定的一或多個目標之前執行。 這可讓專案作者擴充一組現有的目標,而不需要直接修改它們。 如需詳細資訊,請參閱 目標建置順序
AfterTargets 選擇性屬性。

以分號分隔的目標名稱清單。 指定時,指出此目標應該在指定的一或多個目標之後執行。 這可讓專案作者擴充一組現有的目標,而不需要直接修改它們。 如需詳細資訊,請參閱 目標建置順序
DependsOnTargets 選擇性屬性。

在執行此目標或進行頂層相依性分析之前必須執行的目標。 多個目標以分號分隔。
Label 選擇性屬性。

可識別或排序系統和使用者元素的識別碼。

子元素

元素 Description
工作 建立並執行 MSBuild 工作的實例。 目標中可能有零個或多個任務。
屬性群組 包含一組使用者定義 Property 的元素。 元素可以 Target 包含 PropertyGroup 元素。
項目組 包含一組使用者定義 Item 的元素。 元素可以 Target 包含 ItemGroup 元素。 如需詳細資訊,請參閱 項目
OnError 如果屬性是 ContinueOnError 失敗工作的 ErrorAndStop (或 false),則會導致一或多個目標執行。 目標中可能有零個或多個 OnError 元素。 如果元素存在,則 OnError 它們必須是元素中的 Target 最後一個元素。

如需屬性的相關ContinueOnError資訊,請參閱 工作元素 (MSBuild)。

父元素

元素 Description
發射 MSBuild 專案檔案的必要根元素。

備註

第一個要執行的目標會在執行階段指定。 目標可以相依於其他目標。 例如,部署目標取決於編譯目標。 MSBuild 引擎會依照相依性出現在屬性中的 DependsOnTargets 順序執行,從左到右。 如需詳細資訊,請參閱 目標

MSBuild 是匯入順序相依,而具有特定 Name 屬性之目標的最後一個定義是所使用的定義。

目標在建置期間只會執行一次,即使多個目標具有相依性。

如果跳過目標,因為其 Condition 屬性評估為 false,如果稍後在建置中呼叫該目標,且其 Condition 屬性評估為 true ,則仍可執行該目標。

在 MSBuild 4 之前, Target 傳回屬性中 Outputs 指定的任何專案。 若要這樣做,MSBuild 必須記錄這些專案,以防組建稍後的工作要求它們。 因為無法指出哪些目標具有呼叫端所需的輸出,所以 MSBuild 會累積所有叫用 Targets 上的所有專案Outputs。 這會導致具有大量輸出項目的組建出現縮放問題。

如果使用者在專案中的任何Target元素上指定 ,Returns則只有具有Target屬性的 Returns 會記錄這些項目。

A Target 可以同時 Outputs 包含屬性和 Returns 屬性。 Outputs 用於 Inputs 確定目標是否為 up-to-date。 Returns,如果存在,則會覆寫 的 Outputs 值,以決定哪些專案會傳回給呼叫端。 如果不存在,則ReturnsOutputs將提供給呼叫者,但前面所述的情況除外。

在 MSBuild 4 之前,每當 在其 TargetOutputs包含相同專案的多個參考時,就會記錄這些重複專案。 在具有大量輸出和許多專案相互依賴性的非常大的組建中,這會導致浪費大量記憶體,因為重複的項目沒有任何用處。 當 KeepDuplicateOutputs 屬性設為 true時,會記錄這些重複項。

Example

下列程式碼範例顯示 Target 執行 Csc 工作的元素。

<Target Name="Compile" DependsOnTargets="Resources" Returns="$(TargetPath)">
    <Csc Sources="@(CSFile)"
          TargetType="library"
          Resources="@(CompiledResources)"
          EmitDebugInformation="$(includeDebugInformation)"
          References="@(Reference)"
          DebugType="$(debuggingType)" >
        <Output TaskParameter="OutputAssembly"
                  ItemName="FinalAssemblyName" />
    </Csc>
</Target>

另請參閱