1

有没有办法让 CopyTask 将同一个文件复制到多个位置?

例如。我已经生成了一个 AssemblyInfo.cs 文件,并希望在构建之前将其复制到我的所有项目中。

4

3 回答 3

2

查看 RoboCopy 构建任务,它是社区构建任务库的一部分,您可以在此处找到。RoboCopy 可以将一个源文件复制到多个目的地。

附带说明:如果您在每个项目中都需要相同的信息,为什么不在解决方案级别使用一个 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到文件夹AB你会设置属性Files="AssemblyInfo.cs"PublishUrls="A;B"

使这项工作有效的是 CreateItem 任务中的额外元数据,AdditionalMetadata="RootDirectory=%(PublishUrls.FullPath)"因此对于在其中找到的每个文件,File为在PublishUrls. 在您的单个文件的情况下,写出 xml 的等价物是:

<ItemGroup>
    <OutputFiles Include="AssemblyInfo.cs">
        <RootDirectory>A</RootDirectory>
    </OutputFiles>
    <OutputFiles Include="AssemblyInfo.cs">
        <RootDirectory>B</RootDirectory>
    </OutputFiles>
</ItemGroup>

现在,如果您复制了包含文件1.txt2.txt复制到的文件夹的内容AB则等效的 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>
于 2012-05-16T18:14:00.327 回答