TFS扩展开发中遇到的坑

本码农最近开发一个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 < 1) 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;
                }
  
时间: 2024-07-30 05:31:15

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

iOS开发中遇到的坑 韩俊强的博客( 草稿)

从事iOS开发有些年月了,从最开始的磕磕绊绊,不知所措,到现在的遇到困难都能快速做出最佳方案处理,中间经历了不可或缺的痛苦.在项目开发中,本人有用印象笔记记录的习惯,所以很多重复出现的坑,很快迎刃而解,而不在同一个地方摔倒两次.为此,特意总结了一下开发中经常遇到的坑,有些可能和你形成共鸣,有些在你看来或许是小儿科,不喜勿喷. A valid provisioning profile for this executable was not found. 解决问题所在:发布证书无法运行在真机上!!!

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

普遍: 1.easyui在书写键值对的时候要注意是否要加引号,在需要加引号的地方不加则无法渲染: datagrid数据网格: 1.datagrid默认请求方式是post,如果要使用分页功能pagination,则需要把请求方式method设为get: 2.分页功能的pageSize必须是pageList数组中的其中一个数字,否则会出现url传递的rows=NaN错误: 3.columns因为有可能做成复合列头,所以它本身是一个数组对象,格式[[],[]...],并且属性field必须和返回的数据

小程序开发中的一些坑和技巧

前言 最近公司要开发一款电商小程序,匆忙看了一遍文档就开始干活了.整体开发体验个人感觉不太好,特别是如果之前习惯了Vue开发,突然去开发小程序,感觉很鸡肋.以下是我在开发中遇到的一些问题以及解决方法的总结,仅供参考 引入iconfont 在小程序中引入字体图标要比web麻烦一些,简单说需要三步: 下载iconfont,把iconfont.css复制到iconfont.wxss,在app.wxss中引入 查看iconfont在unicode模式下的在线链接,替换iconfont.wxss中的链接为

记录在一次前后端分离的项目开发中遇到的坑

问题如下图: 在一次实际的项目开发中,我负责前端开发,使用的是vue+axios,后台使用的是php,由于我们的开发环境处于不同的域名和端口下, 所以出现了跨域问题,当然php服务端 可以直接解决这个问题,但是后端设置之后,前端每次都会先发出options请求,然后再post请求, 这说白了,就是每个接口请求两次.我们来分析下原因: 出于安全考虑,并不是所有域名访问后端服务都可以.其实在正式跨域之前,浏览器会根据需要发起一次预检(也就是option请求),用来让服务端返回允许的方法(如get.p

那些SCOM 管理包开发中遇到的坑2&ndash;Multiple Property Bags

前面一篇文章说到为了省事,而且在Authoring guide中的workflow composite 里就说,为了让效率更高,最好让脚本支持Cookdown.然后我的脚本就返回多个Property bags. 为了支持cookdown,我设计了一个自定义datasource,定义如下,简单的来说就是定期执行前面文章中说到的powershell 脚本,这个脚本输出多个Property bags ,为了复用module,我加了一个conditionDetection,使用正则表达式对propert

基于Vue公众号开发中的哪些坑 (严重鄙视ios,遇到的坑基本都是在ios中)

一.ios白屏问题ios端基于vue开发的H5无法正常显示,白屏问题1.代码问题确定方法:在ie/edge浏览器中打开,看是否正常显示,如果仍然白屏,可以确定问题解决方法:1.代码中是否使用es6,如果使用,确定使用es6转es5,(npm install babel-polyfillnpm install es6-promise)2.参考 https://www.cnblogs.com/love314159/articles/9355785.html3.以上方法都不行的话,查看源码是在main

那些在django开发中遇到的坑

1. 关于csrf错误 CSRF(Cross-site request forgery)跨站请求伪造,也被称为“one click attack”或者session riding,通常缩写为CSRF或者XSRF,是一种对网站的恶意利用. django中自带了防止CSRF攻击的手段,在form表单的action属性中,GET时不需要CSRF认证,而POST时需要. 一般而言,有两种解决办法: ① 启用csrf认证 • 在settings.py中启用中间件django.middleware.csrf

接口开发中 遇到的坑——Java byte与C# byte 数据转换问题

前提: 公司与其他公司进行接口对接 需要使用Byte[]数据流传输数据 原本想法如下:直接IO生成就ok了 using System; using System.IO; using System.Text; namespace StreamReader { class Program { public static void Main(byte[] buffer) { System.IO.File.WriteAllBytes(@"D:\合同文件demo.pdf",buffer); }

Retrofit 开发中遇到的坑

持续更新中1.使用@FormUrlEncoded的话,服务端需要使用Request.Form,如果不使用@FormUrlEncoded本地需要由 @FieldMap Map<String, Object> map 改成 @QueryMap Map<String, Object> map ,服务端改为使用Request.QueryString.  2.java.io.IOException: Content-Length and stream length disagree,resp