从控制台应用程序连接到 Team Foundation Server
可以通过编程方式连接到运行 Team Foundation 然后访问该服务器的团队项目的服务器,如果使用下面的示例。如果修改该示例,您可以使用 Getting Additional Team Foundation Services 本主题后面介绍的服务。,因为 Acting on Behalf of Another User (Impersonation) 本主题后,描述使用模拟,则可以代表其他还操作。
主题内容
示例
您可以列出团队项目集合,并且该团队项目所包含,如果使用下面的示例。
使用此示例
创建一个C#控制台应用程序。
添加对下列程序集的引用:
说明 如果Microsoft.TeamFoundation.Client和Microsoft.TeamFoundation.Common不会显示在 引用 对话框的 .NET 选项,请使用 浏览 选项添加程序集。可以找到它们在%ProgramFiles% \ Microsoft Visual Studio 10.0 \ Common7 \ IDE \ ReferenceAssemblies \ v2.0。
使用后会出现在本主题中的代码替换Program.cs的内容。
在用于构造TfsConfigurationServer对象的代码,请替换 服务器、 端口和 VDir 在URL中,以便URL引用您的服务器。
提示 若要,以确保使用正确的URL,请使用 团队资源管理器 打开位于您的服务器上的团队项目,并验证服务器的URL属性。
using System; using System.Collections.ObjectModel; using Microsoft.TeamFoundation.Client; using Microsoft.TeamFoundation.Framework.Common; using Microsoft.TeamFoundation.Framework.Client; namespace TfsApplication { class Program { static void Main(String[] args) { // Connect to Team Foundation Server // Server is the name of the server that is running the application tier for Team Foundation. // Port is the port that Team Foundation uses. The default port is 8080. // VDir is the virtual path to the Team Foundation application. The default path is tfs. Uri tfsUri = (args.Length < 1) ? new Uri("http://Server:Port/VDir") : new Uri(args[0]); TfsConfigurationServer configurationServer = TfsConfigurationServerFactory.GetConfigurationServer(tfsUri); // Get the catalog of team project collections ReadOnlyCollection<CatalogNode> collectionNodes = configurationServer.CatalogNode.QueryChildren( new[] { CatalogResourceTypes.ProjectCollection }, false, CatalogQueryOptions.None); // List the team project collections foreach (CatalogNode collectionNode in collectionNodes) { // Use the InstanceId property to get the team project collection Guid collectionId = new Guid(collectionNode.Resource.Properties["InstanceId"]); TfsTeamProjectCollection teamProjectCollection = configurationServer.GetTeamProjectCollection(collectionId); // Print the name of the team project collection Console.WriteLine("Collection: " + teamProjectCollection.Name); // Get a catalog of team projects for the collection ReadOnlyCollection<CatalogNode> projectNodes = collectionNode.QueryChildren( new[] { CatalogResourceTypes.TeamProject }, false, CatalogQueryOptions.None); // List the team projects in the collection foreach (CatalogNode projectNode in projectNodes) { Console.WriteLine(" Team Project: " + projectNode.Resource.DisplayName); } } } } }
Imports System Imports System.Collections.ObjectModel Imports Microsoft.TeamFoundation.Client Imports Microsoft.TeamFoundation.Framework.Common Imports Microsoft.TeamFoundation.Framework.Client Module Module1 Sub Main(ByVal sArgs() As String) ' Connect to the Team Foundation Server ' Server is the name of the server running the application tier for Team Foundation Server ' Port is the port that the Team Foundation Server uses. The default port is 8080. ' VDir is the virtual path to the Team Foundation application. The default value is tfs. Dim tfsUri As Uri If sArgs.Length = 0 Then tfsUri = New Uri("https://Server:8080/tfs") Else tfsUri = New Uri(sArgs(1)) End If Dim configurationServer As New TfsConfigurationServer(tfsUri) configurationServer = TfsConfigurationServerFactory.GetConfigurationServer(tfsUri) ' Get the catalog of team project collections Dim collectionNodes As ReadOnlyCollection(Of CatalogNode) Dim gVar As Guid() = New Guid() {CatalogResourceTypes.ProjectCollection} collectionNodes = configurationServer.CatalogNode.QueryChildren(gVar, False, CatalogQueryOptions.None) ' List the team project collections For Each collectionNode In collectionNodes Dim collectionId As Guid = New Guid(collectionNode.Resource.Properties("InstanceID")) Dim teamProjectCollection As New TfsTeamProjectCollection(tfsUri) teamProjectCollection = configurationServer.GetTeamProjectCollection(collectionId) System.Console.WriteLine("Collection:" + teamProjectCollection.Name) ' Get a catalog of team projects for the collection Dim hVar As Guid() = New Guid() {CatalogResourceTypes.TeamProject} Dim projectNodes As ReadOnlyCollection(Of CatalogNode) projectNodes = collectionNode.QueryChildren(hVar, False, CatalogQueryOptions.None) ' List the team projects in the collection For Each projectNode In projectNodes System.Console.WriteLine(" Team Project: " + projectNode.Resource.DisplayName) Next Next End Sub End Module
获取附加的Team Foundation服务
可以访问附加服务使用抽象类 TfsConnection 定义,并 TfsConfigurationServer 和 TfsTeamProjectCollection 执行的某个GetService方法。
当您使用 TfsConfigurationServer 选件类,可以访问整个服务器的服务。当您使用 TfsTeamProjectCollection 选件类时,可以访问团队的服务项目集合。例如, TfsConfigurationServer 的 ITeamFoundationRegistry 服务提供服务器上注册的属性。从 TfsTeamProjectCollection 访问的同一服务提供团队项目集合注册的属性。这些服务仅适用于团队项目集合。
服务 |
TfsConfigurationServer (服务器级别) |
TfsTeamProjectCollection (集合级别) |
---|---|---|
代表其他用户(模拟)
当您连接到 Team Foundation Server时,可以使用支持模拟委托标识操作除了一个不运行应用程序的方法。执行的所有操作根据该连接委托所模拟的标识将执行。例如,应用程序可以运行在用户下的标识,但创建模拟用户B.与 Team Foundation Server 的连接。在下列情况下将用户的入到源代码的更改,变更集记录用户B注册了更改。
使用Team Foundation标识
,当您连接到 Team Foundation Server 指定标识模拟时,可以使用 IdentityDescriptor 对象。IdentityDescriptor 指定 Team Foundation 定义的标识。当您使用此方法时,不必指定密码。该验证的标识必须具有 委托另一个用户发出请求 权限,除此之外,验证的(用户 A)和模拟(用户 B)标识相同。
服务器级别 |
---|
|
集合级别 |
---|
|
使用验证的凭据
,当您连接到 Team Foundation Server 指定标识模拟时,可以使用 ICredentials 对象。此方法不需要特殊权限,但是,您必须能够获取该标识的密码创建 ICredentials 对象。
,当您连接到 Team Foundation Server 处理为新凭据时,还可以指定 ICredentialsProvider 的实现。系统调用指定请求的新凭据 ICredentialsProvider 的实现,如果由 ICredentials 对象时指定的凭据未成功验证也不被授权执行操作。
若要提示用户输入凭据,可以使用 UICredentialsProvider 选件类,通过显示登录对话框提示的新凭据的用户实现 ICredentialsProvider 。
服务器级别 |
---|
|
集合级别 |
---|
|
使用技术的组合
,当您连接到 Team Foundation Server时,可以使用 Team Foundation 标识和验证的凭据。例如,应用程序可能运行在用户的凭据下,但是,可以为用户B使用凭据并为用户C指定 IdentityDescriptor ,当您连接到 Team Foundation Server时。在这种情况下,将使用该连接的请求验证作为用户B,但委托用户C.执行。为了使此成功的方法,用户B必须具有 委托另一个用户发出请求 权限。
服务器级别 |
---|
|
集合级别 |
---|
|
其他资源
在 Team Foundation Server 中连接团队项目
介绍TfsConnection、TfsConfigurationServer和TfsTeamProjectCollection选件类 Microsoft网站上
使用与版本控制API的TFS模拟 Microsoft网站上。