Sas*_*cha 13 msbuild nested batch-file
我正在为msbuild编写一个脚本,它应该一步完成两个批处理.
示例:2个ItemGroups
<ItemGroup>
<GroupOne Include="1" />
<GroupOne Include="2" />
</ItemGroup>
<ItemGroup>
<GroupTwo Include="A" />
<GroupTwo Include="B" />
</ItemGroup>
Run Code Online (Sandbox Code Playgroud)
这两组应该相互循环:
<Message Text="%(GroupOne.Identity) %(GroupTwo.Identity)" />
Run Code Online (Sandbox Code Playgroud)
我希望msbuild能够完成两个批次的结果
1 A
2 A
1 B
2 B
Run Code Online (Sandbox Code Playgroud)
结果.
但那并没有发生.相反,它返回了以下无用的废话:
1
2
A
B
Run Code Online (Sandbox Code Playgroud)
按照以下链接中的博客(使用本地属性组)的方式进行操作
<PropertyGroup>
<GroupOneStep>%(GroupOne.Identity)</GroupOneStep>
</PropertyGroup>
<Message Text="$(GroupOneStep) %(GroupTwo.Identity)" />
Run Code Online (Sandbox Code Playgroud)
品牌
2 A
2 B
Run Code Online (Sandbox Code Playgroud)
任何提示?我疯了.:-(
PS:这里有一个关于该主题的博文-不幸的是因为propsed有它不工作: http://blogs.msdn.com/b/giuliov/archive/2010/04/30/gotcha-msbuild-nested-loops-double -batching.aspx
Dog*_*ars 13
这是一个更简单的解决方案.
<Target Name="Default">
<ItemGroup>
<Combined Include="@(GroupOne)">
<GroupTwo>%(GroupTwo.Identity)</GroupTwo>
</Combined>
</ItemGroup>
<Message Text="%(Combined.Identity) %(Combined.GroupTwo) " />
</Target>
Run Code Online (Sandbox Code Playgroud)
使用中间项组Combined
创建Message任务批处理的中间项组.
如果在同一任务中引用两个Item组,Msbuild将分别对它们进行批处理.这不是你想要的
如果你有更多的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>
Run Code Online (Sandbox Code Playgroud)
Bri*_*ker 12
尝试使用组1中的标识创建新的ItemGroup,并从组2的标识(或任何其他元数据)中将元数据分配给新项目组.然后使用批处理迭代新组.
<CreateItem Include="@(GroupOne)" AdditionalMetadata="Option1=%(GroupTwo.Identity)">
<Output ItemName="_Group_Merged" TaskParameter="Include"/>
</CreateItem>
<Message Text="%(_Group_Merged.Identity)-%(_Group_Merged.Option1)" />
Run Code Online (Sandbox Code Playgroud)
如果您有两个以上的组,则可以添加CreateItem条目以将第三个组合并到_Group_Merged中,然后迭代该组合组.
<CreateItem Include="@(_Group_Merged)" AdditionalMetadata="Option2=%(GroupThree.Identity)">
<Output ItemName="_Group_Merged2" TaskParameter="Include"/>
</CreateItem>
<Message Text="%(_Group_Merged2.Identity)-%(_Group_Merged2.Option1)-%(_Group_Merged2.Option2)" />
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
3088 次 |
最近记录: |