/ / MSBuildターゲットでタスク/操作を共有する方法は? -xml、msbuild

MSBuildターゲットでタスク/操作を共有する方法は? -xml、msbuild

いくつかのコピー操作を実行するmsbuildスクリプトがあります。実際には、メッセージ、削除、removeir、独自のItemGroupセクションなどを含む、コピーやその他の処理をすべて実行します。

このターゲットを複製する必要がありますが、1%程度ですそのXMLのは異なります。現時点では、タスクを1つ追加するだけです。ターゲット全体をコピーして貼り付けるのではなく、両方に共通のタスクを実行するための共通のターゲットを設定し、特殊な追加を個別のターゲット。多かれ少なかれ、msbuildにXMLのコンテンツをコピーして各セクションに貼り付けてもらいたいだけです。

次に例を示します。

<Target Name="Copy Stuff">
<Copy SourceFiles="@(FILES_STUFF1)"   DestinationFolder="$(BASE_DIR)stuff1"/>
<Copy SourceFiles="@(FILES_STUFF2)"   DestinationFolder="$(BASE_DIR)stuff2"/>
<Copy SourceFiles="@(FILES_STUFF3)"   DestinationFolder="$(BASE_DIR)stuff3"/>
</Target>

次に、1つだけ追加する2番目のターゲットを作成する必要があります Copy

<Target Name="Copy Stuff More">
<Copy SourceFiles="@(FILES_STUFF1)"   DestinationFolder="$(BASE_DIR)stuff1"/>
<Copy SourceFiles="@(FILES_STUFF2)"   DestinationFolder="$(BASE_DIR)stuff2"/>
<Copy SourceFiles="@(FILES_STUFF3)"   DestinationFolder="$(BASE_DIR)stuff3"/>
<Copy SourceFiles="@(FILES_STUFF4)"   DestinationFolder="$(BASE_DIR)stuff4"/>
</Target>

複製されたXML部分を一元化するにはどうすればよいですか?私はmsbuildのバッチ処理について少し読みましたが、それは絶対になります ゼロ 私には感覚があります。私はそれが私の問題を解決するとは確信していません。私が見たすべての例はメッセージログに関するものですが、私はそれ以上のことをしています。

回答:

回答№1は1

ここでは実際にはバッチ処理は必要ありません。代わりに、一方のターゲットをもう一方のターゲットに依存させることができます。を参照してください。 ターゲットドキュメント。これにより、実際のターゲットの前に依存ターゲットが呼び出されます。

<Target Name="Copy Stuff">
<Copy SourceFiles="@(FILES_STUFF1)" DestinationFolder="$(BASE_DIR)stuff1"/>
<Copy SourceFiles="@(FILES_STUFF2)" DestinationFolder="$(BASE_DIR)stuff2"/>
<Copy SourceFiles="@(FILES_STUFF3)" DestinationFolder="$(BASE_DIR)stuff3"/>
</Target>

<Target Name="Copy Stuff More" DependsOnTargets="Copy Stuff">
<Copy SourceFiles="@(FILES_STUFF4)" DestinationFolder="$(BASE_DIR)stuff4"/>
</Target>

回答№2の場合は1

ターゲットファイルを作成して使用する Import プロジェクトファイルにターゲットをインポートします。

ターゲットファイルは次のようなものです。

<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<MyTargetDependsOn>
</MyTargetDependsOn>
</PropertyGroup>
<Target Name="MyTarget" Condition="$(MyTargetCondition)" DependsOnTargets="$(MyTargetDependsOn)">
<Copy SourceFiles="@(FILES_STUFF1)"   DestinationFolder="$(BASE_DIR)stuff1"/>
<Copy SourceFiles="@(FILES_STUFF2)"   DestinationFolder="$(BASE_DIR)stuff2"/>
<Copy SourceFiles="@(FILES_STUFF3)"   DestinationFolder="$(BASE_DIR)stuff3"/>
</Target>
</Project>

プロジェクトファイルまたはセカンダリターゲットファイルは次のようなものです。

<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Import Project="MyTarget.targets"/>
<PropertyGroup>
<MyTargetDependsOn>
$(MyTargetDependsOn);
MyTargetHook
</MyTargetDependsOn>
</PropertyGroup>
<Target Name="MyTargetHook">
<Copy SourceFiles="@(FILES_STUFF4)"   DestinationFolder="$(BASE_DIR)stuff4"/>
</Target>
</Project>