Получение «ComponentActivatorException» с использованием Castle Windsor из приложения .net 4.0 с использованием компонента .net 2.0 - PullRequest
0 голосов
/ 16 февраля 2010

У меня есть приложение, которое разрабатывается в VS2010 и использует IoC Castle-Windsor через файл конфигурации.

Один из регистрируемых мной компонентов, также разработанный в VS2010, ссылается на компонент .net 2.0 (LeadTools), поэтому перекомпиляция проекта 2.0 невозможна. Когда регистрация компонента обертки завершена, возникает «ComponentActivatorException», которое оборачивает «System.TypeInitializationException», которое, в свою очередь, оборачивает «System.IO.FileLoadException» с сообщением «Сборка смешанного режима создается против версии v2 .0,5027 'среды выполнения и не могут быть загружены в среде выполнения 4.0 без дополнительной информации о конфигурации. "

Я добавил объявление времени выполнения в файл конфигурации приложения следующим образом:

<!-- useLegacyV2RuntimeActivationPolicy is needed for LEADTools-->
<startup useLegacyV2RuntimeActivationPolicy="true">
  <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/>
  <supportedRuntime version="v2.0.50727" />
</startup>

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

Спасибо!

Ответы [ 2 ]

0 голосов
/ 18 февраля 2010

Проблема была связана с использованием «define» s и «if» в файле конфигурации, согласно документации MicroKernel .Удаление всех этих элементов из файла App.Config позволило создать экземпляры компонентов независимо от того, были ли они зарегистрированы в контейнере Windsor.

0 голосов
/ 17 февраля 2010

Я полагаю, вы используете регистрацию через XML?

Что произойдет, если вы зарегистрируете компонент в коде?

Можете ли вы попытаться воспроизвести проблему без ошибок?

Звоните Type.GetType("assembly qualified name of the type from .net 2.0 assembly");

...