Как tf.exe и tfpt.exe устанавливают соединения с экземпляром TFS на основе каталога выполнения? - PullRequest
4 голосов
/ 16 августа 2011

Я выполняю некоторую работу в командной строке, используя объектную модель TFS, и я хочу воспроизвести поведение обнаружения рабочего пространства, наблюдаемое в tf.exe и tfpt.exe, без введения артефактов из-за моей собственной конкретной реализации.В настоящее время моим сценариям требуется больше информации, чем требуется tf.exe - значительное количество моих параметров просто для создания экземпляра соединения.

В частности, я должен требовать, чтобы пользователи явно передавали сервер Uri (tfsUriString) и имя коллекции (tfsCollectionName), но это кажется ненужным и раздражающим, поскольку tf.exe может это сделать.

    Uri tfsUri = new Uri(tfsUriString);
    TfsConfigurationServer configurationServer = TfsConfigurationServerFactory.GetConfigurationServer(tfsUri);
    ReadOnlyCollection<CatalogNode> collectionNodes = configurationServer.CatalogNode.QueryChildren( new[] { CatalogResourceTypes.ProjectCollection }, false, CatalogQueryOptions.None);
    CatalogNode collectionNode = collectionNodes.Where(node => node.Resource.DisplayName == tfsCollectionName).SingleOrDefault();
    Guid collectionId = new Guid(collectionNode.Resource.Properties["InstanceId"]);
    TfsTeamProjectCollection teamProjectCollection = configurationServer.GetTeamProjectCollection(collectionId);
    var vcServer = teamProjectCollection.GetService<VersionControlServer>();

Какие классы и методы могут использоваться для выполнения этого обнаружения таким же образомчто делает tf.exe?

1 Ответ

5 голосов
/ 16 августа 2011

Клиенты Team Foundation Server используют кэш рабочей области, который содержит все рабочие области пользователя для каждой коллекции Team Project, которую они использовали с текущего компьютера.tf.exe использует этот кэш для определения TfsTeamProjectCollection и Workspace, которые будут использоваться для путей, указанных в командной строке.

Вы можете получить кэшированный WorkspaceInfo для определенного локального пути, используя:

Workstation.Current.GetLocalWorkspaceInfo(localPath)

Или вы можете получить весь кеш рабочей области, вызвав:

Workstation.Current.GetAllLocalWorkspaceInfo()

Свойство WorkspaceInfo.ServerUri будет содержать URI сервера, который вы можете использовать для создания TfsTeamProjectCollection с помощью.

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