包含一組 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 之前,每當 在其 Target 中 Outputs包含相同專案的多個參考時,就會記錄這些重複專案。 在具有大量輸出和許多專案相互依賴性的非常大的組建中,這會導致浪費大量記憶體,因為重複的項目沒有任何用處。 當 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>