msbuild로 exec 작업 출력을 얻는 방법


82

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

스크립트에서 출력을 얻으려면 어떻게해야합니까?



나는 미스 docuemntation 정보 해요 덕분에, 사실로 보인다
tbicr

1
잘 문서화는 일반적으로 불가능한 것이 아니라 무엇인지에 대한 것입니다. 그렇긴해도 귀하의 질문이 일반적인 것 같으므로 적절한 "커뮤니티 콘텐츠"를 추가하여 MSDN 문서를 개선해야 할 수도 있습니다.
Christian.K

2
Gathering ... 관련 게시물의 파일 해킹을 제외하고는 exec가 exec로이 작업을 잘 수행 할 수없는 것 같습니다. 실제로 일부 사람들은 msbuildextensions에서 개선 된 버전을 요구하고 있습니다. exec로 무엇을하려고합니까? 당신이 시도하고있는 것을 성취하는 더 쉬운 방법이있을 수 있습니다. 예를 들어 MSBuild.ExtensionPack.Framework.DateAndTime 작업에서 datetime 값을 가져올 수 있습니다. 이 기능이 정말로 필요한 경우 사용자 지정 msbuild 작업을 빌드하는 것이 가장 좋은 방법이라고 생각합니다. 나는 시간이있을 때 그것을 채찍질하고 여기에 게시하려고 노력할 것입니다.
Dan Csharpster 2012 년

stackoverflow.com/questions/11096148/… 이 링크는 <Message Importance = "high"Text = "$ (Test2)"/> 사용
Cyrus Downey

답변:


141

모두 좋은 소식입니다! 이제 <Exec>.NET 4.5 부터 출력을 캡처 할 수 있습니다 .

이렇게 :

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

간단히:

  • 추가 ConsoleToMsBuild="true"귀하에 <Exec>태그
  • 태그 의 ConsoleOutput매개 변수를 사용하여 출력 캡처<Output>

드디어!

여기에 문서화



2
이것은 Microsoft Build Tools 2013에 의해 설치된 MSBuild 12에서 작동합니다 : microsoft.com/en-us/download/details.aspx?id=40760
alexandrul

1
@AviCherry 댓글이 아닌 답변에 문서 링크를 포함 해 주시겠습니까? TFS Team Build 2012의 컨텍스트에서이 작업을 수행 할 수 있었습니까?
Ryan Gates

3
@AviCherry! ConsoleToMSBuild ConsoleOutput이 Exec 작업 자체에 대한 설명서 ( msdn.microsoft.com/en-us/library/x8zx72cd.aspx )에 누락 된 것은 얼마나 감독입니까?
weir

1
이제 여기에 설명되어 있습니다. docs.microsoft.com/en-us/visualstudio/msbuild/exec-task
Raif Atef

7

나는 MSBuild의 한계와 작동해야하지만 작동하지 않는 것 (적어도 모든 상황에서)에 대해 너무 좌절감을 느끼는 지점에 이르렀습니다. , C #에서 사용자 지정 빌드 작업을 만듭니다.

다른 제안 중 어느 것도 효과가 없다면 확실히 그렇게 할 수 있습니다.


3
내 사용자 지정 작업은 파이썬 스크립트이지만 고통을 느낍니다.
NetworkBurger 2014

이해할 수는 있지만 MSBuild는 정보를 출력 / 오류 콘솔에 파이프하는 구조화 된 방법에 가깝다고 생각합니다. 확실히 배치 파일보다 한 단계 위인 것 같지만
Nate-Wilkins

2
나는 이것이 당신 이이 문제를 겪었을 때부터 트랙 아래로 waaaay라는 것을 알고 있지만 똑같은 일이 일어나 루트 <Project> 요소에 ToolsVersion = "12.0"을 설정하여 해결했습니다 .. 이것이 도움이되기를 바랍니다. :)
Paul Carroll

4

출력 줄이 세미콜론으로 구분되는 일반 문자열이 아닌 배열과 같은 구조로 출력을 캡처하려면 PropertyName 대신 ItemName 을 사용하십시오 .

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

1

말하자면 출력을 파일로 파이프하고 다시 읽을 수 있습니다.

echo test output > somefile.txt
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.