好的,这就是:
在调用 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)
运行自定义活动后,是否可能发生警告。您是否可以检查构建日志并查看警告的确切位置?
答案 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;
}