System.NullReferenceException при чтении рабочих элементов из набора изменений - PullRequest
2 голосов
/ 03 апреля 2012

Я писал инструмент на 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. Кроме того, я посмотрел отчет об этих машинах, и ссылки на наборы изменений и рабочие элементы работают правильно!

Кто-нибудь может дать мне причину, почему это не работает и как это исправить, или, может быть, дать мне альтернативу тому, как я могу получить объекты Work Item, не вызывая эту ошибку?

1 Ответ

2 голосов
/ 29 августа 2012

Вот что мне нужно было сделать, чтобы заставить его работать в настройке, подобной вашей ...

Сначала я развернул следующие 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 2.0 вПроект .NET 4.0? (для обхода ошибки, описанной выше)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...