Msbuild 属性中的不同/唯一值

Msbuild 属性中的不同/唯一值,msbuild,Msbuild,假设存在分隔符,是否有方法提取属性中的唯一值。所以如果我有 <PropertyGroup> <Values>foo;bar;bar;foo</Values> </PropertyGroup> 傅;酒吧;酒吧;福 有没有一种方法可以在没有重复值的情况下获取值为“foo;bar”的属性?我知道Item函数Distinct,但还没有找到将其用于属性的方法。下面是一个示例,说明如何使用ItemGroup的Distinct方法并将结果分配回属性:

假设存在分隔符,是否有方法提取属性中的唯一值。所以如果我有

<PropertyGroup>
  <Values>foo;bar;bar;foo</Values>
</PropertyGroup>

傅;酒吧;酒吧;福

有没有一种方法可以在没有重复值的情况下获取值为“foo;bar”的属性?我知道Item函数Distinct,但还没有找到将其用于属性的方法。

下面是一个示例,说明如何使用ItemGroup的Distinct方法并将结果分配回属性:

<Project DefaultTargets="TestDistinct" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <PropertyGroup>
    <Values>foo;bar;bar;foo</Values>
  </PropertyGroup>
  <Target Name="TestDistinct">
    <ItemGroup>
      <ValueGroup Include="$(Values)"/>
    </ItemGroup>
    <PropertyGroup>
      <DistinctValues>@(ValueGroup->Distinct())</DistinctValues>
    </PropertyGroup>
    <Message Text="$(DistinctValues)" />
   </Target>
 </Project>

傅;酒吧;酒吧;福
@(ValueGroup->Distinct())

快速解释它是如何工作的。MSBuild的PropertyGroup只能保存单值元素(属性)。ItemGroup类似于列表。因为您需要对值列表进行操作——要提取不同的列表,您需要一个ItemGroup。然后应用
Distinct()
方法并将结果分配给一个新属性,在这里称为
。现在您有了一个属性,该属性包含与原始属性不同的元素。

感谢您的回答,它工作得非常好。如果在属性上有类似$(Values->Distinct(“;”)的操作,那就太好了