C# 自定义工作流活动-从生成详细信息获取警告
好的,事情是这样的: 调用CustomActivity时,我试图从IBuildDetail对象获取警告,这让我发疯 这就是我尝试过的: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
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;
}