2012-04-18 9 views
1

ビルドの実行を行うカスタムビルドアクティビティがあります。私たちはカスタムアクティビティを使用します。これは、使用するコンパイラが非常に特殊で、システムがかなり古いため、MSBuildで動作するようにすべてを書き直したくないからです。ただし、リポジトリはTFSによって管理され、ビルドはTFSによってトリガーされます。TFS2010 - カスタムビルドアクティビティ内のログ

カスタムビルドアクティビティでは、ステータスをログに記録します。現在、私はC#のコードのこの作品でこれをやっている:

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時間を要し、それは古いですし、大規模なソフトウェアプロジェクト)。問題は、ログメッセージがビルドアクションが完了した時点でTFSビルドサマリー内にのみ表示されることです。したがって、6時間のビルド後、すべてのログメッセージが一度に表示されます。

私たちが望むものは、メッセージがログに記録されるときに表示されることです。ビルド・ガイはビルドが現在どこにあるかを知ることができ、また何が起こったのかを見ることができます。

これまでに実装した回避策の1つは、カスタムビルドアクティビティにワークフローの基礎部分と共有されるメッセージのキューを使用させることです。その後、ワークフローの基礎の中で、ビルドを実行すると同時にメッセージのキューを空にして表示するパラレル・ステートメントを作成しました。

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 "メッセージを取り除くことができませんでした。それらは2つのwhileループと最も外側のdo-whileループの内部の条件です。それを抑えることも可能ですか? – Christian

1

mtbwt:BuildTrackingParticipant.Importance="Low"/"None"コールを制御するだけです(私は推測します)。代わりにmtbwt:BuildTrackingParticipant.TrackingOption="None"を使用してください。これは、通話中のすべてのトラッキングメッセージを完全に排除しているようです。

関連する問題