Msbuild 多次评估项目

Msbuild 多次评估项目,msbuild,Msbuild,不确定这是否是问题的正确标题,但我想做的是: <ItemGroup> <item1 Include="a;b;c;"/> <item2 Include="x;y;z;"/> <itemNames Include="item1;item2"/> </ItemGroup> <Target Name="DefaultName"> <Message Text="%(%(itemNames.Id

不确定这是否是问题的正确标题,但我想做的是:

<ItemGroup>
    <item1 Include="a;b;c;"/>
    <item2 Include="x;y;z;"/>
    <itemNames Include="item1;item2"/>
</ItemGroup>

<Target Name="DefaultName">
    <Message Text="%(%(itemNames.Identity))"/>
</Target>
相反,输出是:

%(item1)
%(item2)

因此,我的猜测是,文本属性只解析一次,而结果字符串不是。围绕此问题的任何解决方法?

以下内容将生成您要查找的输出:

    <ItemGroup> 
       <item1 Include="a;b;c;"/> 
       <item2 Include="x;y;z;"/> 
       <itemNames Include="item1;item2"/> 
    </ItemGroup> 

    <Target Name="DefaultName"
       Outputs="%(itemNames.Identity)">
       <PropertyGroup>
          <ThisItem>%(itemNames.Identity)</ThisItem>
       </PropertyGroup>
       <ItemGroup>
          <ThisItem Include="@($(ThisItem))" />
       </ItemGroup>
       <Message Text="@(ThisItem)" />
    </Target> 

摘自技巧#68和69

以下内容将生成您所需的输出:

    <ItemGroup> 
       <item1 Include="a;b;c;"/> 
       <item2 Include="x;y;z;"/> 
       <itemNames Include="item1;item2"/> 
    </ItemGroup> 

    <Target Name="DefaultName"
       Outputs="%(itemNames.Identity)">
       <PropertyGroup>
          <ThisItem>%(itemNames.Identity)</ThisItem>
       </PropertyGroup>
       <ItemGroup>
          <ThisItem Include="@($(ThisItem))" />
       </ItemGroup>
       <Message Text="@(ThisItem)" />
    </Target> 
摘自《技巧》68和69

DefaultName:
  a;b;c
DefaultName:
  x;y;z