如何获得所有Area Paths TFS API 2013

时间:2016-08-25 15:01:08

标签: c# .net tfs

我正在尝试创建一个使用TFS的实用程序,我有一个问题:如何获得项目中所有可能的区域路径?

我找到了2010年的一些信息:http://geekswithblogs.net/TarunArora/archive/2011/07/10/tfs-2010-sdk-get-projects-iterations-area-path-queries-and.aspx

   foreach (Node area in project.AreaRootNodes)
   {
          lstAreaPath.Items.Add(area.Name);

          foreach (Node item in area.ChildNodes)
          {
              lstAreaPath.Items.Add(item.Name);
          }
    }

但它没有用,因为我的项目中没有AreaRootNodes属性。 我怎样才能获得项目中的所有区域路径?

2 个答案:

答案 0 :(得分:2)

感谢Daniel的想法

正确的代码:

var wis = (WorkItemStore)Connection.ProjectCollection.GetService(typeof(WorkItemStore));
var pj = wis.Projects.Cast<Project>().FirstOrDefault(x => x.Name == projectName);
if (pj == null)
    return new List<string>();

foreach (Node area in pj.AreaRootNodes)
{
    resultList.Add(area.Path);
    resultList.AddRange(from Node item in area.ChildNodes select item.Path);
}

答案 1 :(得分:0)

我对你没有包含的周围代码做了一个假设,但我很确定我是对的。

以下是假设:您通过迭代ProjectCollection类的实例来获取项目。这是一个旧的pre-generics集合,因此其中的所有内容都属于object类型。将您的project实例投射到Microsoft.TeamFoundation.WorkItemTracking.Client.Project

例如:

var wis = x.GetClient<WorkItemStore>();
foreach (var project in wis.Projects.Cast<Project>())
{
   // Your code here
}

对于它的价值,即使在IDE中,这种类型的问题也很容易解决。如果属性不存在,代码将无法编译,因此您可以鼠标悬停实例并查看它认为的类型。