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

tbi*_*icr 76 msbuild exec msbuild-task

我试图通过exec任务得到简单的输出msbuild:

<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>
Run Code Online (Sandbox Code Playgroud)

但得到下一个输出:

  echo test output
  test output
  echo test output
  test output
  ----------------------------------------
  ----------------------------------------
  ----------------------------------------
Run Code Online (Sandbox Code Playgroud)

如何通过我的脚本输出?

Avi*_*rry 133

大家好消息!您现在可以捕获<Exec>.NET 4.5中的输出.

像这样:

<Exec ... ConsoleToMSBuild="true">
  <Output TaskParameter="ConsoleOutput" PropertyName="OutputOfExec" />
</Exec>
Run Code Online (Sandbox Code Playgroud)

只是:

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

最后!

文档在这里

  • 很棒的发现,@ AviCherry!Exec任务本身的文档中缺少ConsoleToMSBuild ConsoleOutput的疏忽(https://msdn.microsoft.com/en-us/library/x8zx72cd.aspx). (3认同)
  • 哎呀,你.它位于:http://msdn.microsoft.com/en-us/library/ms124731(v = VS.110).aspx (2认同)
  • 这适用于MS Build 12,它由Microsoft Build Tools 2013安装:https://www.microsoft.com/en-us/download/details.aspx?id = 40760 (2认同)

Sam*_*dra 6

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

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

  • 我觉得你的痛苦 - 虽然我的自定义任务是一个python脚本. (3认同)
  • 我知道这是从你遇到这个问题开始的时候了,但我刚刚发生了同样的事情并通过在根<Project>元素中设置ToolsVersion ="12.0"来解决它.希望这有一些帮助:) (2认同)

小智 6

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

<Exec ... ConsoleToMSBuild="true">
  <Output TaskParameter="ConsoleOutput" ItemName="OutputOfExec" />
</Exec>
Run Code Online (Sandbox Code Playgroud)