web-dev-qa-db-de.com

Wie bekomme ich eine Exec-Task-Ausgabe mit msbuild?

Ich versuche eine einfache Ausgabe von Exec Task mit msbuild zu erhalten:

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

Holen Sie sich die nächste Ausgabe:

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

Wie kann ich mit meinem Skript eine Ausgabe erhalten?

72
tbicr

Gute Nachrichten, Leute! Sie können jetzt die Ausgabe von <Exec> ab .NET 4.5 erfassen.

So was:

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

Einfach:

  • Fügen Sie ConsoleToMsBuild="true" zu Ihrem <Exec>-Tag hinzu
  • Erfassen Sie die Ausgabe mit dem Parameter ConsoleOutput in einem Tag <Output>

Endlich!

Dokumentation hier

124
Avi Cherry

Ich bin an dem Punkt angelangt, an dem ich mit den Einschränkungen von MSBuild so frustriert bin, und dem Zeug, das funktionieren soll, aber nicht funktioniert (zumindest nicht in jedem Kontext). Das ist fast immer, wenn ich etwas mit MSBuild anfangen muss , Ich erstelle eine benutzerdefinierte Erstellungsaufgabe in C #.

Wenn keiner der anderen Vorschläge funktioniert, können Sie dies sicherlich auch so tun.

5
Samer Adra

Sie können die Ausgabe sozusagen in eine Datei leiten und zurücklesen. 

echo test output > somefile.txt
0
Syam

Wenn Sie die Ausgabe in einer Array-ähnlichen Struktur und nicht in einer einfachen Zeichenfolge erfassen möchten, bei der die Ausgabezeilen durch ein Semikolon getrennt sind, verwenden Sie ItemName anstelle von PropertyName :

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