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

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

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

最佳答案

试试这个,它会使用任务批处理正确地创建 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/

相关文章:

xml - 如何为元素插入祖先

javascript - XMLHttprequest.send(null) 使我的代码崩溃

android - EditText 提示未在 5.0.1 中显示

c++ - 是否可以在一个解决方案中包含具有不同平台工具集的项目? (MSBuild)

.net - 如何修复 "No way to resolve conflict between"错误?

xml - Excel XML 2003-2004 格式到底是什么?

.net - 使用 msbuild 和大型解决方案阻止所有复制操作

visual-studio-2008 - 从 3.5 构建 MSBuild 2.0 项目

asp.net - MSBuild不会生成PDB文件

java - 在 Spring 上下文 : DuplicateFieldException 中使用 XStream 时出错