从变更集中读取工作项时出现System.NullReferenceException

本文关键字:System NullReferenceException 工作 集中 读取 | 更新日期: 2023-09-27 18:29:56

我一直在c#中编写一个工具,该工具将生成一个关于变更集和与特定日期之间的构建相关联的工作项的html报告。该报告还包括使用本问题中描述的方法的变更集和工作项的链接。当我运行这个工具时,我没有遇到任何问题,但我已经把它交给了其他人进行测试,结果喜忧参半。有些人能够毫无问题地运行该工具,但另一些人在未安装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的计算机上导致错误。此外,我已经看过这些机器上的报告,到变更集和工作项的链接工作正常!

有人能告诉我为什么这不起作用以及如何修复它吗?或者给我一个替代方法,我可以在不导致此错误的情况下处理工作项对象吗?

从变更集中读取工作项时出现System.NullReferenceException

以下是我为使它在类似于您的设置中工作所做的。。。

首先,我将以下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的提示,这帮助我找到了实际的潜在错误)。

什么';附加配置';是否需要在.NET 4.0项目中引用.NET 2.0混合模式程序集?(针对上述错误的解决方法)