【问题标题】:Removing iteration in VSTS/TFS using Microsoft.TeamFoundation.Client使用 Microsoft.TeamFoundation.Client 删除 VSTS/TFS 中的迭代
【发布时间】:2018-12-04 03:31:40
【问题描述】:

我使用此代码以编程方式在 VSTS/TFS 上创建新迭代:

var tfs = new TfsTeamProjectCollection(uri, tfsCredential);
var service = tfs.GetService<ICommonStructureService>();
var iterationRoot = service.GetNodeFromPath("\\TeamProjectName\\Iteration");
var iteration = service.CreateNode("Sprint 1", iterationRoot.Uri);

现在我想删除一个迭代,但ICommonStructureService 上没有对应的方法。奇怪的是有一个名为GetDeletedNodesXml()的方法。

【问题讨论】:

  • 根据this (rather old) blog post"如何删除区域(或迭代)?首先,您需要获取区域/迭代的URI(在文章开头有介绍)。下一个,您需要调用 ICommonStructureService 的 DeleteBranches 方法。” 但接着说第二个参数传递什么并不明显。
  • @stuartd 第二个参数必须是迭代的路径,如果有的话,它应该应用于已删除迭代中的所有项目。它仍然无法抱怨格式错误的 URI。即使用 VersionControlPath.GetFullPath() 包裹 Uri 也行不通。发现这个:stackoverflow.com/questions/14833083/… 似乎可以工作(那里有安全问题)。

标签: c# tfs azure-devops tfs-sdk


【解决方案1】:

我明白了!我在这里假设您有一些方法来检索迭代。

var tfs = new TfsTeamProjectCollection(uri, tfsCredential);
var service = tfs.GetService<ICommonStructureService>();
// TODO var iteration = GetIteration();    
var projectInfo = service.GetProjectFromName(projectName)
var nodes = service.ListStructures(projectInfo.Uri);
service.DeleteBranches(iteration.Id, nodes[0].Uri);

关键是传入 ID 而不是路径。 TFS 想要检索表示为 Id 的工件 URL。 DeleteBranches 的第二个参数是迭代根的工件 URL,它是通过调用 ICommonStructureServiceListStructures 并在那里获取第一个元素获得的(恕我直言,这有点讨厌,但我不知道更好方式)。

【讨论】:

    猜你喜欢
    • 2017-10-22
    • 1970-01-01
    • 1970-01-01
    • 2010-10-16
    • 2018-01-14
    • 2018-06-11
    • 2013-12-20
    • 2018-05-24
    • 2019-04-21
    相关资源
    最近更新 更多