Выполнение тестов в Gallio / MbUnit завершилось ошибкой; невозможно загрузить Castle DynamicProxy

У меня есть сборка .NET 3.5, на которую было проведено около 4000 тестов MbUnit. Я без проблем запускал их с помощью программы mbunit.cons.exe.

Теперь я пытаюсь переключиться на Gallio (mbunit.cons.exe начал взрываться с исключением «нехватки памяти» при создании отчета XML).

При запуске тестов в Icarus большинство из них терпят неудачу за следующим исключением:

System.TypeInitializationException: The type initializer for 'Rhino.Mocks.MockRepository' threw an exception. --->
System.IO.FileLoadException: Could not load file or assembly 'Castle.DynamicProxy2, Version=2.0.3.0, Culture=neutral, PublicKeyToken=407dd0808d44fbdc' or one of its dependencies.
The located assembly's manifest definition does not match the assembly reference.
(Exception from HRESULT: 0x80131040) at Rhino.Mocks.MockRepository..cctor()

Тестируемая сборка действительно использует динамический прокси. Сборка динамического прокси находится в том же каталоге, что и тестируемая сборка.

Я попытался поместить каталог, содержащий сборки, в поля «каталоги подсказок», «базовый каталог приложения» и «рабочий каталог» в Icarus, но это не повлияло на результат.

Кто-нибудь успешно использовал Gallio и Dynamic Proxy вместе, или есть какие-либо подсказки относительно того, в чем может быть проблема?


person andypaxo    schedule 06.05.2010    source источник


Ответы (1)


Похоже, Rhino.Mocks ссылается на другую версию Castle.DynamicProxy2. Он пытается найти 'Castle.DynamicProxy2, Version=2.0.3.0, Culture=neutral, PublicKeyToken=407dd0808d44fbdc'. Можете ли вы взглянуть на сборку Castle.DynamicProxy2 в папке bin и узнать, есть ли у нее такая же версия и PubliKeyToken?

person Igor Zevaka    schedule 06.05.2010
comment
Знаешь что? Ты прав! У меня версия 2.1.0.0, но я не могу понять, почему сборка будет корректно работать сама по себе и с MbUnit, а не с Gallio. Оказывается, мы используем две разные сторонние библиотеки DLL (Micro Kernel и Rhino Mocks), которые полагаются на две разные версии Dynamic Proxy. Пройдет время, прежде чем я смогу исправить версии и выяснить, работает ли это. Спасибо, что направили меня на правильный путь. - person andypaxo; 07.05.2010
comment
Rhino.Mocks интернализирует DynamicProxy с помощью ILMerge. Поэтому, если вы не создали свою собственную копию из исходного кода и не выполнили слияние, я удивлен поведением, которое вы описываете. - person Jeff Brown; 08.05.2010
comment
@ Джефф ... Ага, в конце концов понял это. Мы использовали не объединенный выпуск Rhino. К сожалению, объединенная версия не полностью усваивает все, поэтому у нас тоже были проблемы (в нашем проекте используется Castle Windsor). Я сам запускаю ILMerge, чтобы (почти) все усвоить, тем не менее, отлично работает. - person andypaxo; 08.05.2010