Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/tfs/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
确定';当前';通过TFSAPI打开工作区?_Api_Tfs - Fatal编程技术网

确定';当前';通过TFSAPI打开工作区?

确定';当前';通过TFSAPI打开工作区?,api,tfs,Api,Tfs,是否有一种方法可以使用TFS API在visual studio中以编程方式确定打开的sln/proj的当前工作区?我已经了解了VersionControlServer如何检索所有已知的工作区,但我是否可以使用任何东西将其与用户当前打开(或未打开)的工作区联系起来?如果您可以确定解决方案或项目文件的物理路径,然后,您可以在TFS中查询该文件,您应该可以看到哪个工作区已映射到该本地文件位置。实例化的VersionControlServer对象的GetWorkspace方法还有另一个覆盖。您可以使用

是否有一种方法可以使用TFS API在visual studio中以编程方式确定打开的sln/proj的当前工作区?我已经了解了VersionControlServer如何检索所有已知的工作区,但我是否可以使用任何东西将其与用户当前打开(或未打开)的工作区联系起来?

如果您可以确定解决方案或项目文件的物理路径,然后,您可以在TFS中查询该文件,您应该可以看到哪个工作区已映射到该本地文件位置。

实例化的
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。我没有意识到工作区的映射路径必须是唯一的,但这是有意义的。太棒了,谢谢!