【发布时间】:2012-08-29 04:41:06
【问题描述】:
我一直在用 c# 编写一个工具,该工具将在特定日期之间生成与构建相关的变更集和工作项的 html 报告。该报告还包括使用此question 中描述的方法的变更集和工作项的链接。当我运行该工具时,我没有遇到任何问题,但我已经将它交给了其他一些人进行测试,结果有一些好坏参半。有些人能够毫无问题地运行该工具,但其他人在未安装 TFS 2010 的机器上运行该工具时会出错。有问题的错误消息是
System.NullReferenceException: Object reference not set to an instance of an object at Microsoft.TeamFoundation.VersionControl.Client.Changeset.get_WorkItems()
通过在此类机器上的测试,我发现我的工具可以毫无问题地连接到 TFS,并且还可以毫无问题地读取 Chageset 项,但是在获取与变更集关联的工作项的详细信息时,就会发生错误。让工作项循环的代码是
WorkItem[] csWorkItems = changeSet.WorkItems;
我很困惑为什么这会导致未安装 TFS 2010 的机器出现错误。此外,我查看了有关这些机器的报告,并且更改集和工作项的链接正常工作!
谁能给我一个为什么这不起作用的原因以及如何解决它,或者给我一个替代方法来替代我获得工作项对象的方式而不会导致此错误?
【问题讨论】:
-
其他机器上的 TFS 用户权限有什么不同吗?另外,您在日期范围内是否有任何已损坏的变更集?
-
@mellamokb 我认为 TFS 权限没有任何差异。我是一名 TFS 管理员,并在未安装 TFS 的虚拟机上测试了该工具。错误仍然产生。但是,如果我查看虚拟机上保存的报告(在正确运行该工具的机器上生成),我仍然可以通过报告中的链接查看变更集和工作项。我也很确定我们没有任何被破坏的变更集。
-
只是为了澄清:失败的机器安装了什么?只是 Visual Studio 和团队资源管理器? (但不是 TFS 服务器安装?)您的
using语句是什么样的?你在链接什么库?当您希望链接Microsoft.TeamFoundation客户端 DLL 时,您是否意外链接了服务器 DLL? -
失败的机器没有安装 TFS,也没有 Visual Studio 或 Team Explorer。我的使用语句如下所示:
using Microsoft.TeamFoundation.Client;using Microsoft.TeamFoundation.Build.Client;using Microsoft.TeamFoundation.VersionControl.Client;using Microsoft.TeamFoundation.WorkItemTracking.Client;using Microsoft.TeamFoundation.Common;但是,我将工具和这些 dll 打包在一个 msi 中,以便该工具在这些没有 TFS、VS 的机器上工作或团队资源管理器
标签: c#