0

好的,事情是这样的:

在调用CustomActivity时,我试图从IBuildDetail对象中获取 WARNINGS 让自己发疯。

这是我尝试过的:

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 WARNINGS

我也尝试过使用相同的代码:

var warnings = InformationNodeConverters.GetBuildWarnings(buildInformation);

仍然没有警告。

这个 CustomActivity 在工作流结束时被调用:实际上我在检索构建状态、构建错误、测试信息等其余详细信息时没有任何问题。

问题仅与警告有关

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

有任何想法吗?

提前致谢!

4

2 回答 2

0

Is it possible that the warnings are happening after your custom activity is run. Can you examine the build log and see exactly where the warnings occur?

于 2013-12-12T16:29:12.210 回答
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;
    }
于 2016-08-03T09:42:25.130 回答