Попытка загрузки клиентских библиотек Oracle вызвала BadImageFormatException
При попытке подключиться к базе данных oracle из.net получилось следующее исключение:
Attempt to load Oracle client libraries threw BadImageFormatException. This problem will occur when running in 64 bit mode with the 32 bit Oracle client components installed.
Пройдя по многим ссылкам, я попытался преодолеть это исключение, изменив цель платформы на Любой ЦП. Поскольку это приложение wpf, после изменения цели платформы выдается следующее исключение:
'The invocation of the constructor on type 'SSC_GIP_UI.MainWindow' that matches the specified binding constraints threw an exception.' Line number '3' and line position '9'.
Но он отлично работает с целевой платформой x86, не выдавая вышеуказанное исключение, но выдает BadImageFormatException
,
Окружение, над которым я работаю:
Windows Server 2008,
.net Framework 4.0, Oracle 11g (64-разрядная версия)
может кто-нибудь сказать мне. как это исправить?
3 ответа
Эта ошибка указывает на несоответствие между 32-битными и 64-битными компонентами в вашем приложении.
Когда вы запускаете приложение в 64-битной Windows, оно может работать как в 64-битном или 32-битном. Если вы установили целевую платформу как x86, она будет работать как 32-битная. Если вы установили целевой платформой x64 или AnyCpu, он будет работать как 64 бит.
Oracle имеет разные версии своего клиента, одна 32-битная, а другая 64-битная. Итак, если ваше приложение работает в 32-битном режиме, вам нужно убедиться, что ваш 32-битный клиент Oracle установлен.
Я думаю, что, возможно, вам нужно: Открыть IIS, найти, какой пул приложений использует это приложение. Перейти к этому пулу приложений, установить отметку в "Включить 32-разрядные приложения".
Совершенно альтернативным решением было бы использовать поставщик данных Oracle для.NET, который предоставит вам доступ к dll Oracle.ManagedDataAccess, который работает независимо от того, используете ли вы 32- или 64-разрядную версию. Прочитайте эту статью из журнала Oracle для нежного введения.
Вы можете использовать его почти так же, как System.Data.OracleClient, хотя я не уверен, что между ними есть соотношение функций, поэтому ваш пробег может отличаться.