首页 > 解决方案 > 使用 C# 和 Microsoft.TeamFoundationServer.Client 将代码签入到 TFS 2017

问题描述

我们有一套程序(服务插件),它们都依赖于内部 NuGet 包的复杂层次结构,这些程序是用 C# 编写的,并保存在 TFS 2017 中,并通过 CI 构建来维护这些包。

我想编写一个实用程序,使我能够签入更改,然后启动一系列自动编辑、签入和构建以自动更新和重建套件。另一种选择是一整天的签出/更新包/签入/合并/签入,冲洗和重复(是的,架构已尽可能优化!)。

自动依赖关系确定和编辑部分很容易,但我很难找到任何体面的文档和/或代码示例,用于使用 C# 和 Microsoft.TeamFoundationServer.Client (等)获取和签入代码 - 所有示例和 doco。到目前为止,我发现要么非常过时(2012 年),要么只处理阅读内容、工作项、报告等,而不是更新存储库中的代码。

我有一段来自 2010 年博客的代码,它可以工作,但我不愿重新调整它的用途,因为它已经过时并且使用了已弃用的 API。

谁能指点我一些像样的doco。或使用 C# 和 2017 以编程方式签入的示例。

标签: c#tfscontinuous-integrationtfs-sdk

解决方案


我最近做了这个(使用TFS 2017),不知道是不是你在博客中看到的方法,反正我有这个优秀的作品。

  • 创建工作区:

    // Connect to TFS
    TfsTeamProjectCollection _tfs = new TfsTeamProjectCollection(new Uri(tfsUrl));
    VersionControlServer _sourceControl = (VersionControlServer)_tfs.GetService(typeof(VersionControlServer));
    // Create workspace
    Workspace _workSpace = _sourceControl.CreateWorkspace("test");
    
  • 将文件添加到“待更改”

    //Copy the files to the workspace
    File.Copy(_filePath, _testWorkSpacePath, true);
    // Add the files to Pending Changes
    _workSpace.PendAdd(_testWorkSpacePath);
    // Get the conflicts
    var conflitcs =_workSpace.QueryConflicts(new string[] { _workSpaceFilePath }, true);
    // Resolve the conflitcs
    foreach (Conflict conflict in conflitcs)
    {
         conflict.Resolution = Resolution.AcceptYours;
         _workSpace.ResolveConflict(conflict);
    }
    
  • 报到

    var pending = _workSpace.GetPendingChanges();
    _workSpace.CheckIn(pending, comment);
    

当然,用try和包裹每个步骤是好的catch


推荐阅读