我有一个安装程序的ItemGroup,每个包含一个Property,它是out输出文件夹的名称(分隔),如下所示:
<ItemGroup>
<Installers Include="Installer1.msi">
<Folders>Folder1,Folder4</Folders>
</Installers>
<Installers Include="Installer2.msi">
<Folders>Folder1,Folder2,Folder3,Folder4</Folders>
</Installers>
</ItemGroup>
我希望能够将每个安装程序复制到指定的每个文件夹中。我一直在试图想出一种向安装程序添加额外元数据的方法,但似乎无法获得这样的最终列表:
所以我可以执行这样的事情:
<Copy SourceFiles="@(Installers)" DestinationFolder="%(Installers.Folder)" />
我知道我可以将我的ItemGroup修改为:
<ItemGroup>
<Installers Include="Installer1.msi">
<Folder>Folder1</Folder>
</Installers>
<Installers Include="Installer1.msi">
<Folder>Folder4</Folder>
</Installers>
<Installers Include="Installer2.msi">
<Folder>Folder1</Folder>
</Installers>
<Installers Include="Installer2.msi">
<Folder>Folder2</Folder>
</Installers>
<Installers Include="Installer2.msi">
<Folder>Folder3</Folder>
</Installers>
<Installers Include="Installer2.msi">
<Folder>Folder4</Folder>
</Installers>
</ItemGroup>
但我不愿意,因为这就是我们现在拥有的东西,人们总是会错过任何东西(因为它很冗长)。
答案 0 :(得分:0)
用分号分隔文件夹名称,然后反转安装程序和文件夹值:
<Project ToolsVersion="4.0" DefaultTargets="Inversionator" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<Folders Include="Folder1;Folder4">
<Installer>Installer1.msi</Installer>
</Folders>
<Folders Include="Folder1;Folder2;Folder3;Folder4">
<Installer>Installer2.msi</Installer>
</Folders>
</ItemGroup>
<Target Name="Inversionator">
<Message Text="%(Folders.Installer) %(Folders.Identity) " Importance="high" />
</Target>
</Project>
现在任务的输出:
Installer1.msi Folder1
Installer1.msi Folder4
Installer2.msi Folder1
Installer2.msi Folder2
Installer2.msi Folder3
Installer2.msi Folder4