通过TFS API识别“当前”打开工作区?

时间:2009-01-07 21:55:25

标签: api tfs

有没有办法使用TFS API以编程方式确定visual studio中open sln / proj的当前工作空间?我已经看到VersionControlServer如何可以检索所有已知的工作区,但有什么我可以用来将它与用户当前拥有(或没有)打开的东西联系起来吗?

3 个答案:

答案 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 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。从那个Workspace实例:

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

使用集合或工作区来访问VersionControlServer:

VersionControlServer versionControlServer = collection.GetService<VersionControlServer>();