2013-12-12 106 views
0

好找警告,事情是這樣的:自定義工作流活動 - 從生成詳細

我駕駛自己堅果試圖調用CustomActivity時從IBuildDetail對象獲得的警告。

這是我已經試過:

private static List<IBuildInformationNode> GetBuildWarnings(IBuildDetail buildInformation) 
{ 
    var warnings = buildInformation.Information.GetNodesByType(InformationTypes.BuildWarning); 

    if (warnings.Count == 0 && buildInformation.CompilationStatus == BuildPhaseStatus.Succeeded) 
    { 
     buildInformation.RefreshAllDetails(); 
     warnings = buildInformation.Information.GetNodesByType(InformationTypes.BuildWarning); 
    } 
    return warnings; 
} 

這給了我0警告

我也嘗試使用相同的代碼:

var warnings = InformationNodeConverters.GetBuildWarnings(buildInformation); 

仍然帶來任何警告。

這CustomActivity是在工作流結束時被調用:我其實沒有獲取的樣訂做地位其餘的細節的任何問題,構建錯誤,測試信息等

的問題只是與警告

有趣的是,在構建結束時,當我檢查構建結果時,有警告

任何想法?

提前致謝!

+0

你有沒有得到這條底線?我有同樣的問題,這讓我感到非常緊張。 –

回答

0

是否可能發生警告您的自定義活動正在運行。你可以檢查構建日誌並準確查看警告發生的位置嗎?

+0

感謝您的回覆。我可以在msbuild日誌文件中看到警告,它位於我的自定義活動調用之前。 我也在Visual Studio中的Build Details中看到它們,當我雙擊運行構建時,就在Summary中。 另一個數據是我有一個單獨的控制檯,我以編程方式查詢構建定義(超出工作流/客戶端),我得到了相同的結果:沒有警告,其餘的構建細節都沒問題。 – Silvestre

0

buildDetail.Information.GetNodesByType(InformationTypes.BuildWarning)不會返回您要查找的內容,因爲來自跟蹤參與者的消息不會立即刷新。

InformationNodeConverters.GetBuildWarnings內部調用GetNodesByType(),因此它不會出於同樣的原因。

原始信息保存在TrackingParticipant的內部字段中,因此無法訪問。無論如何,如果您等待15秒以上,則來自該內部字段的信息將被刷新到可訪問字段。

因此,醜陋的黑客攻擊,沒有工作似乎是:

System.Threading.Thread.Sleep(16000); 
var trackingParticipant = context.GetExtension<Microsoft.TeamFoundation.Build.Workflow.Tracking.BuildTrackingParticipant>(); 
var warnings = GetWarnings(trackingParticipant.GetActivityTracking(context)); 


    private List<IBuildInformationNode> GetWarnings(IActivityTracking activityTracking){ 
     IBuildInformationNode rootNode = getRootNode(activityTracking.Node); 
     return rootNode.Children.GetNodesByType(InformationTypes.BuildWarning, true); 
    } 

    private IBuildInformationNode getRootNode(IBuildInformationNode node) 
    { 
     while(node.Parent != null) node = node.Parent; 
     return node; 
    } 
相關問題