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 |
必須の属性です。 ターゲットの名前です。 |
DependsOnTargets |
省略可能な属性です。 このターゲットを実行する前、またはトップレベルの依存関係分析を実行する前に、実行する必要のあるターゲットです。 複数のターゲットを指定するときは、セミコロン (;) で区切ります。 |
Returns |
省略可能な属性です。 このターゲットを呼び出すタスク (MSBuild タスクなど) で使用可能になるアイテムのセットです。 複数のターゲットを指定するときは、セミコロン (;) で区切ります。 |
Inputs |
省略可能な属性です。 このターゲットの入力アイテムです。 この属性内のアイテムは、トップレベル依存関係分析の入力として使用されます。 |
Outputs |
省略可能な属性です。 このターゲットの予想される出力です。 入力アイテムに変換を適用することにより、出力アイテムを生成できます。 変換の詳細については、「MSBuild 変換」を参照してください。 |
BeforeTargets |
省略可能な属性です。 ターゲット名のセミコロン区切りのリストです。指定した場合は、指定の 1 つ以上のターゲットの前にこのターゲットを実行する必要があることを示します。これにより、プロジェクト作成者は、ターゲットを直接変更せずに、既存のターゲットのセットを拡張できます。 |
AfterTargets |
省略可能な属性です。 ターゲット名のセミコロン区切りのリストです。 指定した場合は、指定の 1 つ以上のターゲットの後にこのターゲットを実行する必要があることを示します。これにより、プロジェクト作成者は、ターゲットを直接変更せずに、既存のターゲットのセットを拡張できます。 |
KeepDuplicateOutputs |
省略可能な Boolean 型の属性です。 true の場合、Outputs の同じアイテムへの複数の参照が記録されます。 既定では、この属性は false です。 |
Condition |
省略可能な属性です。 評価する条件です。 条件が false と評価された場合、ターゲットではターゲットの本体は実行されず、DependsOnTargets 属性に設定されたいずれのターゲットも実行されません。 条件の詳細については、「MSBuild の条件」を参照してください。 |
子要素
要素 |
説明 |
---|---|
MSBuild タスクのインスタンスを作成し、実行します。 ターゲットには、タスクを 0 個以上指定できます。 |
|
失敗したタスクに対する ContinueOnError 属性が false である場合に、1 つまたは複数のターゲットを実行します。 ターゲットには、OnError 要素を 0 個以上指定できます。 OnError 要素が存在する場合、これらの要素は Target 要素内の最後の要素である必要があります。 |
親要素
要素 |
説明 |
---|---|
MSBuild プロジェクト ファイルの必須のルート要素です。 |
解説
実行する最初のターゲットは、実行時に指定します。 各ターゲットは他のターゲットに対する依存関係を持つ場合があります。 たとえば、配置用のターゲットは、コンパイル用のターゲットに依存します。 MSBuild エンジンは、DependsOnTargets 属性に表示される順序で、依存関係を左から右に実行します。 詳細については、「MSBuild ターゲット」を参照してください。
あるターゲットに複数のターゲットが依存関係を持つ場合でも、ターゲットは 1 回のビルド中に 1 度だけ実行されます。
Condition 属性が false と評価されたためにターゲットがスキップされた場合でも、そのターゲットがその後ビルドで呼び出され、Condition 属性がその時点で true と評価された場合は、そのターゲットを実行できます。
MSBuild 4 よりも前のバージョンでは、Target によって、Outputs 属性で指定されていたすべてのアイテムが返されていました。 このために、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>