2013-12-12 6 views
0

Ok, вот вещь:Пользовательского Workflow Activity - получать предупреждение от Строительства Подробнее

Я за руль себя орехами пытаюсь получить ПРЕДУПРЕЖДЕНИЯ от IBuildDetail объекта при вызове CustomActivity.

Это то, что я пробовал:

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

Возможно ли, что предупреждения происходят после Ваша пользовательская деятельность запущена. Можете ли вы просмотреть журнал сборки и посмотреть, где именно происходят предупреждения?

+0

Спасибо, что ответили. Я могу видеть предупреждения в файле журнала msbuild уже, который предшествует моему пользовательскому вызову активности. Я также вижу их в деталях сборки в Visual Studio, когда я дважды нажимаю на строку сборки, прямо в Сводке. Другая информация заключается в том, что у меня есть отдельная консоль, и я запрашиваю определения сборки программным способом (из рабочего процесса/настраиваемого действия), и у меня такой же результат: никаких предупреждений, остальная часть деталей сборки не прекращается. – Silvestre

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; 
    }