如何通过策略覆盖以编程方式在TFS中签入代码?

时间:2013-11-21 13:38:21

标签: c# .net tfs

我正在尝试从TFS存储库的一部分中的c#程序中签入代码,该程序将触发门控签入构建以及持续集成构建。
到目前为止,这是我的代码:

    public static void Checkin(string path, string comment)
    {
        var wsInfo = Workstation.Current.GetLocalWorkspaceInfo(path);
        var tfs = TfsTeamProjectCollectionFactory.GetTeamProjectCollection(wsInfo.ServerUri);
        tfs.Connect(ConnectOptions.None);   

        var vcs = tfs.GetService<VersionControlServer>();
        var ws = vcs.GetWorkspace(path);

        var fullPath = Path.GetFullPath(path);
        var change = ws.GetPendingChangesEnumerable().Where(p => p.LocalItem == fullPath).ToArray();

        ws.CheckIn(change.ToArray(), comment);

        tfs.Dispose();
    }

基本上发生的是我得到一个GatedCheckinException,说有一个受影响的构建定义。 我想用通常已知的旁路进行检查,以避免触发门控检查。我一直在努力使用替换Checkin函数而没有成功
有什么想法吗?

更新 感谢Aghilas Yakoub的链接。 为了完整起见,以下是使用覆盖功能进行签入的代码:

var wip = new WorkspaceCheckInParameters(change, comment)
{
    OverrideGatedCheckIn = ((CheckInOptions2)vcs.SupportedFeatures & CheckInOptions2.OverrideGatedCheckIn) == CheckInOptions2.OverrideGatedCheckIn,
    PolicyOverride = new PolicyOverrideInfo("Check-in from the build.", null)
};

ws.CheckIn(wip);

1 个答案:

答案 0 :(得分:2)