Target 項目 (MSBuild)
包含 MSBuild 會依序執行的一組工作。
<Target Name="Target Name"
DependsOnTargets="DependentTarget"
Inputs="Inputs"
Outputs="Outputs"
Returns="Returns"
KeepDuplicateOutputs="true/false"
BeforeTargets="Targets"
AfterTargets="Targets"
Condition="'String A' == 'String B'">
<Task>... </Task>
<OnError... />
</Target>
屬性和項目
下列各節將說明屬性、子項目和父項目。
屬性
屬性 |
描述 |
---|---|
Name |
必要屬性。 目標 (Target) 的名稱。 |
DependsOnTargets |
選擇性屬性。 在能夠執行此目標,或者開始最上層相依性的分析之前,所必須執行的目標。 分號會分隔多個目標。 |
Returns |
選擇性屬性。 一組可供叫用此目標之工作 (例如,MSBuild 工作) 使用的項目。 分號會分隔多個目標。 |
Inputs |
選擇性屬性。 此目標的項目輸入。 此屬性中的項目是用來做為最上層相依性分析的輸入。 |
Outputs |
選擇性屬性。 此目標的預期輸出。 您可以將轉換套用至輸入項目以產生輸出項目。 如需轉換的詳細資訊,請參閱 MSBuild 轉換。 |
BeforeTargets |
選擇性屬性。 目標名稱的分號分隔清單。指定時,即表示此目標應在指定的目標之前執行。這可讓專案作者擴充現有的一組目標,而不需要直接進行修改。 |
AfterTargets |
選擇性屬性。 以分號分隔的目標名稱清單。 指定時,即表示此目標應在指定的目標之後執行。這可讓專案作者擴充現有的一組目標,而不需要直接進行修改。 |
KeepDuplicateOutputs |
選擇性的布林值屬性。 如果為 true,則記錄輸出中同一項目的多個參考。 這個屬性預設為 false。 |
Condition |
選擇性屬性。 要評估的條件。 如果條件評估為 false,目標就不會執行目標的主體,或是 DependsOnTargets 屬性中設定的任何目標。 如需條件的詳細資訊,請參閱 MSBuild 條件。 |
子項目
項目 |
描述 |
---|---|
建立並執行 MSBuild 工作的執行個體。 目標中可能含有零或多個工作。 |
|
如果失敗的工作之 ContinueOnError 屬性為 false,便會執行一或多個目標。 目標中可能有零或多個 OnError 項目。 如果有 OnError 項目的話,這些項目必須是 Target 項目中的最後項目。 |
父項目
項目 |
描述 |
---|---|
MSBuild 專案檔的必要根項目。 |
備註
第一個要執行的目標是在執行階段指定。 目標可以對其他目標具有相依性。 例如,部署的目標可以相依於編譯 (Compilation) 的目標。 MSBuild 引擎會按照相依性在 DependsOnTargets 屬性中出現的順序,從左到右執行它們。 如需詳細資訊,請參閱MSBuild 目標。
在建置期間一個目標只能執行一次,即使有一個以上的目標對此目標具有相依性亦是如此。
即使由於目標的 Condition 屬性評估為 false 而略過該目標,如果之後在建置時叫用 (Invoke) 該目標,而且其 Condition 屬性在那時評估為 true,就依然會執行該目標。
在 MSBuild 4 之前,Target 會傳回 Outputs 屬性中指定的任何項目。 若要這樣做,MSBuild 就必須記錄這些項目,以備日後在組建中要求它們。 由於有沒有辦法指出哪些目標的輸出是呼叫端所需要的,MSBuild 積累了在所有被叫用 Target 上的所有 Outputs 中的所有項目。 這會為具有大量輸出項目的組建帶來延展上的問題。
如果使用者在專案中的任何 Target 項目上指定 Returns,則只有那些具有 Returns 屬性的 Target 會記錄這些項目。
Target 可以同時包含 Outputs 屬性和 Returns 屬性。 Outputs 可與 Inputs 搭配使用以判斷是否為最新的目標。 Returns (如果存在) 會覆寫判斷傳回哪些項目至呼叫端的 Outputs 值。 如果 Returns 不存在,則會提供 Outputs 給呼叫端使用,但前面所述的情況除外。
在 MSBuild 4 以前,每當 Target 將多個參考加入至其 Outputs 中的相同項目時,都會記錄這些重複項目。 就非常大的組建而言,其中有大量的輸出以及許多專案間的相依性,由於重複項目沒有任何作用,因此會造成大量的記憶體浪費。 當 KeepDuplicateOutputs 屬性設定為 true 時,不會儲存這些重複項目。
範例
在下列程式碼範例中,示範了執行 Csc 工作的 Target 項目。
<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>