在软件开发过程中,经常需要与版本控制系统进行交互,以管理代码和跟踪项目进度。Microsoft Team Foundation Server (TFS) 是微软提供的一个集成的版本控制和项目管理平台。为了更好地与TFS进行交互,开发者可能会创建一些封装库来简化操作。本文将介绍一个封装了TFS客户端API的库,并展示如何使用这个库。
封装库的创建初衷是为了解决特定问题。在开发测试管理环境Zeta Test时,需要将TFS数据集成到该环境中。Zeta Test允许测试人员和测试经理创建和管理测试用例,管理黑盒测试、白盒测试和回归测试。客户提出了将他们的TFS数据库与Zeta Test连接的需求。在规划增强功能时,希望确保即使没有安装TFS Explorer(连接TFS的客户端运行时)的其他客户端也能使用应用程序。因此,创建了这个封装库,它是唯一引用TFS客户端API库的程序集。
封装库是一个小型的封装,它封装了TFS客户端API的几个函数,这些函数处理工作项跟踪架构。封装库提供了以下主要类: FieldController, FieldDefinitionController, ProjectController, ServerConfiguration, ServerController, StoredQueryController, TfsAllowedValuesCollection, TfsAttachment, TfsAttachmentCollection, TfsField, TfsFieldCollection, TfsFieldDefinition, TfsFieldDefinitionCollection, TfsFieldFilter, TfsFieldFilterList, TfsLink, TfsLinkCollection, TfsProject, TfsProjectCollection, TfsRegisteredLinkType, TfsRegisteredLinkTypeCollection, TfsRevision, TfsRevisionCollection, TfsServer, TfsStoredQuery, TfsStoredQueryCollection, TfsTeamFoundationServer, TfsWorkItem, TfsWorkItemCollection, TfsWorkItemStore, TfsWorkItemType, TfsWorkItemTypeCollection, WorkItemController, WorkItemTypeController。
封装库的使用示例可以在文章顶部的下载中找到。以下是一些典型的使用场景。
var config = new ServerConfiguration {
ServerUrl = @"http://ukeim-js6hkkfzx:8080/"
};
上述代码创建了一个配置类。这通常是连接的第一步。指定所有需要连接的设置。甚至可以指定模拟以在不同的用户上下文中连接(通常具有更高的权限)。
接下来,会创建一个类来连接到服务器,然后创建一个类来连接到某个特定项目:
var serverController = new ServerController(config);
var projectController = new ProjectController(config, serverController.GetAllProjects()[0]);
上述示例创建了一个控制器来连接到服务器。使用这个控制器类,可以枚举所有项目(通过GetAllProjects()方法)。
使用项目控制器类,可以例如查询符合某些条件的一个或多个工作项:
var wis1 = projectController.GetWorkItemsByTitle("Set up");
foreach(var workItem in wis1) {
Console.WriteLine(workItem.Title);
}
也可以像下面这样查询某个字段定义:
var fd1 = projectController.Project.Store.GetFieldDefinition(-3);
var fd2 = projectController.Project.Store.GetFieldDefinition(10004);
var fd3 = projectController.Project.Store.GetFieldDefinition("ID");
var fd4 = projectController.Project.Store.GetFieldDefinition("Issue");
有关更多示例,请参见测试项目的源文件和库本身。
在开始这个项目之前,没有TFS的经验,真的很喜欢使用TFS客户端API的简便性。结构非常文档化,易于理解。实际上,最难的部分是设置TFS本身。最终得到了一个工作的VMware机器,希望永远不需要再次配置。