MSBuild ItemGroup с условием

Я не знаю, если ItemGroup это правильный тип для использования. Я получу 4 различных логических значения, которые будут истинными или ложными в зависимости от выбора.

Я хотел бы заполнить ItemGroup с этим "строки" в зависимости от истинного или ложного. Это возможно или что я должен использовать?

пример

Anders = true
Peter = false
Michael = false
Gustaf = true

мой ItemGroup Затем должны быть Андерс и Густаф.

Это возможно или как мне решить это?

1 ответ

Решение

Поскольку у вас есть куча предметов, было бы лучше хранить их в ItemGroup с самого начала, поскольку, в конце концов, это то, для чего оно предназначено, и оно также допускает преобразования и т. д. Например, это позволяет добиться того, чего вы хотите:

<ItemGroup>
  <Names Include="Anders">
    <Value>True</Value>
  </Names>
  <Names Include="Peter">
    <Value>False</Value>
  </Names>
  <Names Include="Michael">
    <Value>False</Value>
  </Names>
  <Names Include="Gustaf">
    <Value>True</Value>
  </Names>
</ItemGroup>

<Target Name="GetNames">

  <ItemGroup>
    <AllNames Include="%(Names.Identity)" Condition="%(Names.Value)==true"/>
  </ItemGroup>

  <Message Text="@(AllNames)"/>  <!--AllNames contains Anders and Gustaf-->
</Target>

Однако, если они должны быть свойствами, я не думаю, что есть другой способ, чем перечислять их все вручную, вот так:

<PropertyGroup>
  <Anders>True</Anders>
  <Peter>False</Peter>
  <Michael>False</Michael>
  <Gustaf>True</Gustaf>
</PropertyGroup>

<Target Name="GetNames">

  <ItemGroup>
    <AllNames Include="Anders" Condition="$(Anders)==true"/>
    <AllNames Include="Peter" Condition="$(Peter)==true"/>
    <AllNames Include="Michael" Condition="$(Michael)==true"/>
    <AllNames Include="Gustaf" Condition="$(Gustaf)==true"/>
  </ItemGroup>

  <Message Text="@(AllNames)"/>
</Target>
Другие вопросы по тегам