我正在尝试创建一个使用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属性。 我怎样才能获得项目中的所有区域路径?
答案 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中,这种类型的问题也很容易解决。如果属性不存在,代码将无法编译,因此您可以鼠标悬停实例并查看它认为的类型。