我在通过TFS API从Visual Studio Online项目中检索构建信息时遇到了问题。我可以连接到该项目,并找到了预期的团队项目集合和团队项目,但是尽管项目有两个构建定义和多个构建,当查询构建定义或构建时,TFS API总是返回零长度数组。该项目是一个Git项目。我的生产代码类似于我编写的此测试代码,以尝试调试问题:
var tfsUri = new Uri("https://[my project].visualstudio.com");
var tcs = new TfsConfigurationServer(tfsUri);
var teamProjCollections = tcs
.CatalogNode
.QueryChildren(
new[] { CatalogResourceTypes.ProjectCollection },
false,
CatalogQueryOptions.None)
.Select(collectionNode => new Guid(collectionNode.Resource.Properties["InstanceId"]))
.Select(collectionId => tcs.GetTeamProjectCollection(collectionId));
var tpc = teamProjCollections
.Single(x => x.Name == @"[my project].visualstudio.com\DefaultCollection");
var newTeamProjects = tpc
.CatalogNode
.QueryChildren(
new[] { CatalogResourceTypes.TeamProject },
false,
CatalogQueryOptions.None);
var tp = newTeamProjects
.Single(x => x.Resource.DisplayName == "[team project name]");
var buildServer = tpc.GetService<IBuildServer>();
var buildDefinitions = buildServer.QueryBuildDefinitions(tp.Resource.DisplayName);
buildDefinitions
始终为空数组。构建定义肯定存在-我可以使用Visual Studio连接到项目,并在团队资源管理器的“生成”选项卡中显示它们。这段代码过去曾经为我工作过,但是我连接到的总是TFVC项目,而不是Git项目。有趣的是,如果我使用来自团队项目集合的VersionControlServer
,就像这样:
var vcs = tpc.GetService<VersionControlServer>();
var teamProjects = vcs.GetAllTeamProjects(true);
..teamProjects
总是一个长度为零的数组。
另外,如果我尝试通过指定非常通用的构建细节规范来获取团队项目集合中的所有构建,则不会返回任何构建。
一些额外的信息:我正在使用VS Enterprise 2015 RC。我是VSO项目的管理员,并创建了团队项目集合、团队项目和构建定义。我推送了一些代码并运行了一些构建。当通过API连接时,我以自己的身份登录。我的凭据似乎是正确的。
因此,在尝试弄清楚这个问题时,我有一些问题。我需要不同的方法来访问Git存储库吗?也许只能通过新的TFS 2015 REST API实现?也许我需要让我的构建在VSO项目中对自己“可见”?
GetDefinitionsAsync()
接受那样的参数。它有很多参数和重载,我不理解,例如name, repositoryId
等等。 - Prof. Falken