MSBUILD批处理任务批量执行每个语句

时间:2009-07-14 21:25:43

标签: msbuild msbuild-task

我的MSBuild脚本中有以下任务:

 <Target Name="ZipStates">
    <Message Text="CREATING ZIP FOR %(StateSet.Name)" />

    <CreateItem Include="$(StagingArea)\v$(VersionString)\States\%(StateSet.Name)\v$(VersionString)%20%(StateSet.Abbreviation)XTend\**\*.*" >
      <Output ItemName="ZipFiles" TaskParameter="Include"/>
    </CreateItem>

    <MSBuild.Community.Tasks.Zip Files="@(ZipFiles)"
          ZipFileName="$(StagingArea)\v$(VersionString)\States\%(StateSet.Name)\v$(VersionString)%(StateSet.Abbreviation).zip" />

  </Target>

<ItemGroup>
    <StateSet Include="AK">
      <Name>Alaska</Name>
      <Abbreviation>AK</Abbreviation>
    </StateSet>
    <StateSet Include="FL">
      <Name>Florida</Name>
      <Abbreviation>FL</Abbreviation>
    </StateSet>
    <StateSet Include="LA">
      <Name>Louisiana</Name>
      <Abbreviation>LA</Abbreviation>
    </StateSet>
</ItemGroup>

输出如下:

ZipStates:   为阿拉斯加创造ZIP   为佛罗里达州创建邮政   为路易斯安那州创建邮政   创建zip文件“C:\ StagingArea \ v5_6_0 \ States \ Alaska \ v5_6_0AK.zip”。

当我以这种方式执行批处理时,似乎对项目组批处理中的每个节点执行任务中的每个命令,然后它继续进行下一步。我最终得到的是3个拉链,它们都包含相同的文件。

任何人都知道如何以不同的方式做到这一点?

1 个答案:

答案 0 :(得分:0)

想出来。我需要修改我创建文件列表的方式,使其在每个列表中都是唯一的。像这样:

<Target Name="ZipStates">

    <CreateItem Include="$(StagingArea)\v$(VersionString)\States\%(StateSet.Name)\v$(VersionString)%20%(StateSet.Abbreviation)XTend\**\*.*"
                Exclude="web.config">
      <Output ItemName="XtendZipFiles%(StateSet.Abbreviation)" TaskParameter="Include"/>
    </CreateItem>

    <MSBuild.Community.Tasks.Zip Files="@(XtendZipFiles%(StateSet.Abbreviation))"
          ZipFileName="$(StagingArea)\v$(VersionString)\States\%(StateSet.Name)\v$(VersionString)%(StateSet.Abbreviation)XTend.zip" />

  </Target>