Conectar ao Team Foundation Server a partir de um aplicativo do console

Você pode, programaticamente, conectar-se a um servidor que está executando o Team Foundation e acessar os projetos da equipe nesse servidor se usar o exemplo a seguir. Se você modificar o exemplo, poderá utilizar os serviços que Getting Additional Team Foundation Services descreve mais adiante neste tópico. Você também pode agir em nome de outras pessoas usando representação, como Acting on Behalf of Another User (Impersonation) descreve mais adiante neste tópico.

Neste tópico

Exemplo

Você pode listar as coleções de projetos de equipe e os projetos de equipe que elas contêm se usar o exemplo a seguir.

Para usar este exemplo

  1. Crie um aplicativo de console C#.

  2. Adicione referências aos assemblies a seguir:

  3. Substitua o conteúdo de Program.cs pelo código que aparece mais adiante neste tópico.

  4. Nesse código, substitua Servidor, Porta e VDir na URL usada para construir o objeto TfsConfigurationServer, para que a URL consulte seu servidor.

    Dica

    Para verificar se você está usando a URL correta, use Team Explorer para abrir um projeto de equipe em seu servidor e verifique as propriedades da URL do servidor.

    Team Foundation Server Properties: 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
    

Obtendo serviços adicionais do Team Foundation

Você pode acessar serviços adicionais usando um dos métodos GetService que a classe abstrata TfsConnection define e que TfsConfigurationServer e TfsTeamProjectCollection implementam.

Ao usar a classe TfsConfigurationServer, você acessa os serviços de todo o servidor. Ao usar a classe TfsTeamProjectCollection, você acessa os serviços da coleção de projetos de equipe. Por exemplo, o serviço ITeamFoundationRegistry para TfsConfigurationServer fornece propriedades registradas do servidor. O mesmo serviço adquirido de TfsTeamProjectCollection fornece as propriedades registradas de uma coleção de projetos de equipe. Alguns serviços só se aplicam às coleções de projetos de equipe.

Serviço

TfsConfigurationServer

(nível do servidor)

TfsTeamProjectCollection

(nível da coleção)

ITeamFoundationRegistry

marca de seleção

marca de seleção

IIdentityManagementService

marca de seleção

marca de seleção

ITeamFoundationJobService

marca de seleção

marca de seleção

IPropertyService

marca de seleção

marca de seleção

IEventService

marca de seleção

marca de seleção

ISecurityService

marca de seleção

marca de seleção

ILocationService

marca de seleção

marca de seleção

TswaClientHyperlinkService

marca de seleção

marca de seleção

ITeamProjectCollectionService

marca de seleção

IAdministrationService

marca de seleção

marca de seleção

ICatalogService

marca de seleção

VersionControlServer

marca de seleção

WorkItemStore

marca de seleção

IBuildServer

marca de seleção

ITestManagementService

marca de seleção

ILinking

marca de seleção

ICommonStructureService3

marca de seleção

IServerStatusService

marca de seleção

IProcessTemplates

marca de seleção

Agindo em nome de outro usuário (representação)

Ao se conectar ao Team Foundation Server, você pode usar um método com suporte a representação para agir em nome de uma identidade que não seja aquela que executa o aplicativo. Todas as operações realizadas com base nessa conexão serão realizadas em nome da identidade representada. Por exemplo, seu aplicativo pode ser executado sob a identidade do Usuário A, mas criar uma conexão com Team Foundation Server que representa o Usuário B. Se o Usuário A marcar uma alteração no código-fonte sob essas condições, o conjunto de alterações registrará que o Usuário B verificou a alteração.

Usando uma identidade do Team Foundation

Você pode usar um objeto IdentityDescriptor ao se conectar com o Team Foundation Server para especificar a identidade a ser representada. O IdentityDescriptor especifica uma identidade que Team Foundation define. Quando você usa essa estratégia, não precisa especificar uma senha. A identidade autenticada deve ter a permissão Fazer solicitações em nome de outro usuário, exceto quando as identidades autenticadas (Usuário A) e representadas (Usuário B) são as mesmas.

Nível do servidor

Nível da coleção

Usando credenciais autenticadas

Você pode usar um objeto ICredentials ao se conectar com o Team Foundation Server para especificar a identidade a ser representada. Essa estratégia não requer permissões especiais, mas você deve ser capaz de obter a senha da identidade para criar o objeto ICredentials.

Você também pode especificar uma implementação do ICredentialsProvider ao se conectar com Team Foundation Server para processar solicitações de novas credenciais. O sistema chama a implementação de ICredentialsProvider que você especifica para solicitar novas credenciais quando as credenciais especificadas pelo objeto ICredentials não são autenticadas com êxito nem autorizadas para realizar a operação.

Para solicitar credenciais ao usuário, você pode usar a classe UICredentialsProvider, que implementa ICredentialsProvider, exibindo uma caixa de diálogo de logon para solicitar novas credenciais ao usuário.

Nível do servidor

Nível da coleção

Usando uma combinação de técnicas

Você pode usar tanto uma identidade do Team Foundation quanto credenciais autenticadas ao se conectar ao Team Foundation Server. Por exemplo, seu aplicativo pode ser executado com as credenciais do Usuário A, mas você pode usar as credenciais do Usuário B e especificar um IdentityDescriptor para o Usuário C ao se conectar com o Team Foundation Server. Nesse caso, as solicitações feitas usando essa conexão são autenticadas como Usuário B, mas realizadas em nome do Usuário C. Para que essa estratégia seja bem-sucedida, o Usuário B deve ter a permissão Fazer solicitações em nome de outro usuário.

Nível do servidor

Nível da coleção

Recursos adicionais

Gerenciar coleções de projetos da equipe

Conectar a projetos de equipe no Team Foundation Server

Introduzindo as classes TfsConnection, TfsConfigurationServer e TfsTeamProjectCollection no site da Microsoft

Usando representação TFS com APIs de controle de versão no site da Microsoft.