不需要的项目名称展平

时间:2013-06-11 23:29:39

标签: msbuild

我有这样的任务:

  <ItemGroup>
     <Folder Include="d:\Trunk">
        <BranchName>MyBranch</BranchName>
     </Folder>         
     <Folder Include="d:\8.1">
        <BranchName>MyBranch</BranchName>
     </Folder>         
  </ItemGroup>
  <Message Text="BranchName: %(Folder.BranchName), Folder: @(Folder)" />

我期待的是:

BranchName: MyBranch, Folder: d:\Trunk
BranchName: MyBranch, Folder: d:\8.1

我得到了什么:

BranchName: MyBranch, Folder: d:\Trunk;d:\8.1

我知道扁平化项目标识是MSBuild的一个功能。但是可以摆脱这个吗?按MetaData值展平项目没有意义......

1 个答案:

答案 0 :(得分:1)

它似乎按元数据值分组。如果您要将第二个BranchName节点的值更改为“AnotherBranch”,您将获得此输出:

BranchName: MyBranch, Folder: d:\Trunk
BranchName: AnotherBranch, Folder: d:\8.1

您正在使用BranchName进行分组,因此该分支的所有项目都会组合在一起,因此请按照文件夹的标识进行分组,看看是否能为我们提供所需的结果:

<Message Text="Branch: @(Folder->Metadata('BranchName')), Folder: %(Folder.Identity)" />

输出:

Branch: MyBranch, Folder: d:\Trunk
Branch: MyBranch, Folder: d:\8.1

编辑:

或者您可以删除@表示法并直接引用项目元数据:

<Message Text="Branch: %(Folder.BranchName), Folder: %(Folder.Identity)" />