web-dev-qa-db-ja.com

msbuildでexecタスクの出力を取得する方法

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
  ----------------------------------------
  ----------------------------------------
  ----------------------------------------

スクリプトで出力を取得するにはどうすればよいですか?

74
tbicr

皆さん、朗報です! .NET 4.5以降、<Exec>から出力をキャプチャできるようになりました。

このような:

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

単に:

  • ConsoleToMsBuild="true"タグに<Exec>を追加します
  • <Output>タグのConsoleOutputパラメーターを使用して出力をキャプチャします

最後に!

ドキュメントはこちら

128
Avi Cherry

私は、MSBuildの制限と、動作するはずであるが(少なくともすべてのコンテキストで)動作しないものに非常に不満を感じるようになりました。 、C#でカスタムビルドタスクを作成します。

他の提案がどれも機能していない場合は、そのようにすることができます。

6
Samer Adra

出力をファイルにパイプして、読み上げることができます。

echo test output > somefile.txt
0
Syam

出力をセミコロンで区切られたプレーンな文字列ではなく、配列のような構造に出力をキャプチャする場合は、PropertyNameの代わりにItemNameを使用します。

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