有没有办法让CopyTask将同一个文件复制到多个位置?
例如。我已经生成了一个AssemblyInfo.cs文件,并希望在构建之前将其复制到我的所有项目中。
答案 0 :(得分:2)
查看RoboCopy构建任务,该任务是社区构建任务库的一部分,您可以找到here。 RoboCopy可以将一个源文件复制到多个目的地。
旁注:如果在每个项目中需要相同的信息,为什么不在解决方案级别使用一个AssemblyInfo文件并链接到项目中的文件?查看我对此问题的接受答案:Automatic assembly version number management in VS2008
答案 1 :(得分:2)
是的,也许我应该在寻求帮助之前尝试做我想做的事情:)
<ItemGroup>
<AssemblyInfoSource
Include="AssemblyInfo.cs;AssemblyInfo.cs" />
<AssemblyInfoDestination
Include="$(Destination1)\AssemblyInfo.cs;$(Destination2)\AssemblyInfo.cs" />
</ItemGroup>
<Copy SourceFiles="@(AssemblyInfoSource)" DestinationFiles="@(AssemblyInfoDestination)" />
答案 2 :(得分: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
中找到的每个文件,它会为PublishUrls
中找到的每个项目创建1个条目。在你的单个文件的情况下,写出xml的equivelent将是:
<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>