msbuild - msbuild 中的双循环?

标签 msbuild batch-file nested

我正在为 msbuild 编写一个脚本,它应该在一个步骤中制作两批。
示例:2 个项目组

<ItemGroup>
 <GroupOne Include="1" />
 <GroupOne Include="2" />
</ItemGroup>

<ItemGroup>
 <GroupTwo Include="A" />
 <GroupTwo Include="B" />
</ItemGroup>

这两个组应该相互循环:
<Message Text="%(GroupOne.Identity) %(GroupTwo.Identity)" />

我希望 msbuild 使两个批次的结果都给出
1 A  
2 A  
1 B  
2 B  

结果。
但这并没有发生。相反,它返回了以下无用的废话:
1  
2  
  A  
  B  

按照以下链接中的博客建议的方式(使用本地属性组)进行操作,例如
<PropertyGroup>
  <GroupOneStep>%(GroupOne.Identity)</GroupOneStep>
</PropertyGroup>
<Message Text="$(GroupOneStep) %(GroupTwo.Identity)" />

使
2 A   
2 B

任何提示?我要疯了。 :-(

PS:这是一篇关于该主题的博文 - 不幸的是它并没有像那里推荐的那样工作:
http://blogs.msdn.com/b/giuliov/archive/2010/04/30/gotcha-msbuild-nested-loops-double-batching.aspx

最佳答案

这是一个更简单的解决方案。

<Target Name="Default">
    <ItemGroup>
        <Combined Include="@(GroupOne)">
            <GroupTwo>%(GroupTwo.Identity)</GroupTwo>
        </Combined>
    </ItemGroup>

    <Message Text="%(Combined.Identity) %(Combined.GroupTwo) " />
</Target>

使用中间项目组 Combined创建消息任务批处理的中间项目组。

If you reference two Item groups in the same task, Msbuild will batch on them both separately. which is NOT what you want



如果您有更多的 ItemMetaData,您将需要为第二个 ItemGroup 显式处理它,包含在引用符号 @ 中的 ItemGroup 自动包含 ItemMetaData,因此您只需要通过显式引用从第二个组创建额外的 MetaData。下面是一个例子:
<ItemGroup>
    <GroupOne Include="1">
        <Name>One</Name>
    </GroupOne>
    <GroupOne Include="2">
        <Name>Two</Name>
    </GroupOne>
</ItemGroup>

<ItemGroup>
    <GroupTwo Include="A">
        <Name>Andrew</Name>
    </GroupTwo>
    <GroupTwo Include="B">
        <Name>Bob</Name>
    </GroupTwo>
</ItemGroup>

<Target Name="Default">
    <ItemGroup>
        <Combined Include="@(GroupOne)">
            <GroupTwo>%(GroupTwo.Identity)</GroupTwo>
            <GroupTwoName>%(GroupTwo.Name)</GroupTwoName>
        </Combined>
    </ItemGroup>

    <Message Text="%(Combined.Identity) %(Combined.Name) %(Combined.GroupTwoName) %(Combined.GroupTwo) " />
</Target>

关于msbuild - msbuild 中的双循环?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4786301/

相关文章:

build - 为什么继续使用扩展名.bat而不是.cmd?

windows-xp - 批处理脚本 - 在 Windows XP 中以编程方式创建用户

excel - VBA 嵌套错误 GoTo

java - 使用 Java 进行命令行版本控制——处理大量嵌套目录

VBA 子函数 错误处理

javascript - Angular:使用 @Input() 传递数据

.net-core - MSBuild 如何检测 .NET Core 的版本?

c# - 为什么GenerateFunctions 查找System.Runtime、Version=4.2.1.0 失败并抛出FileNotFoundException)?

msbuild - 使用 Visual Studio 2015 编译 ToolsVersion 12

msbuild - 修复 COM 引用 : The type library importer could not convert the signature for the member DISPPARAMS. rgvarg