在我的一台机器上,我从任何GetLocalWorkspaceInfo调用中得到null的返回值.对于这个简单的程序,我已经孤立到问题甚至失败了:
namespace WorkstationTest
{
using Microsoft.TeamFoundation.VersionControl.Client;
class Program
{
static void Main()
{
string workspaceLocalPath = @"C:\Dev";
var info = Workstation.Current
.GetLocalWorkspaceInfo(workspaceLocalPath);
// info is always null here
}
}
}
Run Code Online (Sandbox Code Playgroud)
我已经检查过:
完全相同的代码就像我应该的那样在我的另一台机器上工作.
我已经确认我有一个工作区 C:\Dev

我创建了一个新工作区并在不同的目录中更改workspaceLocalPath了代码中的变量以匹配.
我查阅了文档,其中声明返回值为null if the path is not in a workspace.从上图中,路径应位于工作区中.
然而,一切似乎都表明这应该有效.有什么我可以失踪的吗?
Val*_*ino 15
在我工作的公司从TFS2013迁移到TFS2017后,我遇到了与Workstation.Current.GetLocalWorkspaceInfo相同的问题.
对我有用的是致电Workstation.EnsureUpdateWorkspaceInfoCache:
TfsTeamProjectCollection tpc = TfsTeamProjectCollectionFactory.GetTeamProjectCollection(new Uri("<your-tfs-uri-here>"));
VersionControlServer tfServer = tpc.GetService<VersionControlServer>();
Workstation.Current.EnsureUpdateWorkspaceInfoCache(tfServer, tfServer.AuthorizedUser);
Run Code Online (Sandbox Code Playgroud)
我将上面的代码行添加到使用GetLocalWorkspaceInfo的TFS代理类的构造函数中.
Nic*_*man 14
tf workspaces它在Visual Studio 2010命令提示符下执行(在我的计算机上)No workspace matching * found on this computer,但是当在Visual Studio 2012中执行相同的命令时,它返回所有我期望的工作空间.
可以通过执行以下任一操作来解决此问题:
引用Microsoft.TeamFoundation.VersionControl.Client与Visual Studio 2012连接的dll 版本,而不是与Visual Studio 2010连接的dll.
打开Visual Studio 2010并将其连接到TFS,以便为Visual Studio 2010创建工作区
小智 8
在我的情况下,出现此问题是因为VersionControl.config文件放在TFS缓存下(C:\ Users\DeepakR\AppData\Local\Microsoft\Team Foundation\5.0\Cache\Volatile\0cb76a25-2556-4bd6-adaa-5e755ac07355_http)文件夹进行折腾,即配置的工作区信息无法按预期方式使用.
所以,它基本上需要刷新VersionControl.config文件.当Visual Studio再次加载时会发生Auto Refersh,即它从Server中提取已配置的工作区信息并更新配置文件,或者即使我们执行tf命令实用程序(tf.exe workspaces/collection:TFSURL)
Microsoft.TeamFoundation.VersionControl.Client(v12.0.0.0)Workstation类有一个函数EnsureUpdateWorkspaceInfoCache,它将执行相同的技巧
VersionControlServer vcs =(VersionControlServer)tpc.GetService(typeof(VersionControlServer)); Workstation.Current.EnsureUpdateWorkspaceInfoCache(vcs,Environment.UserName);
希望该建议有助于解决问题.
小智 7
我知道这是一篇旧帖子,但我想通过使用VersionControlServer.QueryWorkspaces在他/她的机器上查询用户的所有工作区来分享我们的解决方法.
private static Workspace FindWorkspaceByPath(TfsTeamProjectCollection tfs, string workspacePath)
{
VersionControlServer versionControl = tfs.GetService<VersionControlServer>();
WorkspaceInfo workspaceInfo = Workstation.Current.GetLocalWorkspaceInfo(workspacePath);
if (workspaceInfo != null)
{
return versionControl.GetWorkspace(workspaceInfo);
}
// No Workspace found using method 1, try to query all workspaces the user has on this machine.
Workspace[] workspaces = versionControl.QueryWorkspaces(null, Environment.UserName, Environment.MachineName);
foreach (Workspace w in workspaces)
{
foreach (WorkingFolder f in w.Folders)
{
if (f.LocalItem.Equals(workspacePath))
{
return w;
}
}
}
throw new Exception(String.Format("TFS Workspace cannot be determined for {0}.", workspacePath));
}
Run Code Online (Sandbox Code Playgroud)