从Changeset读取工作项时出现System.NullReferenceException

时间:2012-04-03 13:06:42

标签: c# tfs2010

我一直在用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的计算机出错。另外,我已经看过这些机器上的报告,并且更改集和工作项的链接正常工作!

任何人都可以告诉我为什么这不起作用以及如何修复它,或者可能让我替代我获得的工作项对象而不会导致此错误?

1 个答案:

答案 0 :(得分:2)

以下是我必须要做的事情才能让它在类似于你的设置中工作......

首先,我将以下dll和可执行文件一起部署到目标TFS-less计算机:

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?(针对上述错误的解决方法)