Herstellen einer Verbindung mit Team Foundation Server von einer Konsolenanwendung aus
Anhand des folgenden Beispiels können Sie programmgesteuert eine Verbindung mit einem Server herstellen, auf dem Team Foundation ausgeführt wird, und dann auf die Teamprojekte auf diesem Server zugreifen. Wenn Sie das Beispiel entsprechend ändern, können Sie die Dienste nutzen, die weiter unten in diesem Thema unter Getting Additional Team Foundation Services beschrieben werden. Sie können auch im Namen anderer Personen handeln, indem Sie einen Identitätswechsel wie weiter unten im Thema unter Acting on Behalf of Another User (Impersonation) beschrieben vornehmen.
In diesem Thema
Beispiel
Verwenden Sie das folgende Beispiel, um die Teamprojektauflistungen und die Teamprojekte aufzulisten, die diese enthalten.
So verwenden Sie dieses Beispiel
Erstellen Sie eine C#- Konsolenanwendung.
Fügen Sie Verweise auf die folgenden Assemblys hinzu:
Ersetzen Sie den Inhalt von Program.cs durch den Code, der weiter unten im Thema aufgeführt wird.
In diesem Code ersetzen Sie Server, Port und VDir in der URL, die für die Erstellung des TfsConfigurationServer-Objekts verwendet wird, sodass die URL auf den Server verweist.
Tipp
Um sicherzustellen, dass Sie die richtige URL verwenden, öffnen Sie auf dem Server ein Teamprojekt mit Team Explorer, und prüfen Sie die URL-Eigenschaften auf dem Server.
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
Abrufen von zusätzlichen Team Foundation-Diensten
Sie können zusätzliche Dienste abrufen, indem Sie eine der GetService-Methoden verwenden, die von der abstrakten Klasse TfsConnection definiert und von TfsConfigurationServer und TfsTeamProjectCollection implementiert werden.
Wenn Sie die Klasse TfsConfigurationServer verwenden, rufen Sie die Dienste für den gesamten Server ab. Wenn Sie die Klasse TfsTeamProjectCollection verwenden, rufen Sie die Dienste für die Teamprojektauflistung ab. Der ITeamFoundationRegistry-Dienst für TfsConfigurationServer liefert beispielsweise registrierte Eigenschaften des Servers. Derselbe Dienst aus TfsTeamProjectCollection liefert Eigenschaften einer Teamprojektauflistung. Einige Dienste gelten nur für Teamprojektauflistungen.
Dienst |
TfsConfigurationServer (Serverebene) |
TfsTeamProjectCollection (Auflistungsebene) |
---|---|---|
Annehmen der Identität eines anderen Benutzers (Identitätswechsel)
Wenn Sie eine Verbindung mit Team Foundation Server herstellen, können Sie eine Methode verwenden, die Identitätswechsel unterstützt. Auf diese Weise können Sie eine andere Identität annehmen, als in der Anwendung ausgeführt wird. Alle auf dieser Verbindung basierenden Operationen werden dann mit der angenommen Identität ausgeführt. Die Anwendung könnte beispielsweise mit der Identität von User A ausgeführt werden, aber eine Verbindung mit Team Foundation Server mit der angenommenen Identität von User B herstellen. Wenn User A unter diesen Bedingungen eine Änderungen am Quellcode eincheckt, wird im Changeset verzeichnet, dass User B die Änderungen eingecheckt hat.
Verwenden einer Team Foundation-Identität
Sie können ein IdentityDescriptor-Objekt verwenden, wenn Sie eine Verbindung zu Team Foundation Server herstellen, um die neue Identität anzugeben. Der IdentityDescriptor gibt eine Identität an, die von Team Foundation definiert wird. Wenn Sie diese Strategie verwenden, müssen Sie kein Kennwort angeben. Die authentifizierte Identität muss über die Berechtigung Anforderungen im Auftrag von anderen Benutzern einreichen verfügen, es sei denn, dass die authentifizierte (User A) und die angenommene (User B) Identität übereinstimmen.
Serverebene |
---|
Auflistungsebene |
---|
Verwenden authentifizierter Anmeldeinformationen
Sie können ein ICredentials-Objekt verwenden, wenn Sie eine Verbindung zu Team Foundation Server herstellen, um die neue Identität anzugeben. Für diese Vorgehensweise sind keine speziellen Berechtigungen erforderlich, Sie müssen jedoch über das Kennwort der Identität verfügen, um das Objekt ICredentials zu erstellen.
Sie können auch eine Implementierung von ICredentialsProvider angeben, wenn Sie eine Verbindung zu Team Foundation Server herstellen, um Anforderungen für neue Anmeldeinformationen zu bearbeiten. Das System ruft die Implementierung von ICredentialsProvider auf, die Sie für die Anforderung neuer Anmeldeinformationen angeben, wenn die vom ICredentials-Objekt angegebenen Anmeldeinformationen für die Ausführung der Operation nicht erfolgreich authentifiziert oder autorisiert sind.
Um den Benutzer zur Eingabe der Anmeldeinformationen aufzufordern, können Sie die UICredentialsProvider-Klasse verwenden, die ICredentialsProvider implementiert, sodass ein Anmeldedialogfeld zur Eingabe neuer Anmeldeinformationen angezeigt wird.
Serverebene |
---|
Auflistungsebene |
---|
Verwenden einer Kombination verschiedener Verfahren
Sie können sowohl eine Team Foundation-Identität als auch authentifizierte Anmeldeinformationen verwenden, wenn Sie eine Verbindung zu Team Foundation Server herstellen. Beispielsweise wird die Anwendung mit den Anmeldeinformationen für User A ausgeführt, Sie verwenden jedoch Anmeldeinformationen für User B und geben einen IdentityDescriptor für User C an, wenn Sie eine Verbindung zu Team Foundation Server herstellen. In diesem Fall werden Anforderungen, die mit dieser Verbindung vorgenommen werden, mit User B authentifiziert, aber im Namen von User C ausgeführt. Damit diese Vorgehensweise erfolgreich ist, muss User B über die Berechtigung Anforderungen im Auftrag von anderen Benutzern einreichen verfügen.
Serverebene |
---|
Auflistungsebene |
---|
Zusätzliche Ressourcen
Verwalten von Teamprojektauflistungen
Herstellen einer Verbindung mit Teamprojekten in Team Foundation Server
Einführung in die TfsCollection-, TfsConfigurationServer- und TfsTeamProjectCollection-Klassen auf der Microsoft-Website
TFS-Identitätswechsel mit Version Control-APIs auf der Microsoft-Website.