我有许多基于TFS中的单个分支(例如Main)执行的构建定义。
我想(以某种方式)查询TFS以查找包含我提供的特定变更集编号的所有内部版本,并返回TFS所包含内部版本名称的字符串列表。任何类型的应用程序(VS扩展程序,CLI应用程序,winforms等)都可以。
注意:这不是“请给我代码”的请求;我愿意为此做准备并认真工作。有关如何查询数据库或SDK的文档的任何指针,或有关如何查询内部版本的示例的任何指针;只是一个开始寻找的地方会非常有帮助。谢谢。
最佳答案
以下代码段将抓取集合的所有团队项目的所有构建定义,并将检查每个构建中是否存在与输入变更集编号的关联:
using System;
using System.Linq;
using Microsoft.TeamFoundation.Build.Client;
using Microsoft.TeamFoundation.Client;
using Microsoft.TeamFoundation.VersionControl.Client;
namespace FindChangesetInBuild
{
class Program
{
static void Main(string[] args)
{
TfsTeamProjectCollection teamProjectCollection = TfsTeamProjectCollectionFactory.GetTeamProjectCollection(new Uri("http://tfs:8080/tfs/collectionName"));
var versionControl = teamProjectCollection.GetService<VersionControlServer>();
var buildService = (IBuildServer)teamProjectCollection.GetService(typeof(IBuildServer));
var teamProjects = versionControl.GetAllTeamProjects(true);
foreach (var teamProject in teamProjects)
{
var buildDefinitions = buildService.QueryBuildDefinitions(teamProject.Name);
foreach (var buildDefinition in buildDefinitions)
{
var builds = buildService.QueryBuilds(buildDefinition);
foreach (var buildDetail in builds)
{
var changesets = InformationNodeConverters.GetAssociatedChangesets(buildDetail);
if (changesets.Any(changesetSummary => changesetSummary.ChangesetId == Convert.ToInt32(args[0])))
{
Console.WriteLine("Changeset was build in "+buildDetail.BuildNumber);
}
}
}
}
}
}
}
不用说,这是蛮力攻击。如果您缩小
buildDefinition
的范围,专注于特定的teamProjects
等,则可以进一步优化代码。无论如何,我几乎无法想象上面的代码是有用的! Soji Raiten的MSDN是(显然)blog的TFS-SDK的一个很好的资源。
关于build - TFS : Query for builds containing a specific changeset,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10019522/