C# 自定义工作流活动-从生成详细信息获取警告

C# 自定义工作流活动-从生成详细信息获取警告,c#,build,workflow-activity,custom-activity,C#,Build,Workflow Activity,Custom Activity,好的,事情是这样的: 调用CustomActivity时,我试图从IBuildDetail对象获取警告,这让我发疯 这就是我尝试过的: private static List<IBuildInformationNode> GetBuildWarnings(IBuildDetail buildInformation) { var warnings = buildInformation.Information.GetNodesByType(InformationTypes.Bui

好的,事情是这样的:

调用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;
}
这仍然没有带来任何警告

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

该问题仅在出现警告时才出现

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

有什么想法吗


提前谢谢

是否可能在运行自定义活动后发生警告。您可以检查生成日志并查看警告出现的确切位置吗?

buildDetail.Information.getNodeByType(InformationTypes.BuildWarning)不会返回您正在查找的内容,因为来自跟踪参与者的消息不会立即刷新

InformationNodeConverters.GetBuildWarnings在内部调用GetNodeByType(),因此出于同样的原因,它将无法工作

原始信息保存在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;
    }
System.Threading.Thread.Sleep(16000);
var trackingParticipant=context.GetExtension();
var warnings=GetWarnings(trackingParticipant.GetActivityTracking(context));
私有列表GetWarnings(IActivityTracking activityTracking){
IBuildInformationNode rootNode=getRootNode(activityTracking.Node);
返回rootNode.Children.GetNodesByType(InformationTypes.BuildWarning,true);
}
私有IBuildInformationNode getRootNode(IBuildInformationNode节点)
{
而(node.Parent!=null)node=node.Parent;
返回节点;
}

感谢您的回复。我已经可以在msbuild日志文件中看到警告,该文件位于自定义活动调用之前。我还可以在VisualStudio的构建详细信息中看到它们,当我双击摘要中的运行构建时。另一个数据是,我有一个单独的控制台,我以编程方式查询构建定义(在workflow/customactivity之外),我得到了相同的结果:没有警告,其余的构建详细信息都很好。你有没有了解过这一点?我也有同样的问题,这让我发疯。
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;
    }