我有这样的任务:
<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值展平项目没有意义......
答案 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)" />