本码农最近开发一个VS扩展,其中有些功能涉及到文件的签出。我们公司用的是TFS,遇到了一些奇特的现象,将解决过程记录如下。

一、明明在线的连接却Offline属性等于True

 public static Workspace GetWorkspace(string slnDir)
{ var projectCollections = new List<RegisteredProjectCollection>((RegisteredTfsConnections.GetProjectCollections()));
var onlineCollections = projectCollections.Where(c => !c.Offline).ToList(); // fail if there are no registered collections that are currently on-line
if (!onlineCollections.Any())
{
return null;
}
Workspace workspace = null;
// find a project collection with at least one team project
foreach (var registeredProjectCollection in onlineCollections)
{
var projectCollection = TfsTeamProjectCollectionFactory.GetTeamProjectCollection(registeredProjectCollection);
projectCollection.EnsureAuthenticated();
var versionControl = (VersionControlServer)projectCollection.GetService(typeof(VersionControlServer));
var teamProjects = new List<TeamProject>(versionControl.GetAllTeamProjects(false));
// if there are no team projects in this collection, skip it
if (teamProjects.Count < ) continue; var dir = new DirectoryInfo(slnDir);
while (workspace == null)
{
workspace = versionControl.TryGetWorkspace(dir.FullName);
if (dir.Parent == null)
break;
dir = dir.Parent;
} if (workspace != null && workspace.HasUsePermission)
break;
}
return workspace;
}

 现象就是上面这段代码中

var onlineCollections = projectCollections.Where(c => !c.Offline).ToList();

一句找不到想要的在线的TFS Server

首先尝试了删除Local AppData中(C:\Users\*\AppData\Local\Microsoft\Team Foundation)的Cache,不起作用。

然后找到注册表

HKEY_USERS\S-1-5-21-2532103873-3336248781-2863026242-1503\Software\Microsoft\VisualStudio\11.0\TeamFoundation\Instances\tfs.yintai.org\Collections\PlatformCollection
将此节点下Offline改为0

可以了。

原因不明,可能跟连接了多个TFS有关。

二、TryGetWorkspace方法找不到对应的Workspace

然后又遇到

workspace = versionControl.TryGetWorkspace(dir.FullName);

总是返回null

后改为使用QueryWorkspaces方法遍历所有workspace解决

将这段

 var dir = new DirectoryInfo(slnDir);
while (workspace == null)
{
workspace = versionControl.TryGetWorkspace(dir.FullName);
if (dir.Parent == null)
break;
dir = dir.Parent;
}

替换为

  try
{
Workspace[] workspaces = versionControl.QueryWorkspaces(null, Environment.UserName,
Environment.MachineName);
foreach (var ws in workspaces)
{
foreach (var folder in ws.Folders)
{
if (slnDir.StartsWith(folder.LocalItem))
{
workspace = ws;
break;
}
}
if (workspace != null && workspace.HasUsePermission)
break;
}
}
catch
{
continue;
}
  

