如何从 TFS 2017 中的构建中获取关联的变更集?

How to get associated changesets from build in TFS 2017?

使用 c#,我之前能够在使用 InformationNodeConverters.GetAssociatedChangesets(IBuildDetail) 的 XAML 构建过程中从 TFS 2012 获取关联的变更集。我从 CodeActivityContext.GetExtension<IBuildDetail>() 获得了 IBuildDetail。

现在我正在使用 TFS 2017 构建过程,我正在尝试使用下面的代码做一些类似的事情,但它没有返回变更集。

var teamProjectCollection = TfsTeamProjectCollectionFactory.GetTeamProjectCollection(new Uri("http://ourtfsserver:8080/tfs/DefaultCollection"));
var versionControlServer = teamProjectCollection.GetService<VersionControlServer>();
var buildServer = teamProjectCollection.GetService<IBuildServer>();
var build = buildServer.GetBuild(new Uri(string.Format("vstfs:///Build/Build/{0}", "3807")));
var changeSets = InformationNodeConverters.GetAssociatedChangesets(build);

以上所有似乎都有效,并且构建成功返回,但 changeSets.Count() 为 0,而实际上应该返回一些变更集。

是否有对上述代码的更改建议,或其他方法?还是这在 TFS 2017 中不再有效?

Microsoft 正在更新 TFS 以使用 REST API。我想 this REST API call 会得到你想要的。

这是 .NET client libraries 的 link 用于进行 REST 调用。

此外,如果您还不知道,Microsoft 正在弃用 XAML 版本。有关详细信息,请参阅 this blog post

我能够通过使用我认为是 REST 的包装器来做到这一点 API:Microsoft.TeamFoundation.Build2.WebApi.dll

参见:https://social.msdn.microsoft.com/Forums/vstudio/en-US/838da6a7-1dea-4d61-aaad-b789e23c64f2/how-to-get-associated-changesets-from-build-in-tfs-2017?forum=tfsgeneral

using Microsoft.TeamFoundation.Build.WebApi;
using Microsoft.VisualStudio.Services.Common;
using Microsoft.VisualStudio.Services.WebApi;
using System;
using System.Net;

var u = new Uri("http://ourtfsserver:8080/tfs/DefaultCollection/");
var c = new VssCredentials(new Microsoft.VisualStudio.Services.Common.WindowsCredential(new NetworkCredential("username", "password", "domain")));
var connection = new VssConnection(u, c);
var buildServer = connection.GetClient<BuildHttpClient>();
var changesets = buildServer.GetBuildChangesAsync("projectname", 3807).Result;