tf.exe和tfpt.exe如何根据执行目录建立与TFS实例的连接?

时间:2011-08-15 21:18:19

标签: command-line tfs sdk tfs2010 workspace

我正在使用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 个答案:

答案 0 :(得分:5)

Team Foundation Server客户端使用工作空间缓存,其中包含他们从当前计算机使用的每个Team Project Collection的所有用户工作空间。 tf.exe使用此缓存来确定用于命令行上给出的路径的TfsTeamProjectCollectionWorkspace

您可以使用以下命令获取特定本地路径的缓存WorkspaceInfo

Workstation.Current.GetLocalWorkspaceInfo(localPath)

或者您可以通过调用以下方式获取整个工作区缓存:

Workstation.Current.GetAllLocalWorkspaceInfo()

WorkspaceInfo.ServerUri属性将包含可用于创建TfsTeamProjectCollection的服务器URI。