it-swarm.com.ru

Как получить вывод exec задачи с помощью msbuild

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

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

72
tbicr

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

Как это:

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

Просто:

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

В заключение!

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

124
Avi Cherry

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

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

5
Samer Adra

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

echo test output > somefile.txt
0
Syam

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

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