MSBuild, CreateItem to ItemGroup для размещения цели в нескольких папках
Короткая история: у меня есть список с атрибутом, который называется true. Я хочу скопировать все эти файлы в список папок, скажем, определенных...
SomeFolder
Для этого вот что я делаю сегодня:
<CreateItem Include="%(Reference.HintPath)"
Condition="'%(Reference.Binplace)' == 'true'"
AdditionalMetadata="DestinationFolder=$(DestinationForReferences)\%(Reference.BinplaceFolder)">
<Output ItemName="Binplace" TaskParameter="Include" />
</CreateItem>
У меня уже есть цель Binplace, которая внутренне вызывает Copy. Проблема в том, что это один элемент, и я не знаю, как я могу вызвать Copy для нескольких из этих элементов
И в моем файле CSPROJ я делаю это:
<Reference Include="MyCompany.Something.Something">
<HintPath>$(LocalLibraryFolder)\MyCompany.Something.Something.dll</HintPath>
<Binplace>true</Binplace>
</Reference>
1 ответ
<ItemGroup>
<Reference Include="1">
<HintPath>$(LocalLibraryFolder)\1.dll</HintPath>
<Binplace>true</Binplace>
<BinplaceFolder>SubFolder1\SubFolder12</BinplaceFolder>
</Reference>
<Reference Include="2">
<HintPath>$(LocalLibraryFolder)\2.dll</HintPath>
<Binplace>true</Binplace>
<BinplaceFolder>SubFolder2\SubFolder22</BinplaceFolder>
</Reference>
</ItemGroup>
<PropertyGroup>
<LocalLibraryFolder>.</LocalLibraryFolder>
<DestinationForReferences>.</DestinationForReferences>
</PropertyGroup>
<Target Name="CopyReferencedBinaries"
Outputs="%(Reference.Identity)">
<ItemGroup>
<SourceBinaryFullPath Include="%(Reference.HintPath)" />
</ItemGroup>
<PropertyGroup>
<SourceBinaryDir>$(DestinationForReferences)\%(Reference.BinplaceFolder)</SourceBinaryDir>
</PropertyGroup>
<MakeDir Directories="$(SourceBinaryDir)"
Condition="!Exists('$(SourceBinaryDir)')"/>
<Copy SourceFiles="@(SourceBinaryFullPath)"
DestinationFiles="@(SourceBinaryFullPath->'$(SourceBinaryDir)\%(Filename)%(Extension)')" />
</Target>