從主控台應用程式連接到 Team Foundation Server

如果您使用下列範例,則可以透過程式設計方式連接至執行 Team Foundation 的伺服器,然後存取該伺服器上的 Team 專案。 如果您修改此範例,則可以使用 Getting Additional Team Foundation Services 在本主題稍後描述的服務。 您也可以使用模擬代表其他人行動 (如Acting on Behalf of Another User (Impersonation) 在本主題稍後所述)。

本主題內容

範例

如果您使用下列範例,則可以列出 Team 專案集合和其所含的 Team 專案。

使用此範例

  1. 建立 C# 主控台應用程式。

  2. 加入下列組件的參考:

  3. 將 Program.cs 的內容取代為本主題稍後出現的程式碼。

  4. 在該程式碼中,取代 URL 中用來建構 TfsConfigurationServer 物件的 Server、Port 和 VDir,讓 URL 參考您的伺服器。

    提示

    若要確定您是使用正確的 URL,請使用 Team Explorer 開啟您伺服器上的 Team 專案,並確認伺服器的 URL 屬性。

    Team Foundation Server 屬性: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("http://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 Service

使用抽象類別 TfsConnection 所定義以及 TfsConfigurationServerTfsTeamProjectCollection 所實作的其中一種 GetService 方法,即可存取其他服務。

當您使用 TfsConfigurationServer 類別時,請存取整部伺服器的服務。 當您使用 TfsTeamProjectCollection 類別時,請存取 Team 專案集合的服務。 例如,TfsConfigurationServerITeamFoundationRegistry 服務提供註冊的伺服器屬性。 從 TfsTeamProjectCollection 取得的相同服務提供註冊的 Team 專案集合屬性。 部分服務只會套用至 Team 專案集合。

服務

TfsConfigurationServer

(伺服器層級)

TfsTeamProjectCollection

(集合層級)

ITeamFoundationRegistry

核取標記

核取標記

IIdentityManagementService

核取標記

核取標記

ITeamFoundationJobService

核取標記

核取標記

IPropertyService

核取標記

核取標記

IEventService

核取標記

核取標記

ISecurityService

核取標記

核取標記

ILocationService

核取標記

核取標記

TswaClientHyperlinkService

核取標記

核取標記

ITeamProjectCollectionService

核取標記

IAdministrationService

核取標記

核取標記

ICatalogService

核取標記

VersionControlServer

核取標記

WorkItemStore

核取標記

IBuildServer

核取標記

ITestManagementService

核取標記

ILinking

核取標記

ICommonStructureService3

核取標記

IServerStatusService

核取標記

IProcessTemplates

核取標記

代表另一位使用者行動 (模擬)

當您連接至 Team Foundation Server 時,可以使用方法來支援模擬,以代表執行您應用程式的識別以外的識別行動。 將會代表模擬的識別執行任何根據該連接執行的作業。 例如,您的應用程式可以透過使用者 A 的識別來執行,但是建立可模擬使用者 B 的 Team Foundation Server 連接。 如果使用者 A 在這些狀況下簽入原始程式碼變更,則變更集將會記錄已簽入變更的使用者 B。

使用 Team Foundation 識別

當您連接至 Team Foundation Server 指定要模擬的識別時,可以使用 IdentityDescriptor 物件。 IdentityDescriptor 指定 Team Foundation 所定義的識別。 當您使用此策略時,不需要指定密碼。 驗證識別必須要有 [代表另一位使用者提出要求] 權限 (但已驗證 (使用者 A) 和已模擬 (使用者 B) 識別相同時除外)。

伺服器層級

集合層級

使用已驗證認證

當您連接至 Team Foundation Server 指定要模擬的識別時,可以使用 ICredentials 物件。 此策略不需要特殊權限,但您必須可以取得識別的密碼,以建立 ICredentials 物件。

當您連接至 Team Foundation Server 處理新認證的要求時,也可以指定 ICredentialsProvider 的實作。 如果未順利驗證 ICredentials 物件所指定的認證,或未授權該認證執行作業,則系統會呼叫您指定來要求新認證的 ICredentialsProvider 實作。

若要提示使用者輸入認證,您可以使用 UICredentialsProvider 類別,而此類別透過顯示登入對話方塊以提示使用者輸入新認證,來實作 ICredentialsProvider

伺服器層級

集合層級

使用多種技術的組合

當您連接至 Team Foundation Server 時,可以同時使用 Team Foundation 識別與已驗證認證。 例如,您的應用程式可能是使用使用者 A 的認證來執行,但是您可能會使用使用者 B 的認證,並在連接至 Team Foundation Server 時,指定使用者 C 的 IdentityDescriptor。 在此情況下,會以使用者 B 的身分驗證使用該連接所提出的要求,但是是代表使用者 C 執行。 為了讓此策略成功,使用者 B 必須要有 [代表另一位使用者提出要求] 權限。

伺服器層級

集合層級

其他資源

管理 Team 專案集合

連接到 Team Foundation Server 中的 Team 專案

Microsoft 網站上的 TfsConnection、TfsConfigurationServer 和 TfsTeamProjectCollection 類別簡介

Microsoft 網站上的搭配使用 TFS 模擬與版本控制 API