2

为了检索哪个变更集包含在哪个 Build 中的信息,我们使用 Team Foundation Sidekicks 的“Label Sidekick”,我们在其中放置 Build 的 Label 并期望找到新构建的 Changeset。

我们在 TFS 2010 中的开发过程正在使用“门控”签入,因此我们面临的情况是 Sidekicks 中没有提供最新签入(我们实际上收到了先前构建的变更集)。这是可以解释的,因为在标记发生时,尚未提交最新的更改。

BuildLog 确实正确报告了关联的变更集。

我在我们的构建过程模板中进行了几次实验,但似乎无法得到我们需要的东西。例如,将 Labeling 活动置于“Run On Agent”范围之外,会导致构建一开始就失败,并显示“对象引用未设置为对象的实例”。(我想这与我必须扩大“标签”和“工作区”变量的范围以使第二部分运行)有关。
此尝试的构建过程模板的“之前”状态在这里(这有效),“之后”状态(“对象引用未设置..”)在这里

因此,总而言之,两种不同类型的输入可以帮助我:

我应该如何更改我们的构建过程模板,以便在提交门控签入进行标记?(——这将使 Sidekicks 中的显示合理化)

或者

如何以编程方式检索每个构建的关联变更集?(——这将使我能够编写一个可以淘汰 Sidekicks 角度的小应用程序)

4

1 回答 1

3

您可以使用 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

于 2011-07-13T00:21:01.517 回答