Spring CodeConfig ScanAllAssemblies создает исключение ReflectionTypeLoadException

Я пробую новый Spring CodeConfig для.NET, но у меня куча проблем.

Я установил пакет NuGet Spring.CodeConfig в существующий проект.NET 4, но у меня не было ничего, кроме проблем с ним.

Метод ScanAllAssemblies выдает исключение ReflectionTypeLoadException при запуске этого кода:

var context = new CodeConfigApplicationContext();
context.ScanAllAssemblies();
context.Refresh();

Это происходит, даже если я не определил класс конфигурации, но это также происходит, если я создаю класс конфигурации.

Свойство LoaderExceptions содержит единственное исключение с этим сообщением:

Не удалось загрузить файл или сборку "Система, версия =1.0.3300.0, культура = нейтральная, PublicKeyToken=b77a5c561934e089" или одна из ее зависимостей. Неверный указатель (исключение из HRESULT: 0x80004003 (E_POINTER))

Я попытался добавить перенаправление сборки из версии 1.0.3300.0 системы в версию 4.0.0.0, на которую ссылается мой проект, но это не работает.

Как я могу решить эту проблему?


По запросу, вот ссылки из рассматриваемого проекта:

  • mscorlib, версия = 4.0.0.0, культура = нейтральная, PublicKeyToken=b77a5c561934e089
  • Ploeh.Samples.MenuModel, версия = 1.0.0.0, культура = нейтральная, PublicKeyToken = ноль
  • Spring.Aop, версия =1.3.1.40711, культура = нейтральная, PublicKeyToken=65e474d141e25e07
  • Spring.Core, версия =1.3.1.20711, культура = нейтральная, PublicKeyToken=65e474d141e25e07
  • Spring.Core, версия =1.3.1.40711, культура = нейтральная, PublicKeyToken=65e474d141e25e07
  • Spring.Core.Configuration, версия = 1.0.0.4111, культура = нейтральная, PublicKeyToken=65e474d141e25e07
  • Система, Версия = 4.0.0.0, Культура = нейтральная, PublicKeyToken=b77a5c561934e089
  • System.Core, версия = 4.0.0.0, культура = нейтральная, PublicKeyToken=b77a5c561934e089
  • System.Xml, версия = 4.0.0.0, культура = нейтральная, PublicKeyToken=b77a5c561934e089
  • System.Xml.Linq, версия = 4.0.0.0, культура = нейтральная, PublicKeyToken=b77a5c561934e089
  • xunit, версия = 1.7.0.1540, культура = нейтральная, PublicKeyToken=8d05b1bb7a6fdb6c

Поскольку вторая ссылка является ссылкой на проект, я также перечисляю ее зависимости:

  • mscorlib, версия = 4.0.0.0, культура = нейтральная, PublicKeyToken=b77a5c561934e089
  • System.Core, версия = 4.0.0.0, культура = нейтральная, PublicKeyToken=b77a5c561934e089

У меня также есть эти перенаправления привязки в моем App.config - в случае, если это имеет значение:

<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
  <dependentAssembly>
    <assemblyIdentity name="Spring.Core" publicKeyToken="65e474d141e25e07" culture="neutral" />
    <bindingRedirect oldVersion="1.3.1.20711" newVersion="1.3.1.40711" />
  </dependentAssembly>
  <dependentAssembly>
    <assemblyIdentity name="System" publicKeyToken="b77a5c561934e089" culture="neutral" />
    <bindingRedirect oldVersion="1.0.3300.0" newVersion="4.0.0.0" />
  </dependentAssembly>
</assemblyBinding>

Однако обе были попытками исправить проблемы с CodeConfig. Удаление их не помогает...

1 ответ

После некоторого расследования мы определили это как проблему с ReflectionOnlyLoad API в 4.0 CLR.

Сканирование сборки CodeConfig работает в среде CLR 2.0, но, очевидно, несмотря на отсутствие явных изменений в API ReflectionOnlyLoad между.NET 3.5 и.NET 4.0, похоже, существуют поведенческие различия в том, как ReflectionOnlyLoad обрабатывает зависимые сборки (или, точнее, то, как мы являются программно разрешающими типами для API ReflectionOnlyLoad в.NET 4.0).

Команда Spring.NET сейчас работает над быстрым обновленным выпуском CodeConfig (1.0.1), который должен правильно решить эту проблему и разрешить его успешное использование в.NET 4.0. Спасибо, что обратили на это наше внимание!

Другие вопросы по тегам