有没有办法使用TFS API以编程方式确定visual studio中open sln / proj的当前工作空间?我已经看到VersionControlServer如何可以检索所有已知的工作区,但有什么我可以用来将它与用户当前拥有(或没有)打开的东西联系起来吗?
答案 0 :(得分:12)
对实例化的GetWorkspace
对象的VersionControlServer
方法进行了另一次覆盖。您可以使用Bernhard州等本地路径调用GetWorkspace
,但您也可以使用工作区名称和工作区所有者来调用它。由于工作空间名称默认为本地计算机名称,因此通常可以使用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 :(得分:1)
如果您可以确定解决方案或项目文件的物理路径,那么您可以在TFS中查询该文件,您应该看到哪个工作区已映射到该本地文件位置。
答案 2 :(得分:1)
Dave Teply的方法问题在于它假设您已经拥有VersionControlServer
或至少TeamFoundationServerUri
的实例。
虽然有一种更强大的方法,using the Workstation
class。 Ricci Gian Maria has written a quite extensive blog post关于此主题。以下片段是该帖子的基本要点:
使用Workstation类获取您正在寻找的路径的WorkspaceInfo,这将在工作空间中搜索在该工作站上注册的所有TFS服务器,以查看是否匹配:
Workstation workstation = Workstation.Current;
WorkspaceInfo info = workstation.GetLocalWorkspaceInfo(path);
现在您已拥有WorkspaceInfo,您可以起诉它以连接到TFS,工作区信息包含该特定团队项目集合的ProjectCollectionUri。从那个Workspace实例:
TfsTeamProjectCollection collection = new TfsTeamProjectCollection(info.ServerUri);
Workspace workspace = info.GetWorkspace(collection);
使用集合或工作区来访问VersionControlServer:
VersionControlServer versionControlServer = collection.GetService<VersionControlServer>();