多次评估项目

时间:2012-02-17 10:31:57

标签: msbuild

不确定问题是否正确,但我正在尝试做的是:

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

<Target Name="DefaultName">
    <Message Text="%(%(itemNames.Identity))"/>
</Target>

我期待输出为:

a;b;c;
x;y;z;

相反,输出是:

%(item1)
%(item2)

所以我的猜测是Text属性只解析一次而结果字符串不解析。这有什么解决方法吗?

1 个答案:

答案 0 :(得分:1)

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

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

...显示以下输出...

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

摘自MSBuild Trickery技巧#68和69