2012-04-18 7 views
1

우리는 빌드의 실행을 수행하는 사용자 지정 빌드 활동이 있습니다. 우리가 사용하는 컴파일러는 매우 특별하고 시스템이 꽤 오래 되었기 때문에 MSBuild와 함께 작동하도록 모든 것을 다시 작성하기를 원하지 않기 때문에 우리는 사용자 정의 액티비티를 사용합니다. 그러나 저장소는 TFS에 의해 관리되며 빌드는 TFS에 의해 트리거됩니다.TFS2010 - 사용자 지정 빌드 활동 내에서 로깅

사용자 지정 빌드 작업 내에서 상태를 기록하고 싶습니다. 그것은 작동

private void LogMessage(String message, CodeActivityContext context) 
     { 
      BuildInformationRecord<BuildMessage> record = 
      new BuildInformationRecord<BuildMessage>() 
      { 
       Value = new BuildMessage() 
        { 
         Importance = BuildMessageImportance.High, 
         Message = message, 
        }, 
      }; 

      context.Track(record); 
     } 

, 그러나 하나의 큰 문제가 : 우리의 사용자 지정 빌드 활동은 내가 말했듯이, 그것은 옛날이고 (실행을위한 약 6 시간이 소요 현재, 나는 C# 코드의 조각이 일을 해요 또한 대규모 소프트웨어 프로젝트). 문제는 빌드 작업이 완료되면 로그 메시지가 TFS 빌드 요약에만 표시된다는 것입니다. 따라서 6 시간이 지나면 모든 로그 메시지가 즉시 나타납니다.

우리가 원하는 것은 메시지가 기록 될 때 메시지가 표시된다는 것입니다. 빌드 녀석은 빌드가 현재 어디에 있는지 알 수 있고 또한 무슨 일이 일어 났는지 볼 수 있습니다.

지금까지 구현 한 해결 방법 중 하나는 사용자 지정 빌드 작업에서 워크 플로 기반 부분과 공유되는 메시지 대기열을 사용하는 것입니다. 그런 다음 워크 플로 기반 내부에서 빌드를 실행하고 동시에 메시지 큐를 비우고 표시하는 병렬 문을 만들었습니다.

enter image description here

그러나, 결과는 매우 실망 : 여기에 그 구조의 스크린 샷이다. 이 나오는 것입니다 :

enter image description here

빨간 하나가 주위 모든 것이 while 루프와 다른 것들이며, 실제 빌드 로그 메시지입니다 ...

이 가능한 사람들을 전환하는 것입니다 메시지를 로그 오프 하시겠습니까?

답변

4

당신은 메시지 억제하는 빌드 프로세스 템플릿 XAML (디자이너를 통해 수행 할 수 없습니다)에서 다음 속성을 설정하려고 할 수 있습니다 : 내 템플릿에서

mtbwt:BuildTrackingParticipant.Importance="None" 

예 :

<InvokeMethod DisplayName="Delete File" mtbwt:BuildTrackingParticipant.Importance="None" ... /> 
+0

감사합니다. 꽤 괜찮 았습니다. "While"및 "Sequence"메시지를 제거했지만 "VisualBasicValue "메시지를 제거 할 수 없습니다. 두 개의 while 루프와 가장 바깥 쪽 do-while 루프 내부의 조건입니다. 그것들을 억압 할 수 있습니까? – Christian

1

mtbwt:BuildTrackingParticipant.Importance="Low"/"None"을 단지 통화를 제어합니다 (아마도). 대신 mtbwt:BuildTrackingParticipant.TrackingOption="None"을 사용하십시오. 그러면 통화중인 모든 추적 메시지가 완전히 삭제 된 것처럼 보입니다.

관련 문제