Определить «Текущее» открытое рабочее пространство через TFS API? - PullRequest
12 голосов
/ 08 января 2009

Есть ли способ программно определить текущее рабочее пространство open sln / proj в visual studio, используя TFS API? Я видел, как VersionControlServer может восстановить все известные рабочие пространства, но есть ли что-нибудь, что я могу использовать, чтобы связать это с тем, что у пользователя в настоящее время есть (или нет) открытый?

Ответы [ 3 ]

12 голосов
/ 04 марта 2011

Существует еще одно переопределение метода GetWorkspace экземпляра объекта VersionControlServer. Вы можете вызвать GetWorkspace с локальным путем, как состояния Бернхарда, но вы также можете вызвать его с именем рабочей области и владельцем рабочей области. Поскольку в качестве имени рабочей области по умолчанию используется имя локального компьютера, обычно вы можете использовать Environment.MachineName, но всегда найдется тот разработчик, который изменит имя рабочей области.

Пример:

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

VersionControlServer _vcs = (VersionControlServer)_tfs.GetService(typeof(VersionControlServer));
Workspace _ws = _vcs.GetWorkspace(Environment.MachineName, Environment.UserName);
1 голос
/ 15 июня 2015

Проблема подхода Дейва Тепли состоит в том, что он предполагает, что у вас уже есть экземпляр VersionControlServer или, по крайней мере, TeamFoundationServerUri.

Существует более мощный способ: с использованием Workstation класса . Риччи Джан Мария написала довольно обширное сообщение в блоге на эту тему. Ниже приведен фрагмент этого поста:

Используйте класс Workstation, чтобы получить WorkspaceInfo для искомого пути, он произведет поиск в рабочих пространствах всех серверов TFS, зарегистрированных на этой рабочей станции, чтобы определить, есть ли совпадение:

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

Теперь, когда у вас есть WorkspaceInfo, вы можете подать в суд на него для подключения к TFS, информация о рабочем пространстве содержит ProjectCollectionUri для этой конкретной коллекции командных проектов. И из этого экземпляра Workspace:

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

Используйте коллекцию или рабочее пространство, чтобы затем получить доступ к VersionControlServer:

VersionControlServer versionControlServer = collection.GetService<VersionControlServer>();
1 голос
/ 08 января 2009

Если вы можете определить физический путь к файлу решения или проекта, то вы можете запросить этот файл в TFS и посмотреть, какое рабочее пространство сопоставлено с этим локальным расположением файла.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...