Подтвердить что ты не робот

Определить текущую открытую рабочую область через TFS API?

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

4b9b3361

Ответ 1

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

Ответ 2

Существует другое переопределение метода 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);

Ответ 3

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

Существует более мощный способ, с использованием класса 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>();