首先我们需要认识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文件。

TFS二次开发系列:三、TFS二次开发的第一个实例的更多相关文章

  1. BizTalk开发系列(三十二)浅谈BizTalk主机性能优化

    很多BizTalk的项目都要考虑到性能优化的问题,虽然BizTalk采用多线程处理消息的,大大提高了程序效率.但默认情况下 BizTalk的主机有很多阻止参数会控制BizTalk对服务器的资源使用率, ...

  2. 微信程序开发系列教程(二)使用JavaScript给微信用户发送消息

    我之前的文章 微信程序开发系列教程(一)开发环境搭建 介绍了微信开发环境的搭建,这篇文章我们就来一步步开发一些具体的功能. 功能需求:当有微信用户关注了您的公众号之后,您用JavaScript发送一个 ...

  3. S5PV210开发系列三_简易Bootloader的实现

    S5PV210开发系列三 简易Bootloader的实现 象棋小子          1048272975 Bootloader是嵌入式系统上电后第一段运行的代码.对于功能简单的处理器,可能并没有Bo ...

  4. Docker & k8s 系列三:在k8s中部署单个服务实例

    本章将会讲解: pod的概念,以及如何向k8s中部署一个单体应用实例. 在上面的篇幅中,我们了解了docker,并制作.运行了docker镜像,然后将镜像发布至中央仓库了.然后又搭建了本机的k8s环境 ...

  5. 《C#微信开发系列(Top)-微信开发完整学习路线》

    年前就答应要将微信开发的学习路线整理给到大家,但是因为年后回来这段时间学校还有公司那边有很多事情需要兼顾,所以没能及时更新文章.今天特地花时间整理了下,话不多说,上图,希望对大家的学习有所帮助哈. 如 ...

  6. Java开发学习(三十二)----Maven多环境配置切换与跳过测试的三种方式

    一.多环境开发 我们平常都是在自己的开发环境进行开发, 当开发完成后,需要把开发的功能部署到测试环境供测试人员进行测试使用, 等测试人员测试通过后,我们会将项目部署到生成环境上线使用. 这个时候就有一 ...

  7. 【Qt程序】基于Qt词典开发系列&lt;十二&gt;呼叫讲述

    我们知道,win7系统自带有讲述人,即能够机器读出当前内容,详细能够将电脑锁定.然后点击左下角的button就可以.之前在用Matlab写扫雷游戏的时候,也以前调用过讲述人来进行游戏的语音提示. 详细 ...

  8. Windows下USB磁盘开发系列三:枚举系统中U盘、并获取其设备信息

    前面我们介绍了枚举系统中的U盘盘符(见<Windows下USB磁盘开发系列一:枚举系统中U盘的盘符>).以及获取USB设备的信息(见<Windows下USB磁盘开发系列二:枚举系统中 ...

  9. BizTalk 开发系列(三十九) BizTalk Server 2009技术概览

    BizTalk Server 2009已经发布一段时间了,之前Beta版发布的时候也写过一篇文章<BizTalk Server 2009 Beta初体验>, 当时比较了2006 R2与20 ...

  10. BizTalk开发系列(三十三)BizTalk之Excel终极解决方案

    Excel作为优秀的客户端数据处理程序得到了广泛的应用. 由于其简单又强大的功能在很多公司或个人的数据处理中占用非常重要的位置. 而BizTalk作为微软的SOA主打产品虽然免费提供了很多Adapte ...

随机推荐

  1. 浅谈js命名空间管理

    在C# 和 Java里面我们如果想使用哪一个功能类就要引用相应的命名空间. 如C#里面有个System.Web.UI库,我们就要用using   System.Web.UI;,之后我们就可以用到Scr ...

  2. C#时间戳转时间-时间转时间戳

    /// <summary> /// 时间戳转为C#格式时间 /// </summary> /// <param name=”timeStamp”></para ...

  3. Linux -- CentOS7修改防护墙端口

    CentOS升级到7之后,发现无法使用iptables控制Linuxs的端口,原因是Centos 7使用firewalld代替了原来的iptables.下面记录如何使用firewalld开放Linux ...

  4. Linux任务调度进程crontab的使用方法和注意事项

    参考文章:Linux任务调度进程crond命令的使用方法和注意事项 一.crond简介 概念 crond的概念和crontab是不可分割的.crontab是一个命令,常见于Unix和类Unix的操作系 ...

  5. bzoj1189

    1189: [HNOI2007]紧急疏散evacuate Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 2321  Solved: 724[Submi ...

  6. 教你一招:win 7 或win 10右键菜单 添加获取管理员权限

    当我们从经典的 windows XP 系统升级到 win 7 或 win 10,我们会发现,想要删除一些文件时,总是提示被占用或者是没有权限,很是烦恼. 这里,写下解决这个烦恼的办法,以安慰心里的不平 ...

  7. windows下cmd记录MYSQL操作

    我们在cmd下操作MYSQL,当需要复制某条命令的时候,需要右键标记,然后选取,然后......各种不方便! 有没有比较方便的方式,可以将我们的操作记录自动的实时保存下来,当我们需要操作的时候,可以高 ...

  8. qthread 使用 signal 方法通信

    因为之间尝试过的 signal 机制,都是在 emit singnal_my() 的地方,直接调用了 slot 函数:相当于,slot 只是一个回调函数. 所以,在这里有点困惑,如果是要顺序执行完 s ...

  9. 使用 Eclipse 调试 Java 程序的 10 个技巧

    你应该看过一些如<关于调试的N件事>这类很流行的帖子 .假设我每天花费1小时在调试我的应用程序上的话,那累积起来的话也是很大量的时间.由于这个原因,用这些时间来重视并了解所有使我们调试更方 ...

  10. group by 查询分组后 组的条数

    比如select gid from table group by gid 查询时使用下面的方法查询条数 select count(distinct gid) from table 使用select c ...