首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >msbuild数组迭代

msbuild数组迭代
EN

Stack Overflow用户
提问于 2010-06-15 21:57:56
回答 2查看 19.4K关注 0票数 19
代码语言:javascript
复制
<ItemGroup>
    <!-- Unit Test Projects-->
    <MyGroup Include="Hello.xml" />
    <MyGroup Include="GoodBye.xml" />     
</ItemGroup>

如何创建一个遍历此列表并执行某些操作的任务?

代码语言:javascript
复制
<XmlPeek XmlInputPath="%(MyGroup.Identity)"
         Query="/results">
    <Output TaskParameter="Result"
            ItemName="myResult" />
</XmlPeek>

如果我的结果里面有一个特定的文本,我想要显示一条错误消息。然而,对于我来说,我不知道如何在Msbuild中迭代数组……有人知道怎么做到这一点吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-06-15 22:32:18

您可以在内部目标上使用batching,如下所示:

代码语言:javascript
复制
<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>
票数 21
EN

Stack Overflow用户

发布于 2010-06-15 22:37:33

为此,您需要使用批处理。批处理将基于元数据键迭代一组项。我在http://sedotech.com/Resources#batching上整理了一堆关于这方面的资料。例如,看一下这个简单的MSBuild文件。

代码语言:javascript
复制
<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>

当您构建Demo目标时,结果是

代码语言:javascript
复制
Not batched: one.txt;two.txt;three.txt;four.txt
========================================
Batched: one.txt
Batched: two.txt
Batched: three.txt
Batched: four.txt

批处理始终使用语法%(Xyz.Abc)。仔细查看这些链接,可以获得更多关于批处理的信息,这是你想知道的。

票数 36
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3045821

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档