2016-05-26 3 views
1

リモートワークスペースと同期するローカルワークスペースを取得しようとしています。リモートワークスペースはWindowsMain/MainProject/Subprojectで、ローカルはC:/ MainProject/Subprojectです。問題は次のコードを実行するとローカルワークスペースがマップされていないことです。コードが見つからないようにするのは間違っていますか? (localPathにはC:/ MainProject /サブプロジェクトTeam Foundation get workspace error

TfsTeamProjectCollection tfs = TfsTeamProjectCollectionFactory.GetTeamProjectCollection(new Uri("http://remoteserver:8080/tfs_proj/WindowsMain"), new UICredentialsProvider()); tfs.EnsureAuthenticated(); VersionControlServer vsStore = tfs.GetService<VersionControlServer>(); Workspace workspace = vsStore.GetWorkspace(localpath);

+0

少なくともローカルのTFSワークスペースのルートでアプリケーションを実行してください。 –

+0

この問題により、tfsサーバーのURLが正しくないか、認証されたユーザーに作業領域を使用する権限が与えられていない可能性があります。それを確認できますか?また、 "tf workspaces"コマンドを実行して、ワークスペースをリストすることができるかどうかを確認してください。 –

答えて

2


を...しかし、これは私が使用したコードである(と私は苦労なタイミングで適切な解決策を見つけることを覚えておいてください):

teamProjectCollection = new TfsTeamProjectCollection(new Uri(collectionUri), new TfsClientCredentials()); 
teamProjectCollection.Authenticate(); 
versionControl = teamProjectCollection.GetService<VersionControlServer>(); 

(注:このような資格情報を使用して、VSで使用するもの から自動的に選択されます)

その後、私はすべてのワークスペース(あなたの場合には、それだけであってもよい)を得る - ことができますサーバーとクライアントのために右のmatching pathsを取得するために

versionControl.QueryWorkspaces(null, null, computerName) 
    .SelectMany(x => x.Folders); // returns IEnumerable<WorkingFolder> 

必要なワークスペースを選ぶ(つまり、何らかの理由で動作しない場合Workstationクラスは、同じことを、これはありません)、あなたは両方のローカルおよびサーバーを持っていますパス

LocalSourcePath = folder.LocalItem; 
ServerPath = folder.ServerItem; 

...そして、私は実際のファイル(および例えばをダウンロードしてServerPathversionControlを使用あなたはそれが役に立てば幸い...これはおそらく、あなたのケースのために多少異なりますが、あなたはここから具体的な詳細を詰めることができるはずです、...)LocalSourcePathに対して

foreach (Item item in 
    versionControl.GetItems(serverPath, VersionSpec.Latest, RecursionType.Full, DeletedState.NonDeleted, ItemType.Any, true).Items) 
{ 
    string target = Path.Combine(downloadPath, item.ServerItem.Substring(2)); 
    if (item.ItemType == ItemType.Folder && !Directory.Exists(target)) 
    { 
     Directory.CreateDirectory(target); 
    } 
    else if (item.ItemType == ItemType.File) 
    { 
     item.DownloadFile(target); 
    } 
} 

それらを確認することができます。

1

は、コードによると、あなたは、TFSサーバーワークスペースのアドレスを知る必要がVersionControlServer物体を通過するように、そのようなオブジェクトを取得する必要があります

解決策またはプロジェクトファイルの物理パスを特定できる場合は、そのファイルをTFSでクエリでき、そのローカルファイルの場所にマップされているワークスペースを確認する必要があります。ワークスペースがユニークでなければならない。

さらにより強力な方法がありますが、Workstationクラスを使用しています。 Ricci Gian Mariaは、このトピックについて非常に広範なブログ記事を書いています。

この試合がありますかどうかを確認するためにそのワークステーションに登録されているすべてのTFSサーバー用workpaces検索します、あなたが探しているパスのWorkspaceInfoを取得するために、ワークステーションクラスを使用します。

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

詳細を彼のブログをご参照ください:私はあなたが正確にしたいことが何であるかはよく分からないHow to get TFS server address from a local folder mapped to a workspace

関連する問題