使用通配符将项目组转换为另一个项目组

时间:2011-09-01 08:53:27

标签: xml msbuild

我有一个在目标中定义的目录列表:

<Target>
  <ItemGroup>
    <FooDirs Include="Foo\Dir1" />
    <FooDirs Include="Foo\Dir2" />
  </ItemGroup>
<Target>

现在我要创建@(FooDirs)中所有文件的列表:

<ItemGroup>
  <FooFiles Include="@(FooDirs -> '%(Identity)\**\*')" />
</ItemGroup>

遗憾的是,这不起作用,结果列表包含文字字符串:"Foo\Dir1\**\*;Foo\Dir2\**\*"。 但是,如果我使用已弃用的<CreateItem>任务,它可以正常工作:

<CreateItem Include="@(FooDirs -> '%(Identity)\**\*')">
  <Output TaskParameter="Include" ItemName="FooFiles" />
</CreateItem>

这是一个错误还是我错过了什么?

1 个答案:

答案 0 :(得分:4)

尝试使用它,它将使用任务批处理正确创建FooFiles:

<Target Name="Foo"> 
   <ItemGroup> 
      <FooDirs Include="Foo\Dir1" /> 
      <FooDirs Include="Foo\Dir2" /> 
   </ItemGroup> 
   <ItemGroup> 
      <FooFiles Include="%(FooDirs.Identity)\**\*" />
   </ItemGroup> 
   <Message Text="%(FooFiles.Identity)" />
</Target> 

(摘自“MSBuild Trickery”一书#5)

相关问题