【问题标题】:MSBuild ItemGroup with conditionMSBuild ItemGroup 有条件
【发布时间】:2012-10-12 05:29:08
【问题描述】:

我不知道ItemGroup 是否适合使用。我会得到 4 个不同的布尔值,根据选择是真还是假。

我想用这个“字符串”填充ItemGroup,这取决于真假。这可能吗?或者我应该使用什么?

例子

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

我的ItemGroup 应该有 安德斯和古斯塔夫。

这可能吗,或者我应该如何解决?

【问题讨论】:

  • 这些“字符串”是什么?它们在文本文件中吗?它们是 msbuild 属性吗?另外,请检查您的拼写。这是ItemGroup 不是iteamgroup

标签: msbuild msbuild-task msbuild-4.0 msbuildcommunitytasks msbuildextensionpack


【解决方案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>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-02-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-21
    • 2018-08-24
    • 2011-10-07
    • 1970-01-01
    相关资源
    最近更新 更多