是否可以获取项目集合中所有工作项类型的列表?

Is it possible to get the list of all Workitem Types in a Project collection?

我正在尝试从 project collection 中获取所有 workitem types 的列表,而无需访问 project collection 中的 project

我已经试过了

我可以使用 project 对象获取所有 workitemType 列表的列表,如下代码所示:

 TfsTeamProjectCollection tfctc = new TfsTeamProjectCollection(newUri
            ("http://servername:8080/tfs/teamprojectcollection"));
 WorkItemStore wis = tfctc.GetService<WorkItemStore>();

 foreach(Project project in wis.Projects)
 {               
   foreach (WorkItemType type in project.WorkItemTypes)
   {
     Console.WriteLine(type.Name);
   }
 }

通过搜索 WorkitemType 的列表,我在 TFS 中知道一个 class 作为 WorkItemTypeCollection

但是在使用它时我无法使用 projectCollection.

获得 workitemcollection 的对象

我已尝试使用以下代码:

 TfsTeamProjectCollection tfctc = new TfsTeamProjectCollection(newUri
            ("http://servername:8080/tfs/teamprojectcollection"));
 WorkItemTypeCollection witc = tfctc.GetService<WorkItemTypeCollection>(); // here I am getting nil object every time
// some more code          

我想做什么

我想在 projectcollection.

中获取 WorkItemTypes 的列表

谁能帮我解决这个问题? 如果我错了任何地方,请纠正我。 提前致谢。

工作项类型与团队项目相关联,因此您只能获取团队项目的工作项类型。这背后的原因是每个团队项目可以有不同的工作项类型集。即使您发现多个类型名称相同,例如"Task" 或 "Bug",每个团队项目可能已修改其定义。因此,从本质上讲,所有团队项目的组合工作项类型就是团队项目集合的工作项类型。

您找到的 WorkItemTypeCollection class 实际上是 WorkItemType 个实例的容器。您已经使用的Project.WorkItemTypes 属性 returns 一个您可以迭代的WorkItemTypeCollection。但是,此类型未注册为服务 - 这就是为什么 tfctc.GetService<WorkItemTypeCollection>() returns null.

因此,您在示例中的嵌套 foreach 中所做的实际上就是它的工作原理。您可以使用 LINQ 和 SelectMany 对其进行优化,仅此而已:

var workItemTypes = wis.Projects
                       .Cast<Project>()
                       .SelectMany(p => p.WorkItemTypes.Cast<WorkItemType>())
                       .ToArray();