为了检索哪个变更集包含在哪个Build中的信息,我们使用Team Foundation Sidekicks的"Label Sidekick",在那里我们放置Build的标签&期望找到新构建的变更集。
我们在TFS 2010中的开发过程使用了"Gated"签入,因此我们面临的情况是,Sidekicks中没有显示最新的签入(我们实际上收到了以前版本的变更集)。这是可以解释的,因为在贴标签的时候,还没有做出最新的改变。
BuildLog未正确报告关联的变更集。
我在构建过程模板中做了几个实验,但似乎无法得到我们需要的东西。例如,将Labeling活动置于"Run On Agent"范围之外,会导致构建一开始就失败,并带有"Object reference not set to a instance of a Object"(对象引用未设置为对象实例)。(我想这与我不得不扩大"Label"one_answers"Workspace"变量的范围以运行第二部分有关)
此尝试的生成过程模板的"before"状态在此处(有效),"after"状态("Object ref not set..")在此处。
总之,两种不同类型的输入可以帮助我:
我应该如何更改我们的构建过程模板,以便在提交Gated签入后进行标记?(--这将使Sidekicks中的显示合理化)
或
如何以编程方式检索每个生成的关联变更集?(--这将使我能够编写一个小型应用程序,可以淘汰Sidekicks角度)
您可以使用TFS API来完成这项工作。
public static void GetBuild()
{
var tfs = TfsTeamProjectCollectionFactory.GetTeamProjectCollection(new Uri("http://tfsdevlonuk:8080/tfs/gazprom.mt"), new UICredentialsProvider());
tfs.EnsureAuthenticated();
var buildServer = tfs.GetService<IBuildServer>();
// Get Project Name
var versionControl = tfs.GetService<VersionControlServer>();
var teamProjects = versionControl.GetAllTeamProjects(true);
// Get Builds for a team project
var buildDetails = buildServer.QueryBuilds(teamProjects[0].Name);
// For each build
foreach (IBuildDetail buildDetail in buildDetails)
{
// Get the build details
var buildInfor = buildDetail.Information;
// More build infor like shelveset, etc
Debug.Write(buildDetail.LabelName + buildDetail.ShelvesetName);
}
上面的代码将帮助您以编程方式获得构建详细信息。我有一些关于如何以编程方式连接到tfs并使用tfs-api的博客文章。http://geekswithblogs.net/TarunArora/archive/2011/06/18/tfs-2010-sdk-connecting-to-tfs-2010-programmaticallyndashpart-1.aspx