Мне нужно было скопировать содержимое каталога в несколько мест, это то, что я придумал, это работает. Поэтому я публикую это здесь, если кто-то еще нуждается в подобном и сталкивается с этим вопросом, как я.
<!-- 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>