确定';当前';通过TFSAPI打开工作区?
是否有一种方法可以使用TFS API在visual studio中以编程方式确定打开的sln/proj的当前工作区?我已经了解了VersionControlServer如何检索所有已知的工作区,但我是否可以使用任何东西将其与用户当前打开(或未打开)的工作区联系起来?如果您可以确定解决方案或项目文件的物理路径,然后,您可以在TFS中查询该文件,您应该可以看到哪个工作区已映射到该本地文件位置。实例化的确定';当前';通过TFSAPI打开工作区?,api,tfs,Api,Tfs,是否有一种方法可以使用TFS API在visual studio中以编程方式确定打开的sln/proj的当前工作区?我已经了解了VersionControlServer如何检索所有已知的工作区,但我是否可以使用任何东西将其与用户当前打开(或未打开)的工作区联系起来?如果您可以确定解决方案或项目文件的物理路径,然后,您可以在TFS中查询该文件,您应该可以看到哪个工作区已映射到该本地文件位置。实例化的VersionControlServer对象的GetWorkspace方法还有另一个覆盖。您可以使用
VersionControlServer
对象的GetWorkspace
方法还有另一个覆盖。您可以使用本地路径调用GetWorkspace
,比如Bernhard states,但也可以使用工作区名称和工作区所有者来调用它。由于工作区名称默认为本地计算机名称,因此通常可以使用Environment.MachineName
,但总是会有开发人员更改工作区名称
例如:
TeamFoundationServerFactory _tfs = TeamFoundationServerFactory.GetServer(server);
_tfs.EnsureAuthenticated();
VersionControlServer _vcs = (VersionControlServer)_tfs.GetService(typeof(VersionControlServer));
Workspace _ws = _vcs.GetWorkspace(Environment.MachineName, Environment.UserName);
Dave Teply的方法的问题在于,它假设您已经有了
VersionControlServer
的实例,或者至少有TeamFoundationServerUri
不过,还有一种更强大的方法。关于这个话题。以下片段是该帖子的要点:
使用Workstation类获取要查找的路径的工作空间信息,这将在工作空间中搜索在该工作站上注册的所有TFS服务器,以查看是否存在匹配项:
Workstation workstation = Workstation.Current;
WorkspaceInfo info = workstation.GetLocalWorkspaceInfo(path);
现在您已经拥有了WorkspaceInfo,可以使用它连接到TFS,WorkspaceInfo包含该特定团队项目集合的ProjectCollectionUri。从中可以看到工作区实例:
TfsTeamProjectCollection collection = new TfsTeamProjectCollection(info.ServerUri);
Workspace workspace = info.GetWorkspace(collection);
使用集合或工作区访问VersionControlServer:
VersionControlServer versionControlServer = collection.GetService<VersionControlServer>();
VersionControlServer VersionControlServer=collection.GetService();
Ah。我没有意识到工作区的映射路径必须是唯一的,但这是有意义的。太棒了,谢谢!