如何使用msbuild获取exec任务输出

时间:2012-01-20 08:37:26

标签: msbuild exec msbuild-task

我正在尝试使用msbuild执行exec任务的简单输出:

<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <Target Name="Test">
    <Exec Command="echo test output">
      <Output TaskParameter="Outputs" ItemName="Test1" />
    </Exec>
    <Exec Command="echo test output">
      <Output TaskParameter="Outputs" PropertyName="Test2" />
    </Exec>
    <Message Text="----------------------------------------"/>
    <Message Text="@(Test1)"/>
    <Message Text="----------------------------------------"/>
    <Message Text="$(Test2)"/>
    <Message Text="----------------------------------------"/>
  </Target>
</Project>

但是得到下一个输出:

  echo test output
  test output
  echo test output
  test output
  ----------------------------------------
  ----------------------------------------
  ----------------------------------------

如何通过我的脚本输出?

4 个答案:

答案 0 :(得分:127)

大家好消息!现在,您可以从.NET 4.5开始捕获<Exec>的输出。

像这样:

<Exec ... ConsoleToMSBuild="true">
  <Output TaskParameter="ConsoleOutput" PropertyName="OutputOfExec" />
</Exec>

简单地:

  • ConsoleToMsBuild="true"添加到您的<Exec>代码
  • 使用ConsoleOutput标记
  • 中的<Output>参数捕获输出

最后!

Documentation here

答案 1 :(得分:6)

我已经到了这样的地步,我对MSBuild的局限性感到非常沮丧,以及应该工作但却没有(至少不是在每个环境中)的东西,几乎我需要做的任何时候任何与MSBuild,我在C#中创建自定义构建任务。

如果其他建议都没有起作用,那么你当然可以这样做。

答案 2 :(得分:0)

您可以将输出通过管道传输到文件中,然后将其读回。

echo test output > somefile.txt

答案 3 :(得分:0)

如果要捕获输出到类似数组的结构,而不是捕获到输出行用分号分隔的纯字符串,请使用 ItemName 而不是 PropertyName

<Exec ... ConsoleToMSBuild="true">
  <Output TaskParameter="ConsoleOutput" ItemName="OutputOfExec" />
</Exec>