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?
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:
ConsoleToMsBuild="true"
à votre tag <Exec>
ConsoleOutput
dans une balise <Output>
Finalement!
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.
Vous pouvez diriger la sortie vers un fichier pour ainsi dire, et le relire.
echo test output > somefile.txt
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>