從主控台應用程式連接到 Team Foundation Server
如果您使用下列範例,則可以透過程式設計方式連接至執行 Team Foundation 的伺服器,然後存取該伺服器上的 Team 專案。 如果您修改此範例,則可以使用 Getting Additional Team Foundation Services 在本主題稍後描述的服務。 您也可以使用模擬代表其他人行動 (如Acting on Behalf of Another User (Impersonation) 在本主題稍後所述)。
本主題內容
範例
如果您使用下列範例,則可以列出 Team 專案集合和其所含的 Team 專案。
使用此範例
建立 C# 主控台應用程式。
加入下列組件的參考:
將 Program.cs 的內容取代為本主題稍後出現的程式碼。
在該程式碼中,取代 URL 中用來建構 TfsConfigurationServer 物件的 Server、Port 和 VDir,讓 URL 參考您的伺服器。
提示
若要確定您是使用正確的 URL,請使用 Team Explorer 開啟您伺服器上的 Team 專案,並確認伺服器的 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 所定義以及 TfsConfigurationServer 和 TfsTeamProjectCollection 所實作的其中一種 GetService 方法,即可存取其他服務。
當您使用 TfsConfigurationServer 類別時,請存取整部伺服器的服務。 當您使用 TfsTeamProjectCollection 類別時,請存取 Team 專案集合的服務。 例如,TfsConfigurationServer 的 ITeamFoundationRegistry 服務提供註冊的伺服器屬性。 從 TfsTeamProjectCollection 取得的相同服務提供註冊的 Team 專案集合屬性。 部分服務只會套用至 Team 專案集合。
服務 |
TfsConfigurationServer (伺服器層級) |
TfsTeamProjectCollection (集合層級) |
---|---|---|
代表另一位使用者行動 (模擬)
當您連接至 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 Foundation Server 中的 Team 專案
Microsoft 網站上的 TfsConnection、TfsConfigurationServer 和 TfsTeamProjectCollection 類別簡介
Microsoft 網站上的搭配使用 TFS 模擬與版本控制 API