Попытка загрузить клиентские библиотеки Oracle вызвала BadImageFormatException IIS System.Data.OracleClient

История: Мой веб-сайт работает в System.Data.OraceClient(я не могу изменить dll по различным техническим причинам). Теперь у меня есть сторонняя DLL, встроенная в мой сайт, которая является 32-битной. Когда я запускаю из Visual studio, все работает отлично, но когда я публикую его в IIS, выдает вышеуказанную ошибку.

Теперь решения: включить 32-разрядную в пуле приложений IIS

Когда 32 bit включен, сторонняя DLL начнет работать и System.Data.Oracle client fails with BadImageFormat exception

Отключить 32-разрядную в пуле приложений IIS.

Когда 32 бит отключен System.Data.OracleClient начнет работать, и сторонняя DLL-библиотека потерпит неудачу с приведенной ниже ошибкой.

Не удалось получить фабрику классов COM для компонента с CLSID {xxxxx} из-за следующей ошибки: xxxxxx Класс не зарегистрирован

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

Теперь я нахожусь в ситуации, только одна DLL будет работать одновременно. Есть ли обходной путь, чтобы мой System.Data.OracleClient работал, когда в пуле приложений включен 32Bit, не пытаясь перенести все мое приложение в Oracle Data Access?

2 ответа

Я думаю, что единственный способ достичь этого - создать 32-битное веб-приложение и позволить ему использовать 32-битный клиент. Тогда все 32 бит. Убедитесь, что ваше веб-приложение создано для x86. Не создавайте как AnyCpu, так как это будет по умолчанию для целевой платформы x64.

System.Data.OracleClient устарела целую вечность и больше не должна использоваться. Он доступен только для 32-разрядной версии x86, когда Microsoft прекратила разработку System.Data.OracleClient 64-битная Windows еще не была распространена.

Лучше использовать провайдера ODP.NET от Oracle, он доступен для x86 и x64.

Проверьте также эту инструкцию: BadImageFormatException. Это произойдет при работе в 64-битном режиме с установленными 32-битными клиентскими компонентами Oracle.

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