首先我们需要认识TFS二次开发的两大获取服务对象的类。
他们分别为class="sentence" data-source="TfsConfigurationServer" data-guid="9e785b49000fb94451333d1445d3d9df">TfsConfigurationServer和TeamProjectCollection" data-guid="07eae48e68f9762010706d9db8236b2a">TfsTeamProjectCollection,他们的不同点在于可以获取不同的TFS API服务类。他们的区别如下:
Service" data-guid="aaabf0d39951f3e6c3e8a7911df524c2">服务
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文件。