TFS扩展开发中遇到的坑的更多相关文章

  1. ios怎样实现快速将显卡中数据读出压缩成视频在cocos2dx扩展开发中

    如果解决ios怎样实现快速将显卡中数据读出压缩成视频在cocos2dx扩展开发中 手机平台性能是个关键问题. 压缩视频分成3个步骤: 读取显卡数据, 使用编码器压缩,保存文件. 使用libav 压缩的 ...

  2. 总结微信小程序开发中遇到的坑

    总结微信小程序开发中遇到的坑,一些坑你得一个一个的跳啊,/(ㄒoㄒ)/~~ 1,页面跳转和参数传递实例 首先说一下我遇到的需求有一个我的消息页面,里面的数据都是后端返回的,返回的数据大致如下,有一个是 ...

  3. celery开发中踩的坑

    celery开发中踩的坑 celery连接redis 当使用redis做broker,redis连接需要密码时: BROKER_URL='redis://:xxxxx@127.0.0.1:6379/0 ...

  4. AngularJS移动开发中的各种坑

    捂脸,辛酸泪ing...... 本文主要涉及部分在移动设备上特有的问题. 相对来说,Jquery侧重DOM操作,AngularJS是以视图模型和双向绑定为核心的. DOM操作的问题 避免使用 jQue ...

  5. TFS自定义开发中的反射应用

    最近CM(Configuration Management) 的同事在自定义开发TFS的过程中遇到一个问题. 领导要求快速开发一个工具, 可以自动连接TFS,然后自动Check out一些word文件 ...

  6. 【EasyUI总结】EasyUI开发中遇到的坑

    普遍: 1.easyui在书写键值对的时候要注意是否要加引号,在需要加引号的地方不加则无法渲染: datagrid数据网格: 1.datagrid默认请求方式是post,如果要使用分页功能pagina ...

  7. 关于ionic开发中遇到的坑与总结

    这次是第二次使用ionic开发混合app,今天算是对这个框架做一个总结,基础的我就不再重复了,网上都有教程.我就说说自己的心得和遇见的各种坑, 之后会陆续补充,想到什么说什么吧. 1.关于ionic效 ...

  8. ionic开发中的各种坑

    提前说明:这些坑是ionic1的. 一.关于缓存:<ion-view>中设置cache-view="false"表示禁用缓存,默认为true; 二.列表进入详情页面后返 ...

  9. 那些在django开发中遇到的坑

    1. 关于csrf错误 CSRF(Cross-site request forgery)跨站请求伪造,也被称为“one click attack”或者session riding,通常缩写为CSRF或 ...

随机推荐

  1. java 表格项的删除、编辑、增加 修改版

    修改之后的java 代码: package com.platformda.optimize; import java.awt.BorderLayout; import java.awt.Button; ...

  2. buffer busy waits

    Buffer busy waits 当会话想要访问缓冲区中的数据块,而该数据块正在被其他会话使用时将产生Buffer busy waits事件. 其他会话可能正从数据文件向缓冲器读取同样的数据块,或正 ...

  3. NOIP2014解方程

    题目:求一个n次整系数方程在1-m内的整数解  n<=100 系数<=10000位 m<=100W 题解:最暴力的想法是枚举x,带入求值看是否为0. 这样涉及到高精度乘高精度,高精度 ...

  4. Node.js权威指南 (4) - 模块与npm包管理工具

    4.1 核心模块与文件模块 / 574.2 从模块外部访问模块内的成员 / 58 4.2.1 使用exports对象 / 58 4.2.2 将模块定义为类 / 58 4.2.3 为模块类定义类变量或类 ...

  5. 字符串(后缀自动机):Ahoi2013 差异

    Description Input 一行,一个字符串S Output 一行,一个整数,表示所求值 Sample Input cacao Sample Output 54 HINT 2<=N< ...

  6. 最棒的Visual Studio扩展

    isual Studio是微软公司推出的开发环境,Visual Studio可以用来创建Windows平台下的Windows应用程序和网络应用程序,也可以用来创建网络服务.智能设备应用程序和Offic ...

  7. (转载)ubuntu安装pyton-pip问题解决

    一.问题描述 root@ubuntu:/home/chao# apt-get install python-pip 正在读取软件包列表... 完成 正在分析软件包的依赖关系树 正在读取状态信息... ...

  8. 【C++】冒泡排序、插入排序、快速排序

    #include<iostream> using namespace std; void BubbleSort(int *a,int istart,int len)//冒泡排序 { //a ...

  9. PHP小题目 求 1*3+5*7+…+97*99的值

    下面是另外两种比较基础的方法实现的代码

  10. thinkphp I方法取传参

    /** * 获取输入参数 支持过滤和默认值 * 使用方法: * <code> * I('id',0); 获取id参数 自动判断get或者post * I('post.name','','h ...