Team Foundation获取工作区错误

时间:2016-05-26 20:43:42

标签: c# tfs

我正在尝试让本地工作区与远程工作区同步。远程工作区是WindowsMain / MainProject / Subproject,本地是C:/ MainProject / Subproject问题是当我运行下面显示的代码时它表示没有映射本地工作区。我做错了什么使它找不到代码? (localpath是C:/ MainProject / Subproject

TfsTeamProjectCollection tfs = TfsTeamProjectCollectionFactory.GetTeamProjectCollection(new Uri("http://remoteserver:8080/tfs_proj/WindowsMain"), new UICredentialsProvider()); tfs.EnsureAuthenticated(); VersionControlServer vsStore = tfs.GetService<VersionControlServer>(); Workspace workspace = vsStore.GetWorkspace(localpath);

2 个答案:

答案 0 :(得分:2)

我不确定你想要的是什么,
...但这是我使用的代码(我记得当时找不到正确的解决方案):

teamProjectCollection = new TfsTeamProjectCollection(new Uri(collectionUri), new TfsClientCredentials());
teamProjectCollection.Authenticate();
versionControl = teamProjectCollection.GetService<VersionControlServer>();  
  

(注意:这样的凭据会自动从中选择   你在VS)中使用

然后我得到所有的工作区(在你的情况下它可能只是一个) - 这有助于为服务器和客户端获得正确的matching pathsWorkstation类做同样的事情,如果没有& #39;因某种原因工作,这样做)

versionControl.QueryWorkspaces(null, null, computerName)
    .SelectMany(x => x.Folders); // returns IEnumerable<WorkingFolder>  

选择您需要的工作区,同时拥有本地和服务器路径

LocalSourcePath = folder.LocalItem;
ServerPath = folder.ServerItem;  

...然后我使用ServerPathversionControl来实际下载文件(例如,您可以针对LocalSourcePath检查它们)...

foreach (Item item in
    versionControl.GetItems(serverPath, VersionSpec.Latest, RecursionType.Full, DeletedState.NonDeleted, ItemType.Any, true).Items)
{
    string target = Path.Combine(downloadPath, item.ServerItem.Substring(2));
    if (item.ItemType == ItemType.Folder && !Directory.Exists(target))
    {
        Directory.CreateDirectory(target);
    }
    else if (item.ItemType == ItemType.File)
    {
        item.DownloadFile(target);
    }
}  

...这可能与您的情况略有不同,但您应该能够从中找出具体细节,希望它有所帮助。

答案 1 :(得分:1)

根据您的代码,您需要传递VersionControlServer对象,并且要获得这样的对象,您需要知道工作空间映射到的Tfs服务器的地址。

如果您可以确定解决方案或项目文件的物理路径,那么您可以在TFS中查询该文件,您应该看到哪个工作区已映射到该本地文件位置。注意:工作空间的映射路径必须是唯一的。

此外,使用 Workstation 类还有更强大的方法。 Ricci Gian Maria 撰写了一篇关于此主题的博文。

使用Workstation类获取您正在寻找的路径的WorkspaceInfo,这将在工作空间中搜索在该工作站上注册的所有TFS服务器,以查看是否匹配:

Workstation workstation = Workstation.Current;
WorkspaceInfo info = workstation.GetLocalWorkspaceInfo(path);

更多详情请参阅他的博客:How to get TFS server address from a local folder mapped to a workspace