Как указать System.Data.OracleClient использовать 64-битный драйвер Oracle
Я пытаюсь запустить приложение.NET, которое использует System.Data.OracleClient
на рабочей станции Win7 x64. На рабочей станции установлен 32-битный клиент Oracle, что приводит к следующему сообщению об ошибке:
Попытка загрузить клиентские библиотеки Oracle вызвала исключение BadImageFormatException. Эта проблема возникает при работе в 64-битном режиме с установленными 32-битными клиентскими компонентами Oracle.
Так что это мой долгий путь попыток и неудач:
- Я пытался установить клиент Oracle win64_11gR2_client. Но в процессе установки происходит сбой без каких-либо комментариев.
- Я последовал за ответом из другого потока SO, попробовал и извлекли instantclient-basic-windows.x64-11.2.0.2.0 и поместил папку, содержащую двоичные файлы, в переменную PATH Windows. Я все еще получаю то же сообщение об ошибке, хотя (даже после перезагрузки).
- Я следовал "альтернативному пути" из этого ответа и скопировал файлы oci.dll, orannzsbb11.dll и oraociei11.dll в папку bin/ моего проекта веб-сайта. Все то же сообщение об ошибке.
- Я попытался и скопировал все файлы из мгновенного клиента в этот каталог и попытался снова, но безуспешно.
- Я установил ODAC112021Xcopy_x64.zip и поместил папку установки и папку bin в переменную PATH Windows. Нет успеха
- Я положил надежду на этот ответ и рассмотрел DllPath в реестре (который на самом деле должен относиться к ODP.NET, а не к
System.Data.OracleClient
) и увидел, что DllPath указывает на правильную установку ODAC для x64, поэтому, если мое приложение не использовалоSystem.Data.OracleClient
, он должен работать, б, но так как он использует это, он все равно не удалось. - Я гуглил и stackoverflew, но не нашел ничего, кроме сообщений, на которые я уже ссылался.
- Я тщательно разработал этот вопрос SO в надежде получить какой-нибудь проницательный совет от просвещенного пользователя SO.
После получения первого ответа от b_levitt я попытался добавить следующие строки в Global.asax по адресу
Application_Start
:Environment.SetEnvironmentVariable("ORACLE_HOME", @"C:\OracleProducts\Odac-11.2.0.2.1-x64"); Environment.SetEnvironmentVariable("PATH", @"C:\OracleProducts\Odac-11.2.0.2.1-x64;C:\OracleProducts\Odac-11.2.0.2.1-x64\bin");
C: \ OracleProducts \ Odac-11.2.0.2.1-x64 - это место, где я установил 64-битную версию ODAC xcopy. Также нет успеха.
С другой стороны, я даже безуспешно пытался перевести мое приложение.NET в 32-битный режим, но это совсем другое. Мне нужно перспективное решение, которое означает 64 бит.
2 ответа
Ваш #5 должен был сработать, но вам также нужно установить переменную среды ORACLE_HOME. Я делал это много раз, в том числе недавно, с самой установкой xcopy, которую вы используете. Пожалуйста, ознакомьтесь с моим опытом установки xcopy и дайте мне знать, какие дополнительные ошибки вы получаете.
В моем случае я настраивал его для asp.net, но winforms еще проще. Вы можете открыть окно cmd, использовать команду "set", чтобы установить переменные среды PATH и ORACLE_HOME, а затем запустить приложение из того же окна cmd. Как только вы исправите ошибки, вы можете использовать Environment.SetEnvironmentVariable, чтобы установить их в своем коде.
Напомню, что я избегаю установки клиента oracle на клиентские машины, обрабатывая всю бизнес-логику через веб-сервисы. Таким образом, мне нужны только компоненты Oracle на веб-сервере.
У меня была та же проблема, что и у вас. Я нашел большинство своих ответов на форумах Oracle и здесь, на stackru. Я не могу опубликовать ссылки для справки, но могу дать вам кое-что попробовать.
- Также включите OraOps11w.dll в каталог bin вместе с другими файлами Oracle dll.
- Перейдите в свойства проекта | Пути ссылки, добавьте C:\Windows\Microsoft.NET\Framework64\v2.0.50727 или C:\Windows\Microsoft.NET\Framework64\v4.0.30319 в пути ссылки в зависимости от того, какая версия платформы проекта использует.
- ** Нечеткая часть, которую я плохо помню: удалите текущую ссылку System.Data.OracleClient и добавьте новую ссылку из C:\Windows\Microsoft.NET\Framework64\v2.0.50727 или C:\Windows\Microsoft.NET\Framework64\v4.0.30319 к ссылочным путям, в зависимости от того, какую версию платформы использует проект.
Посмотрите, исчезнет ли исключение.
К вашему сведению, Microsoft прекращает поддержку поставщика данных Oracle (в ADO.NET) в ближайшем будущем. В настоящее время он работает через.NET 4, но рекомендуется начать тестировать драйверы Oracle.