【问题标题】:System.NullReferenceException when reading Work Items from Changeset从变更集中读取工作项时出现 System.NullReferenceException
【发布时间】: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#


【解决方案1】:

这是我必须做的才能让它在类似于你的设置中工作......

首先,我将以下 dll 与可执行文件一起部署到目标无 TFS 机器:

Microsoft.TeamFoundation.Client.dll
Microsoft.TeamFoundation.Common.dll
Microsoft.TeamFoundation.Common.Library.dll
Microsoft.TeamFoundation.dll
Microsoft.TeamFoundation.VersionControl.Client.dll
Microsoft.TeamFoundation.VersionControl.Common.dll
Microsoft.TeamFoundation.VersionControl.Common.Integration.dll
Microsoft.TeamFoundation.WorkItemTracking.Client.Cache.dll
Microsoft.TeamFoundation.WorkItemTracking.Client.DataStore.dll
Microsoft.TeamFoundation.WorkItemTracking.Client.dll
Microsoft.TeamFoundation.WorkItemTracking.Client.RuleEngine.dll
Microsoft.TeamFoundation.WorkItemTracking.Proxy.dll

然后(这是关键部分)我将以下部分添加到我的 App.config 文件中:

<startup useLegacyV2RuntimeActivationPolicy="true">
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/>
</startup>

原来其中一个 dll 依赖项未正确加载,但底层异常“混合模式程序集是针对运行时的版本‘v2.0.50727’构建的,如果没有额外的配置信息,无法在 4.0 运行时加载。”在我拆分 WorkItemStore 的声明之前一直对我隐藏。

在尝试解决此问题时归功于以下来源:

http://social.msdn.microsoft.com/Forums/is/tfsworkitemtracking/thread/dadb5406-d1fd-4078-83ce-4d8f8f07720b(提示建议单独声明单独的 WorkItemStore,这有助于我找到实际的潜在错误)。

What 'additional configuration' is necessary to reference a .NET 2.0 mixed mode assembly in a .NET 4.0 project?(用于上述错误的解决方法)

【讨论】:

    猜你喜欢
    • 2014-10-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-23
    • 2023-03-25
    • 1970-01-01
    • 1970-01-01
    • 2011-08-05
    相关资源
    最近更新 更多