使用通配符将 itemgroup 转换为另一个 itemgroup

Mar*_*cki 2 xml msbuild

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

<Target>
  <ItemGroup>
    <FooDirs Include="Foo\Dir1" />
    <FooDirs Include="Foo\Dir2" />
  </ItemGroup>
<Target>
Run Code Online (Sandbox Code Playgroud)

现在我想在里面创建所有文件的列表@(FooDirs)

<ItemGroup>
  <FooFiles Include="@(FooDirs -> '%(Identity)\**\*')" />
</ItemGroup>
Run Code Online (Sandbox Code Playgroud)

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

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

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

Bri*_*ler 5

试试这个,它将使用任务批处理正确创建 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> 
Run Code Online (Sandbox Code Playgroud)

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