Попытка загрузить клиентские библиотеки 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.