msbuild数组迭代

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> 

如果myresult里面有一定的文字,我想发一个错误信息。然而,对于我的生活,我无法弄清楚如何遍历Msbuild中的数组......任何人都知道如何做到这一点?

你可以在其内部目标使用batching,这样的:

<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> 

您需要使用批处理这一点。批处理将基于元数据键迭代一组项目。我在http://sedotech.com/Resources#batching上汇编了一堆材料。例如,看看这个简单的MSBuild文件。

<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 

配料一直使用语法%(Xyz.Abc)。仔细查看这些链接,了解有关批处理的更多信息,然后您想知道。

+0

如何获取物品组的第一个物品?我用各种方法试过'[0]'和'First()',但是我无法使它工作。 – 2017-12-12 13:46:50