Я знаю, что это старый пост, но я копался в поисках того, как этого добиться, в течение многих часов, и я подумал, что кто-то еще может извлечь пользу из того, что я собрал. Я работаю с TFS 2013, и это было скомпилировано из нескольких разных источников. Я знаю, что я не помню их всех на данный момент, но основные из которых:
Получение связанных наборов изменений из сборки
Поставить в очередь командную сборку из другого и передать параметры
Чего мне не хватало в большинстве статей, которые я нашел по этому вопросу, так это о том, как взять подробности сборки и загрузить соответствующие наборы изменений или рабочие элементы. Класс InformationNodeConverters был отсутствующим ключом для этого и позволяет вам получать и другие элементы. После этого я смог придумать следующий код, который довольно прост.
Обратите внимание, что если вы запускаете это из сценария PowerShell после сборки, вы можете использовать переменную TF_BUILD_BUILDURI. Я также включил код, который придумал, чтобы взять извлеченные сводные данные и загрузить фактический элемент.
using System;
using System.Collections.Generic;
using System.Linq;
using Microsoft.TeamFoundation.Build.Client;
using Microsoft.TeamFoundation.Client;
using Microsoft.TeamFoundation.VersionControl.Client;
using Microsoft.TeamFoundation.WorkItemTracking.Client;
namespace Sample
{
class BuildSample
{
public void LoadBuildAssociatedDetails(Uri tpcUri, Uri buildUri)
{
TfsTeamProjectCollection collection = new TfsTeamProjectCollection(tpcUri);
IBuildServer buildServer = collection.GetService<IBuildServer>();
IBuildDetail buildDetail = buildServer.GetAllBuildDetails(buildUri);
List<IChangesetSummary> changeSets = InformationNodeConverters.GetAssociatedChangesets(buildDetail);
VersionControlServer vcs = collection.GetService<VersionControlServer>();
IEnumerable<Changeset> actualChangeSets = changeSets.Select(x => vcs.GetChangeset(x.ChangesetId));
List<IWorkItemSummary> workItems = InformationNodeConverters.GetAssociatedWorkItems(buildDetail);
WorkItemStore wis = collection.GetService<WorkItemStore>();
IEnumerable<WorkItem> actualWorkItems = workItems.Select(x => wis.GetWorkItem(x.WorkItemId));
}
}
}