2009-01-07 6 views
12

Gibt es eine Möglichkeit, den aktuellen Arbeitsbereich des geöffneten sln/proj im Visual Studio mithilfe der TFS-API programmatisch zu ermitteln? Ich habe gesehen, wie der VersionControlServer alle bekannten Arbeitsbereiche abrufen kann, aber gibt es irgendetwas, was ich verwenden kann, um das mit dem zu verbinden, was der Benutzer gerade hat (oder nicht hat) geöffnet?Identifizieren Sie den 'aktuellen' offenen Arbeitsbereich über die TFS-API?

Antwort

1

Wenn Sie den physischen Pfad der Projektmappe oder Projektdatei ermitteln können, können Sie diese Datei in TFS abfragen, und Sie sollten sehen, welcher Arbeitsbereich diesem lokalen Dateispeicherort zugeordnet wurde.

+0

Ah. Ich wusste nicht, dass der abgebildete Pfad für einen Arbeitsbereich eindeutig sein muss, aber er macht Sinn. Super, danke! – JPero

10

Es gibt eine weitere Überschreibung für die GetWorkspace Methode eines instanziierten Objekts VersionControlServer. Sie können GetWorkspace mit dem lokalen Pfad wie Bernhard-Staaten aufrufen, aber Sie können es auch mit dem Arbeitsbereich-Namen und dem Arbeitsbereich-Besitzer aufrufen. Da der Name des Arbeitsbereichs standardmäßig dem Namen des lokalen Computers entspricht, können Sie normalerweise Environment.MachineName verwenden, aber es wird immer der Entwickler geben, der den Namen des Arbeitsbereichs ändert.

Beispiel:

TeamFoundationServerFactory _tfs = TeamFoundationServerFactory.GetServer(server); 
      _tfs.EnsureAuthenticated(); 

VersionControlServer _vcs = (VersionControlServer)_tfs.GetService(typeof(VersionControlServer)); 
Workspace _ws = _vcs.GetWorkspace(Environment.MachineName, Environment.UserName); 
1

Das Problem mit dem Ansatz von Dave Teply ist, dass es bereits eine Instanz eines VersionControlServer oder zumindest die TeamFoundationServerUri annimmt.

Es gibt jedoch einen leistungsfähigeren Weg, using the Workstation class. Ricci Gian Maria has written a quite extensive blog post zu diesem Thema. Das folgende Snippet ist das Wesentliche dieses Posts:

Verwenden Sie die Workstation-Klasse, um die WorkspaceInfo für den gesuchten Pfad abzurufen. Dadurch werden die Arbeitsbereiche für alle auf dieser Workstation registrierten TFS-Server nach Übereinstimmungen durchsucht : Jetzt

Workstation workstation = Workstation.Current; 
WorkspaceInfo info = workstation.GetLocalWorkspaceInfo(path); 

, dass Sie die WorkspaceInfo haben, können Sie es verklagen zu TFS, der Arbeitsbereich Info enthält die ProjectCollectionUri für die jeweilige Teamprojektsammlung zu verbinden. Und aus, dass der Arbeitsbereich Beispiel:

TfsTeamProjectCollection collection = new TfsTeamProjectCollection(info.ServerUri); 
Workspace workspace = info.GetWorkspace(collection); 

Verwenden Sie die Sammlung oder den Arbeitsbereich, um dann Zugriff auf die VersionControlServer zu erhalten:

VersionControlServer versionControlServer = collection.GetService<VersionControlServer>();