msbuild数组迭代
我如何使一个任务遍历此列表并执行某些操作msbuild数组迭代,msbuild,Msbuild,我如何使一个任务遍历此列表并执行某些操作 <ItemGroup> <!-- Unit Test Projects--> <MyGroup Include="Hello.xml" /> <MyGroup Include="GoodBye.xml" /> </ItemGroup> 如果我的结果中有特定文本,我想显示一条错误消息。然而,就我的一生而言,我不知道如何在Msbuild中迭代数组。。。有人知道
<ItemGroup>
<!-- Unit Test Projects-->
<MyGroup Include="Hello.xml" />
<MyGroup Include="GoodBye.xml" />
</ItemGroup>
如果我的结果中有特定文本,我想显示一条错误消息。然而,就我的一生而言,我不知道如何在Msbuild中迭代数组。。。有人知道如何做到这一点吗?您可以在内部目标上使用,例如:
<XmlPeek XmlInputPath="%(MyGroup.Identity)"
Query="/results">
<Output TaskParameter="Result"
ItemName="myResult" />
</XmlPeek>
您需要为此使用批处理。批处理将基于元数据键对一组项进行迭代。我已经整理了一大堆关于这个的资料。例如,看看这个简单的MSBuild文件
<ItemGroup>
<!-- Unit Test Projects-->
<MyGroup Include="Hello.xml" />
<MyGroup Include="GoodBye.xml" />
</ItemGroup>
<Target Name="CheckAllXmlFile">
<!-- Call CheckOneXmlFile foreach file in MyGroup -->
<MSBuild Projects="$(MSBuildProjectFile)"
Properties="CurrentXmlFile=%(MyGroup.Identity)"
Targets="CheckOneXmlFile">
</MSBuild>
</Target>
<!-- This target checks the current analyzed file $(CurrentXmlFile) -->
<Target Name="CheckOneXmlFile">
<XmlPeek XmlInputPath="$(CurrentXmlFile)"
Query="/results/text()">
<Output TaskParameter="Result" ItemName="myResult" />
</XmlPeek>
<!-- Throw an error message if Result has a certain text : ERROR -->
<Error Condition="'$(Result)' == 'ERROR'"
Text="Error with results $(Result)"/>
</Target>
批处理始终使用语法
%(Xyz.Abc)
。查看这些链接,以了解有关批处理的更多信息。如何获取项目组的第一个项目?我尝试了各种方法[0]
和First()
,但无法使其工作。旧链接无效,新链接无效
<Project DefaultTargets="Demo" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<Files Include="one.txt"/>
<Files Include="two.txt"/>
<Files Include="three.txt"/>
<Files Include="four.txt"/>
</ItemGroup>
<Target Name="Demo">
<Message Text="Not batched: @(Files->'%(Identity)')"/>
<Message Text="========================================"/>
<Message Text="Batched: %(Files.Identity)"/>
</Target>
</Project>
Not batched: one.txt;two.txt;three.txt;four.txt
========================================
Batched: one.txt
Batched: two.txt
Batched: three.txt
Batched: four.txt