TFS二次开发系列:三、TFS二次开发的第一个实例

  首先我们需要认识TFS二次开发的两大获取服务对象的类。

  他们分别为TfsConfigurationServer和TfsTeamProjectCollection,他们的不同点在于可以获取不同的TFS API服务类。他们的区别如下:

 

服务

TfsConfigurationServer

(服务器级别)

TfsTeamProjectCollection

(集合级别)

ITeamFoundationRegistry

选中标记

选中标记

IIdentityManagementService

选中标记

选中标记

ITeamFoundationJobService

选中标记

选中标记

IPropertyService

选中标记

选中标记

IEventService

选中标记

选中标记

ISecurityService

选中标记

选中标记

ILocationService

选中标记

选中标记

TswaClientHyperlinkService

选中标记

选中标记

ITeamProjectCollectionService

选中标记

 

IAdministrationService

选中标记

选中标记

ICatalogService

选中标记

 

VersionControlServer

 

选中标记

WorkItemStore

 

选中标记

IBuildServer

 

选中标记

ITestManagementService

 

选中标记

ILinking

 

选中标记

ICommonStructureService3

 

选中标记

IServerStatusService

 

选中标记

IProcessTemplates

 

选中标记

   基本上我们可以通过上面两个类对TFS操作所有功能点。下面我们先看看如何使用TfsTeamProjectCollection获取特定团队集合下的所有项目,并且打印出项目名称。

 //取出团队集合URI下的项目名称,如果团队集合为空则取默认集合下项目
            //Uri tfsUri = new Uri("http://pc-20130113jkun:8080/tfs/Calueng");这种将会Calueng团队集合下项目
            Uri tfsUri = new Uri("http://pc-20130113jkun:8080/tfs");
            TfsTeamProjectCollection server = new TfsTeamProjectCollection(tfsUri);
            WorkItemStore workstore = server.GetService<WorkItemStore>();
            foreach (Project project in workstore.Projects)
            {
                Console.WriteLine("DefaultCollection集合下项目名称是:" + project.Name);
            }
            Console.WriteLine("---------------------------------------------------------------");

  下面的例子将获取我们整个TFS服务器的所有团队集合以及团队集合下的所有团队名称

           //TFS配置服务获取所有项目的名称和所有的团队集合名称
            TfsConfigurationServer configserver = TfsConfigurationServerFactory.GetConfigurationServer(tfsUri);
            ReadOnlyCollection<CatalogNode> collectNodes =
                configserver.CatalogNode.QueryChildren(new[] { CatalogResourceTypes.ProjectCollection },
                false, CatalogQueryOptions.None);
            foreach (CatalogNode collect in collectNodes)
            {
                Guid collectid = new Guid(collect.Resource.Properties["InstanceId"]);
                TfsTeamProjectCollection teamproject = configserver.GetTeamProjectCollection(collectid);
                Console.WriteLine("团队集合名称: " + teamproject.Name);
                ReadOnlyCollection<CatalogNode> projNodes = collect.QueryChildren(new[] { CatalogResourceTypes.TeamProject }, 
false, CatalogQueryOptions.None); foreach (CatalogNode projnode in projNodes) { Console.WriteLine(" 团队项目名称:" + projnode.Resource.DisplayName); } } Console.ReadLine();

  最后本实例使用VS2012+TFS2012编写。如需源码请点击 TFSTest1.rar 下载。当然你需要引入TFS的一些API DLL文件。

posted @ 2013-07-23 11:26  程兴亮  阅读(7441)  评论(7编辑  收藏