Target 要素 (MSBuild)

MSBuild によって順次実行されるタスクのセットを格納します。

<Project><Target>

構文

<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>

属性と要素

以降のセクションでは、属性、子要素、および親要素について説明します。

属性

属性 説明
Name 必須の属性です。

ターゲットの名前。 ターゲットの名前に使用できるのは $@()%*?. 以外の文字です。
Condition 省略可能な属性です。

評価する条件です。 条件が false と評価された場合、ターゲットの本体も、DependsOnTargets 属性で設定されたいずれのターゲットも実行されません。 条件の詳細については、「条件」を参照してください。
Inputs 省略可能な属性です。

このターゲットの入力を形成するファイル。 複数のファイルを指定するときは、セミコロン (;) で区切ります。 ファイルのタイムスタンプは、Outputs のファイルのタイムスタンプと比較され、Target が最新かどうか判断されます。 詳細については、「インクリメンタル ビルド」、「方法: インクリメンタル ビルドを実行する」、「変換」を参照してください。
Outputs 省略可能な属性です。

このターゲットの出力を形成するファイル。 複数のファイルを指定するときは、セミコロン (;) で区切ります。 ファイルのタイムスタンプは、Inputs のファイルのタイムスタンプと比較され、Target が最新かどうか判断されます。 詳細については、「インクリメンタル ビルド」、「方法: インクリメンタル ビルドを実行する」、「変換」を参照してください。
Returns 省略可能な属性です。

このターゲットを呼び出すタスク (MSBuild タスクなど) で使用可能になる項目のセットです。 複数のターゲットを指定するときは、セミコロン (;) で区切ります。 ファイル内のターゲットに Returns 属性がない場合、代わりに Outputs 属性がこの目的で使用されます。
KeepDuplicateOutputs 省略可能な Boolean 属性です。

true の場合、ターゲットの Returns の同じ項目への参照が複数記録されます。 既定では、この属性は false です。
BeforeTargets 省略可能な属性です。

ターゲット名のセミコロン区切りのリストです。 指定した場合、指定したターゲットの前にこのターゲットが実行されます。 これにより、プロジェクト作成者は、これらを直接変更せずに、既存のターゲット セットを拡張できます。 詳細については、「ターゲットのビルド順序」を参照してください。
AfterTargets 省略可能な属性です。

ターゲット名のセミコロン区切りのリストです。 指定した場合、指定したターゲットの後でこのターゲットが実行されます。 これにより、プロジェクト作成者は、これらを直接変更せずに、既存のターゲット セットを拡張できます。 詳細については、「ターゲットのビルド順序」を参照してください。
DependsOnTargets 省略可能な属性です。

このターゲットを実行する前、またはトップレベルの依存関係分析を実行する前に、実行する必要のあるターゲットです。 複数のターゲットを指定するときは、セミコロン (;) で区切ります。
Label 省略可能な属性です。

システム要素およびユーザー要素を識別するため、または順序付けるための識別子です。

子要素

要素 説明
タスク MSBuild タスクのインスタンスを作成して、実行します。 1 つのターゲットに 0 個以上のタスクを指定できます。
PropertyGroup ユーザー定義の Property 要素のセットを格納します。 .NET Framework 3.5 以降では、Target 要素に PropertyGroup 要素を格納できます。
ItemGroup ユーザー定義の Item 要素のセットを格納します。 .NET Framework 3.5 以降では、Target 要素に ItemGroup 要素を格納できます。 詳細については、「MSBuild 項目」をご覧ください。
OnError 失敗したタスクの ContinueOnError 属性が ErrorAndStop (または false) の場合、1 つ以上のターゲットが実行されます。 1 つのターゲットに 0 個以上の OnError 要素を指定できます。 OnError 要素がある場合は、Target 要素内で最後の要素である必要があります。

ContinueOnError 属性の詳細は、「Task 要素 (MSBuild)」を参照してください。

親要素

要素 説明
プロジェクト MSBuild プロジェクト ファイルの必須のルート要素です。

解説

実行する最初のターゲットは実行時に指定されます。 各ターゲットは他のターゲットとの依存関係を持つ場合があります。 たとえば、展開用のターゲットはコンパイル用のターゲットに依存します。 MSBuild エンジンでは依存関係が、DependsOnTargets 属性に出現する順序で、左から右に実行されます。 詳細については、ターゲット を参照してください。

MSBuild はインポートの順序に依存するので、特定の Name 属性を持つ最後のターゲットの定義が使われます。

あるターゲットに複数のターゲットが依存関係を持つ場合でも、ターゲットは 1 回のビルド中に 1 回だけ実行されます。

Condition 属性が false と評価されたためにターゲットがスキップされた場合でも、そのターゲットがその後ビルドで呼び出され、Condition 属性がその時点で true と評価された場合には、そのターゲットを実行できます。

MSBuild 4 より前のバージョンでは、Target によって Outputs 属性で指定されていたすべての項目を返していました。 このために、MSBuild では、後でビルドのタスクによって要求された場合に備えて、これらの項目を記録しておく必要がありました。 どのターゲットが呼び出し元を必要とする出力を持つかを指定する手段がなかったため、MSBuild は呼び出されたすべての Target のすべての Outputs からのすべての項目を蓄積していました。 このため、出力項目の多いビルドについては、スケーリングの問題が発生していました。

ユーザーがプロジェクト内の任意の Target 要素で Returns を指定した場合、Returns 属性を持つ Target だけがその項目を記録します。

Target には Outputs 属性と Returns 属性の両方を含めることができます。 OutputsInputs を組み合わせて使用して、ターゲットが最新かどうかを確認します。 Returns がある場合、Outputs の値がオーバーライドされ、どの項目が呼び出し元に返されるかを判断できます。 Returns がない場合、前述のケースを除き、呼び出し元が Outputs を使用できるようになります。

MSBuild 4 より前のバージョンでは、TargetOutputs に同じ項目に対する参照が複数ある場合は、常にそれらの重複項目が記録されていました。 出力数が多く、プロジェクトの相互依存関係が多数ある非常に大規模なビルドでは、無用な重複項目が原因で大量のメモリが無駄に使用されていました。 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>

関連項目