TFS API:GetLocalWorkspaceInfo总是返回null(TFS API: Get

2019-08-22 01:26发布

在我的一台机器,我得到任何空的返回值GetLocalWorkspaceInfo电话。 我已经隔离,问题在那里,即使失败,这个简单的程序:

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
        }
    }
}

我已经检查:

  • 完全相同的代码工作我的另一台计算机上的方式应该。

  • 我核实,我有一个工作区C:\Dev

  • 我创建了一个新的工作区,并在不同的目录,并改变了workspaceLocalPath代码相匹配的变量。

  • 我曾咨询文件其中指出,返回值将是零if the path is not in a workspace 。 从以上的图像,该路径应该是在一个工作空间。

然而,一切都似乎在暗示这应该工作。 有什么我可能会错过?

Answer 1:

我知道这是旧的文章,只是想分享,我们有解决方法,通过使用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));
}


Answer 2:

当执行tf workspaces在Visual Studio 2010中的命令提示符(我的电脑),它说No workspace matching * found on this computer ,但在Visual Studio 2012中执行相同的命令,当它返回我所有的预期工作空间。

这个问题可以通过以下任一方式来解决:

  • 参考该版本Microsoft.TeamFoundation.VersionControl.Client这是与Visual Studio 2012而不是使用Visual Studio 2010连接的dll连接DLL。

  • 打开Visual Studio 2010,并把它连接到TFS到它会创建的Visual Studio 2010的工作区



Answer 3:

从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);

我加了上面的代码行到我的TFS代理类的使用GetLocalWorkspaceInfo构造。



Answer 4:

在我的情况下,由于发生在TFS缓存把VersionControl.config文件这个问题(C:\用户\ DeepakR \应用程序数据\本地\微软\的Team Foundation \ 5.0 \缓存\挥发性\ 0cb76a25-2556-4bd6-ADAA-5e755ac07355_http)文件夹无二一甩即如预期所配置的工作空间信息无法获得。

因此,它基本上需要VersionControl.config文件的刷新。 自动Refersh发生在Visual Studio中被再次加载,即从服务器拉配置工作区的信息,并更新配置文件或者即使我们执行命令TF实用程序(tf.exe工作区/集:TFSURL)

Microsoft.TeamFoundation.VersionControl.Client的(v12.0.0.0)工作站类有一个功能EnsureUpdateWorkspaceInfoCache它会做同样的伎俩

VersionControlServer VCS =(VersionControlServer)tpc.GetService(typeof运算(VersionControlServer)); Workstation.Current.EnsureUpdateWorkspaceInfoCache(VCS,Environment.UserName);

https://msdn.microsoft.com/en-us/library/microsoft.teamfoundation.versioncontrol.client.workstation.ensureupdateworkspaceinfocache(v=vs.120).aspx

希望建议有助于解决这个问题。



Answer 5:

我曾使用Visual Studio 2017年,再加上安装了几个其他版本和一些当地的工作区最近这个问题(今天)。

我结束了更新“Team Foundation Server的客户端” NuGet包到最新版本( 15.x通过“管理的NuGet包”菜单),并固定它。

我当时还首先删除现有的项目引用,但该部分可能取决于你所需要的。



Answer 6:

这是如何找到工作区时,你有服务器的路径:

  Workspace[] workspaces = _versionControl.QueryWorkspaces(null, Environment.UserName, Environment.MachineName);
  return workspaces.FirstOrDefault(w => !string.IsNullOrEmpty(w.TryGetLocalItemForServerItem(ConstDefaultFlowsTfsPath)));

ConstDefaultFlowsTfsPath是服务器的路径"$"例如: "$/MyCompany/Services/DiagnosticsFlows"

您也可以替换最后一行:

return workspaces.FirstOrDefault(w => !string.IsNullOrEmpty(w.GetServerItemForLocalItem(myLocalPath)));

这应该为你工作了。



Answer 7:

只需使用的招数运行

没有什么会不正确的DLL参考正常工作。 下有固定的同样的问题,我有5天,因为它是我的拧时间可达。

将下面的DLL在项目的bin文件夹,并给所有的DLL的整个解决方案的参考。 如果有错误出现,如“参考不能给予”忽略它,并从给参考,而不是仅仅的地方也是错误创造bin文件夹中的DLL该项目将建设过程中会自动采取跳过DLL

DLL的:

Microsoft.TeamFoundation.Client.dll                                  
Microsoft.TeamFoundation.Common.dll                                   
Microsoft.TeamFoundation.Core.WebApi.dll                              
Microsoft.TeamFoundation.TestManagement.Client.dll                    
Microsoft.TeamFoundation.TestManagement.Common.dll                    
Microsoft.TeamFoundation.Work.WebApi.dll                              
Microsoft.TeamFoundation.WorkItemTracking.Client.DataStoreLoader.dll  
Microsoft.TeamFoundation.WorkItemTracking.Client.dll                  
Microsoft.TeamFoundation.WorkItemTracking.Common.dll                  
Microsoft.TeamFoundation.WorkItemTracking.Controls.dll                
Microsoft.TeamFoundation.WorkItemTracking.Proxy.dll                   
Microsoft.TeamFoundation.WorkItemTracking.WebApi.dll                  
Microsoft.VisualStudio.Services.Client.Interactive.dll                
Microsoft.VisualStudio.Services.Common.dll                            
Microsoft.VisualStudio.Services.WebApi.dll                            
Microsoft.WITDataStore32.dll                                          
Microsoft.WITDataStore64.dll                                          

上述DLL的可以在下面的路径中,如果系统中安装MTM或TFS

路径:C:\ Program Files文件(x86)的\微软的Visual Studio \ 2017年\企业\ Common7 \ IDE \ CommonExtensions \微软\ TeamFoundation \团队资源管理器



文章来源: TFS API: GetLocalWorkspaceInfo always returns null
标签: c# tfs-sdk