2011-08-15 7 views
4

私はTFSオブジェクトモデルを使用してコマンドラインでいくつかの作業をしています。私自身の特定の実装のためにアーティファクトを導入することなく、tf.exeとtfpt.exeに見られるワークスペース検出のバーチャルを再現したい。現在のところ、私のスクリプトはtf.exeが必要とする情報よりも多くの情報を必要としています。tf.exeとtfpt.exeは、実行ディレクトリに基づいてTFSインスタンスへの接続を確立するにはどうすればよいですか?

具体的には、ユーザにサーバ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と同じ方法でこの検出を実行するために使用できるクラスと方法は何ですか?

答えて

5

Team Foundation Serverクライアントは、現在のマシンから使用した各チームプロジェクトコレクションのすべてのユーザーのワークスペースを含むワークスペースキャッシュを使用します。 tf.exeは、このキャッシュを使用して、コマンドラインで指定されたパスに使用するTfsTeamProjectCollectionWorkspaceを決定します。

あなたが使用して、特定のローカルパスのキャッシュされたWorkspaceInfoを取得することができます。

Workstation.Current.GetLocalWorkspaceInfo(localPath) 

それとも、呼び出すことによって、ワークスペース全体のキャッシュを取得することができます。

Workstation.Current.GetAllLocalWorkspaceInfo() 

WorkspaceInfo.ServerUriプロパティは、サーバーが含まれますがURIを使用してTfsTeamProjectCollectionを作成するために使用できるURI。

+0

素晴らしい!魅力のように動作します。私はWorkspaceInfoクラスの内部を見て、インスタンス化するための何らかの方法を探していました。ワークステーションは決して考えなかった。ありがとう! – bwerks

関連する問題