いくつかのコピー操作を実行する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>