You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

TFS从2010升级至2012/2015时单个集合触发空引用错误求助

我之前帮几个客户搞定过类似的TFS 2010升级到2012/2015时工作项跟踪组件的空引用错误,给你几个实际排查和修复的方向,都是经过验证有效的:

排查与修复方案

1. 检查工作项类型定义(WIT)的损坏

空引用问题最常见的原因就是WIT的XML定义有语法错误或缺失必要节点。你可以用witadmin exportwitd命令导出出问题集合里所有工作项类型的XML文件,然后逐一核查:

  • 确保所有<FIELD>节点都有正确的refname和name属性,没有遗漏System.Id、System.Title这类必填系统字段
  • 检查<WORKFLOW>节点里的状态转换配置,有没有无效的动作或缺失的状态引用
  • 重点留意自定义控件或规则的配置——很多第三方扩展的WIT定义在升级到2012/2015时会出现schema不兼容的情况

2. 验证工作项仓库的数据库一致性

TFS的工作项跟踪依赖底层SQL数据库,你可以在SQL Server里针对该集合的数据库做以下检查:

  1. 运行TFSServerStatus.exe /collection:http://你的TFS服务器地址/集合名称,查看是否有数据库一致性警告
  2. 执行SQL查询定位损坏的工作项记录:
    SELECT * FROM [你的集合数据库名].[dbo].[WorkItemsAre] WHERE SystemId IS NULL
    SELECT * FROM [你的集合数据库名].[dbo].[WorkItemLongTexts] WHERE SystemId IS NULL
    
    如果查到结果,说明存在无效的工作项记录,需要先修复或删除这些条目后再重试升级

3. 禁用第三方扩展和自定义插件

很多时候升级失败是因为第三方工作项插件(比如自定义控件、报表扩展)在新版本TFS里不兼容。你可以先:

  • 在升级前移除TFS服务器上所有第三方扩展
  • 临时禁用工作项跟踪的自定义插件:修改TFS应用服务器上的web.config,把<add key="WorkItemTracking.WorkItemFilter" value="..." />里的自定义过滤器暂时注释掉,升级完成后再恢复

4. 尝试分步升级

如果直接从2010跳到2015失败,建议先升级到2012,完成所有验证后再升级到2015。分步升级不仅能帮你定位是哪个版本的升级步骤触发了问题,而且TFS 2012的升级工具对2010的兼容性更好,可能自动修复一些WIT定义的小问题

5. 复查升级前置条件

确保你没漏掉关键的升级前置步骤:

  • 对TFS 2010的所有集合执行完整备份,包括数据库和应用层数据
  • 运行PreUpgradeCheck.exe工具——别忽略这个工具的输出,哪怕你觉得之前的日志没信息,这里可能藏着被你漏掉的警告
  • 确认SQL Server版本符合目标TFS的要求:TFS 2012支持SQL 2008R2及以上,TFS 2015支持SQL 2012及以上

小贴士:如果以上方法都没解决,你可以试试创建一个空白集合,把出问题集合里的项目逐一迁移过去(用TFS项目迁移工具或手动导出导入WIT、工作项),再升级新集合。这种方法虽然繁琐,但能绕过集合底层的损坏问题

内容的提问来源于stack exchange,提问作者maouriceg

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 07:14:45