【问题标题】:MSBuild Pivoting ItemGroup on Delimited StringMSBuild 在分隔字符串上透视 ItemGroup
【发布时间】:2014-02-04 04:37:28
【问题描述】:

我有一个安装程序的 ItemGroup,每个安装程序都包含一个属性,它是输出文件夹的名称(分隔),如下所示:

<ItemGroup>
  <Installers Include="Installer1.msi">
    <Folders>Folder1,Folder4</Folders>
  </Installers>

  <Installers Include="Installer2.msi">
    <Folders>Folder1,Folder2,Folder3,Folder4</Folders>
  </Installers>
</ItemGroup>

我希望能够将每个安装程序复制到指定的每个文件夹中。我一直在试图找出一种向安装程序添加额外元数据的方法,但似乎无法获得这样的最终列表:

  1. Installer1.msi:Folder1
  2. Installer1.msi:Folder4
  3. Installer2.msi:Folder1
  4. Installer2.msi:Folder2
  5. Installer2.msi:Folder3
  6. Installer2.msi:Folder4

所以我可以执行如下操作:

<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>

但我宁愿不这样做,因为这就是我们现在所拥有的,人们总是会错过一些东西(因为它太冗长了)。

【问题讨论】:

  • 我想我想要的另一个要求是我希望它适用于 N 文件夹。例如。我不想事先知道我的文件夹名称,我更愿意发现它们,因为它们位于 Folders 属性中。

标签: msbuild msbuild-4.0


【解决方案1】:

用分号分隔文件夹名称,然后反转安装程序和文件夹值:

<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

【讨论】:

  • 很抱歉接受晚了。我花了一段时间思考这是否能满足我所有的审美要求,经过反思,确定它可以满足!
猜你喜欢
  • 1970-01-01
  • 2011-12-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-08-21
相关资源
最近更新 更多