2009-01-07 19 views
12

有沒有一種方法可以在使用TFS API的visual studio中以編程方式確定open sln/proj的當前工作空間?我已經看到了VersionControlServer如何檢索所有已知的工作區,但是有什麼我可以用來將它與用戶當前(或沒有)打開的東西聯繫起來嗎?通過TFS API識別'當前'開放工作區?

回答

1

如果您可以確定解決方案或項目文件的物理路徑,那麼您可以在TFS中查詢該文件,並且應該看到哪個工作區已映射到該本地文件位置。

+0

啊。我沒有意識到工作區的映射路徑必須是唯一的,但它是有道理的。太好了,謝謝! – JPero 2009-01-08 14:18:37

10

對實例化的VersionControlServer對象有GetWorkspace方法的另一個覆蓋。您可以撥打GetWorkspace與本地路徑(如Bernhard狀態),但您也可以使用工作區名稱和工作區所有者來調用它。由於工作區名稱默認爲本地計算機名稱,因此通常可以使用Environment.MachineName,但總是會有更改工作區名稱的開發人員。

例子:

TeamFoundationServerFactory _tfs = TeamFoundationServerFactory.GetServer(server); 
      _tfs.EnsureAuthenticated(); 

VersionControlServer _vcs = (VersionControlServer)_tfs.GetService(typeof(VersionControlServer)); 
Workspace _ws = _vcs.GetWorkspace(Environment.MachineName, Environment.UserName); 
1

與戴夫Teply該方法的問題在於,它假定你已經有了一個VersionControlServer或者至少是TeamFoundationServerUri的一個實例。

雖然有一個更強大的方法,using the Workstation classRicci Gian Maria has written a quite extensive blog post關於這個話題。下面的片段是該帖子的要點:

使用Workstation類爲要查找的路徑獲取WorkspaceInfo,這將搜索在該工作站上註冊的所有TFS服務器的工作空間,以查看是否存在匹配:

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

現在,你有WorkspaceInfo,你可以起訴它連接到TFS,工作區信息包含ProjectCollectionUri該特定團隊項目集合。並從工作區實例:

TfsTeamProjectCollection collection = new TfsTeamProjectCollection(info.ServerUri); 
Workspace workspace = info.GetWorkspace(collection); 

使用集合或工作區,然後獲得訪問VersionControlServer:

VersionControlServer versionControlServer = collection.GetService<VersionControlServer>(); 
相關問題