MSBuild使用自定义任务的输出批量更新ItemGroup MetaData

时间:2013-05-17 17:50:29

标签: msbuild build-automation msbuildextensionpack

我正在尝试使用MSBuild 4.0来卸载\安装我使用MSBuild扩展在ItemGroup中定义的一组Windows服务。我遇到的问题是如果服务不存在,卸载TaskAction将会出错。我希望能够使用CheckExists TaskAction在我的元数据中设置一个标志,我可以在条件语句中进行评估。

但是,我无法弄清楚如何批量处理服务列表,调用CheckExist任务并更新元数据中的标志。见下面的示例:

<ItemGroup>
    <ServiceName Include="Service1">
      <ExeName>Service1.exe</ExeName>
      <ServicePath>$(LocalBin)\Service1.exe</ServicePath>
      <User>LocalSystem</User>
      <Exists></Exists>
    </ServiceName>
    <ServiceName Include="Service2">
      <ExeName>Service2.exe</ExeName>
      <ServicePath>$(LocalBin)\Service2.exe</ServicePath>
      <User>LocalSystem</User>
      <Exists></Exists>
    </ServiceName>
  </ItemGroup>

  <Target Name="UninstallServices">

    <!--how can I batch over this command to set %(ServiceName.Exist)-->
    <MSBuild.ExtensionPack.Computer.WindowsService TaskAction="CheckExists" ServiceName="%(ServiceName.Identity)">
      <Output TaskParameter="Exists" PropertyName="DoesExist"/>
    </MSBuild.ExtensionPack.Computer.WindowsService>

    <MSBuild.ExtensionPack.Computer.WindowsService TaskAction="Uninstall" ServiceName="%(ServiceName.Identity)" User="%(ServiceName.User)" ServicePath="%(ServiceName.ServicePath)" Condition="%(ServiceName.Exists) = 'True'" />
  </Target>

我做了一些搜索,但没有找到基于任务的输出结果更新元数据的示例。这是可能的吗?我应该采取不同的方法吗?

我目前解决此问题的方法是在调用卸载时将ContinueOnError设置为true,但我不喜欢这种方法,因为我可能隐藏其他错误。

任何帮助都将不胜感激。

谢谢,

泰森蒙克里夫

0 个答案:

没有答案