2016-10-03 14 views
1

私はいくつかのコピー操作を実行するmsbuildスクリプトを持っています。MSBuildターゲットでタスク/操作を共有するには?

このターゲットを複製する必要がありますが、XMLの1%だけが異なります。これは実際には、メッセージ、削除、削除されたアイテムグループ、現時点では、1つのタスクを追加するだけです。私は&を全ターゲットに貼り付けたいとは思っていません。むしろ、両方に共通のタスクを実行する共通のターゲットを設定し、特殊な追加を別のターゲットに配置したいと思います。多かれ少なかれ、私はmsbuildに、XMLの内容を私のために各セクションに行動的にコピー/貼り付けさせたいだけです。ここで

は一例です:

<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片を集中管理することができます

<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つだけ余分Copyを追加する第二のターゲットを作成する必要がありますか?私はmsbuildバッチ処理について少し読んだけど、それは絶対にとなります。私には意味があります。私はそれが私の問題を解決するとは確信していません。私が見てきたすべての例はメッセージログのものですが、それ以上のことをしています。

答えて

1

、代わりに1つのターゲットを他のターゲットに依存させることができます。Target documentationを参照してください。

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

これは、インポートされたターゲットにインポートプロジェクトで定義されたプロパティへのアクセスを許可しますか? –

+0

はい、インポートされたターゲットがこのプロパティをリセットしない場合 – Troopers

関連する問題