Получение “ComponentActivatorException” с использованием Castle Windsor из приложения .net 4.0 с использованием компонента .net 2.0
-
21-09-2019 - |
Вопрос
У меня есть приложение, которое разрабатывается в VS2010 и использует IoC Castle-Windsor через файл конфигурации.
Один из регистрируемых мной компонентов, также разработанный в VS2010, ссылается на компонент .net 2.0 (LeadTools), поэтому перекомпиляция проекта 2.0 не является вариантом.Когда регистрация завершающего компонента завершена, возникает "ComponentActivatorException", которое завершает "System.Исключение TypeInitializationException", которое, в свою очередь, оборачивает "Исключение System.IO.FileLoadException" сообщением "Сборка в смешанном режиме собрана в соответствии с версией 'v2.0.50727' среды выполнения и не может быть загружена в среду выполнения 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>
Это прекрасно работает, если компонент wrapping не зарегистрирован в Windsor, однако в противном случае он, похоже, игнорирует директивы.
Спасибо!
Решение 2
Проблема была связана с использованием "define" и "if" в файле конфигурации, в соответствии с Документация по микроядру.Удаление всех этих элементов из файла App.Config позволило создать экземпляры компонентов, независимо от того, были они зарегистрированы в контейнере Windsor или нет.
Другие советы
Я предполагаю, что вы используете регистрацию через XML?
Что произойдет, если вы зарегистрируете компонент в коде?
Можете ли вы попытаться воспроизвести проблему без ошибок?
позвонить Type.GetType("assembly qualified name of the type from .net 2.0 assembly");