1

CopyTaskに同じファイルを複数の場所にコピーさせる方法はありますか?

例えば。AssemblyInfo.csファイルを生成しましたが、ビルドする前にすべてのプロジェクトにコピーしたいと思います。

4

3 に答える 3

2

ここ で見つけることができる Community Build Tasks ライブラリの一部である RoboCopy ビルド タスクを確認してください。RoboCopy は、1 つのソース ファイルを複数の宛先にコピーできます。

余談ですが、すべてのプロジェクトで同じ情報が必要な場合は、ソリューション レベルで 1 つの AssemblyInfo ファイルを使用し、プロジェクトでそのファイルにリンクしてみませんか? この質問に対する私の受け入れられた回答を確認してください: VS2008 での自動アセンブリ バージョン番号管理

于 2010-01-08T09:29:32.767 に答える
2

そうですね、助けを求める前にやりたいことをやってみるべきかもしれません:)

    <ItemGroup>
        <AssemblyInfoSource 
            Include="AssemblyInfo.cs;AssemblyInfo.cs" />
        <AssemblyInfoDestination
            Include="$(Destination1)\AssemblyInfo.cs;$(Destination2)\AssemblyInfo.cs" />
    </ItemGroup>

    <Copy SourceFiles="@(AssemblyInfoSource)" DestinationFiles="@(AssemblyInfoDestination)" />
于 2010-01-08T09:29:42.870 に答える
1

ディレクトリの内容を複数の場所にコピーする必要がありましたが、これがうまくいきました。したがって、他の誰かが同様のニーズを抱えていて、私のようにこの質問に出くわした場合に備えて、ここに投稿しています。

<!-- 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.txt2.txt同等ABxml は次のようになります。

<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>
于 2012-05-16T18:14:00.327 に答える