web-dev-qa-db-fra.com

Comment obtenir la sortie de la tâche exec avec msbuild

J'essaie d'obtenir une sortie simple en exécutant une tâche avec 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>

Mais obtenez la prochaine sortie:

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

Comment puis-je obtenir une sortie par mon script?

72
tbicr

Bonnes nouvelles tout le monde! Vous pouvez maintenant capturer la sortie de <Exec> à partir de .NET 4.5.

Comme ça:

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

Simplement:

  • Ajoutez ConsoleToMsBuild="true" à votre tag <Exec>
  • Capturez la sortie à l'aide du paramètre ConsoleOutput dans une balise <Output>

Finalement!

Documentation ici

124
Avi Cherry

J'ai atteint un point où je suis tellement frustré par les limitations de MSBuild et par les éléments qui sont supposés fonctionner mais ne fonctionnent pas (du moins pas dans tous les contextes), c'est à peu près à chaque fois que je dois faire quelque chose avec MSBuild. , Je crée une tâche de construction personnalisée en C #.

Si aucune des autres suggestions ne fonctionne, vous pouvez certainement le faire de cette façon.

5
Samer Adra

Vous pouvez diriger la sortie vers un fichier pour ainsi dire, et le relire. 

echo test output > somefile.txt
0
Syam

Si vous souhaitez capturer la sortie dans une structure de type tableau et non dans une chaîne simple dans laquelle les lignes de sortie sont séparées par un point-virgule, utilisez ItemName au lieu de PropertyName :

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