我有一个在目标中定义的目录列表:
<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>
这是一个错误还是我错过了什么?
答案 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)