我有一个目标内定义的目录列表:
<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>
这是一个错误还是我遗漏了什么?
最佳答案
试试这个,它会使用任务批处理正确地创建 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)
关于xml - 使用通配符将项目组转换为另一个项目组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7268040/