自定义工作流活动 - 从构建详细信息中获取警告

时间:2013-12-12 12:56:16

标签: c# build tfs2010 workflow-activity custom-activity

好的,这就是:

在调用 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:我实际上在检索其余详细信息(例如构建状态,构建错误,测试信息等)时没有任何问题。

问题仅在时出现警告

有趣的是,在构建结束时,当我检查构建结果时,有警告

有什么想法吗?

提前致谢!

2 个答案:

答案 0 :(得分:0)

运行自定义活动后,是否可能发生警告。您是否可以检查构建日志并查看警告的确切位置?

答案 1 :(得分: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;
    }