如何在 TFS 构建中设置 "PreviousBuild" 属性 of AssociateChanges activity

How to set "PreviousBuild" property of AssociateChanges activity in TFS Builds

我想在我们的自定义构建定义(TFS2013 更新 2、VS2013、Git)中使用 Microsoft.TeamFoundation.Build.Activities.AssociateChanges activity。

我想设置此 activity 的 IBuildDetail 类型的 PreviousBuild 属性,以引用特定的 TFS 构建,例如 "CustomBuild_20151007.3"。

问题如何在属性 window[=27] 中设置 AssociateChanges activity 的 PreviousBuild 属性 =](下面的屏幕截图),还是我必须创建自定义构建 activity?

MSDN reference 没有示例代码,到目前为止我只看到 IBuildDetail 是从 CodeActivityContext 中获取的(在 CodeActivity 派生的 类 中)。知道如何实例化它以将其作为 属性 值传递吗?

您需要创建自定义构建 activity 通过 tfs api 传递 IBuildDetail 参数。

来自 MSDN 的 IBuildDetail 接口: https://msdn.microsoft.com/en-us/library/microsoft.teamfoundation.build.client.ibuilddetail(v=vs.120).aspx

关于IBuildDetail的使用,使用IBuildDetail查询构建定义的例子供参考:

class Program
{
    static void Main(string[] args)
    {
        // Auth with UserName & Password (Microsoft Acc):
        //BasicAuthCredential basicCred = new BasicAuthCredential(new NetworkCredential("xxx@hotmail.com", "pw"));
        //TfsClientCredentials tfsCred = new TfsClientCredentials(basicCred);
        //tfsCred.AllowInteractive = false;
        //
        //TfsTeamProjectCollection tfs = new TfsTeamProjectCollection(new Uri("https://code-inside.visualstudio.com/DefaultCollection"), tfsCred);

        TfsTeamProjectCollection tfs = new TfsTeamProjectCollection(new Uri("https://code-inside.visualstudio.com/DefaultCollection"));

        IBuildServer buildServer = (IBuildServer)tfs.GetService(typeof(IBuildServer));

        var builds = buildServer.QueryBuilds("DrinkHub");

        foreach (IBuildDetail build in builds)
        {
            var result = string.Format("Build {0}/{3} {4} - current status {1} - as of {2}",
                build.BuildDefinition.Name,
                build.Status.ToString(),
                build.FinishTime,
                build.LabelName,
                Environment.NewLine);

            System.Console.WriteLine(result);
        }

        // Detailed via http://www.incyclesoftware.com/2012/09/fastest-way-to-get-list-of-builds-using-ibuildserver-querybuilds-2/

        var buildSpec = buildServer.CreateBuildDetailSpec("DrinkHub", "Main.Continuous");
        buildSpec.InformationTypes = null;
        var buildDetails = buildServer.QueryBuilds(buildSpec).Builds;

        Console.WriteLine(buildDetails.First().Status);

        Console.ReadLine();
    }
}