Как получить вывод задачи exec с помощью msbuild - PullRequest
73 голосов
/ 20 января 2012

Я пытаюсь получить простой вывод с помощью задачи 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>

Но получить следующий вывод:

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

Как получить вывод с помощью моего сценария

Ответы [ 4 ]

127 голосов
/ 29 мая 2013

Хорошие новости всем! Теперь вы можете захватывать вывод из <Exec>, начиная с .NET 4.5.

Как это:

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

Просто:

  • Добавьте ConsoleToMsBuild="true" к вашему тегу <Exec>
  • Захватить вывод с помощью параметра ConsoleOutput в теге <Output>

Наконец-то!

Документация здесь

6 голосов
/ 22 сентября 2012

Я дошел до того, что я так разочарован ограничениями MSBuild и вещами, которые должны работать, но не работают (по крайней мере, не в каждом контексте), что почти всегда, когда мне нужно это делать что-нибудь с MSBuild, я создаю пользовательскую задачу сборки в C #.

Если ни одно из других предложений не работает, то вы, безусловно, можете сделать это таким образом.

0 голосов
/ 12 февраля 2019

Если вы хотите захватить вывод в массивоподобную структуру, а не в простую строку, где выходные строки разделяются точкой с запятой, используйте ItemName вместо PropertyName :

<Exec ... ConsoleToMSBuild="true">
  <Output TaskParameter="ConsoleOutput" ItemName="OutputOfExec" />
</Exec>
0 голосов
/ 26 марта 2013

Вы можете передать вывод в файл, так сказать, и прочитать его обратно.

echo test output > somefile.txt
...