CopyTaskに同じファイルを複数の場所にコピーさせる方法はありますか?
例えば。AssemblyInfo.csファイルを生成しましたが、ビルドする前にすべてのプロジェクトにコピーしたいと思います。
CopyTaskに同じファイルを複数の場所にコピーさせる方法はありますか?
例えば。AssemblyInfo.csファイルを生成しましたが、ビルドする前にすべてのプロジェクトにコピーしたいと思います。
ここ で見つけることができる Community Build Tasks ライブラリの一部である RoboCopy ビルド タスクを確認してください。RoboCopy は、1 つのソース ファイルを複数の宛先にコピーできます。
余談ですが、すべてのプロジェクトで同じ情報が必要な場合は、ソリューション レベルで 1 つの AssemblyInfo ファイルを使用し、プロジェクトでそのファイルにリンクしてみませんか? この質問に対する私の受け入れられた回答を確認してください: VS2008 での自動アセンブリ バージョン番号管理
そうですね、助けを求める前にやりたいことをやってみるべきかもしれません:)
<ItemGroup>
<AssemblyInfoSource
Include="AssemblyInfo.cs;AssemblyInfo.cs" />
<AssemblyInfoDestination
Include="$(Destination1)\AssemblyInfo.cs;$(Destination2)\AssemblyInfo.cs" />
</ItemGroup>
<Copy SourceFiles="@(AssemblyInfoSource)" DestinationFiles="@(AssemblyInfoDestination)" />
ディレクトリの内容を複数の場所にコピーする必要がありましたが、これがうまくいきました。したがって、他の誰かが同様のニーズを抱えていて、私のようにこの質問に出くわした場合に備えて、ここに投稿しています。
<!-- Create a list of the objects in PublishURL so it will copy to multiple directories -->
<ItemGroup>
<PublishUrls Include="$(PublishUrl)"/>
</ItemGroup>
<PropertyGroup>
<Files>$(OutputPath)\**\*</Files>
</PropertyGroup>
<!-- CopyNewFiles will copy all the files in $(OutputPath) to all the directories in the
in $(PublishUrl). $(PublishUrl) can be a single directory, or a list of directories
separated by a semicolon -->
<Target Name ="CopyNewFiles">
<!-- Get list of all files in the output directory; Cross product this with all
the output directories. -->
<CreateItem Include ="$(Files)"
AdditionalMetadata="RootDirectory=%(PublishUrls.FullPath)">
<Output ItemName ="OutputFiles" TaskParameter ="Include"/>
</CreateItem>
<Message Text="'@(OutputFiles)' -> '%(RootDirectory)\%(RecursiveDir)'"/>
<Copy SourceFiles="@(OutputFiles)"
DestinationFolder ="%(RootDirectory)\%(RecursiveDir)"/>
</Target>
AssemblyInfo.cs
フォルダにコピーするA
場合、B
プロパティFiles="AssemblyInfo.cs"
とPublishUrls="A;B"
これを機能させるのは、CreateItem タスクの追加のメタデータです。AdditionalMetadata="RootDirectory=%(PublishUrls.FullPath)"
そのため、そこで見つかった各ファイルに対して、File
で見つかった各アイテムに対して 1 つのエントリが作成されPublishUrls
ます。単一のファイルの場合、xml を書き出す場合と同等のものは次のようになります。
<ItemGroup>
<OutputFiles Include="AssemblyInfo.cs">
<RootDirectory>A</RootDirectory>
</OutputFiles>
<OutputFiles Include="AssemblyInfo.cs">
<RootDirectory>B</RootDirectory>
</OutputFiles>
</ItemGroup>
ファイルを含むフォルダーの内容をコピーしてコピーした場合1.txt
、2.txt
同等A
のB
xml は次のようになります。
<ItemGroup>
<OutputFiles Include="1.txt">
<RootDirectory>A</RootDirectory>
</OutputFiles>
<OutputFiles Include="2.txt">
<RootDirectory>A</RootDirectory>
</OutputFiles>
<OutputFiles Include="1.txt">
<RootDirectory>B</RootDirectory>
</OutputFiles>
<OutputFiles Include="2.txt">
<RootDirectory>B</RootDirectory>
</OutputFiles>
</ItemGroup>