Как сказать System.Data.OracleClient использовать 64-битный драйвер Oracle - PullRequest
9 голосов
/ 22 июля 2011

Я пытаюсь запустить приложение .NET, которое использует System.Data.OracleClient на рабочей станции Win7 x64.На рабочей станции установлен 32-битный клиент Oracle, что приводит к следующему сообщению об ошибке:

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

Так что это мой длинный путь попыток и неудач:

  1. Я пыталсяустановить клиент Oracle win64_11gR2_client .Но в процессе установки происходит сбой без каких-либо комментариев.
  2. Я следовал за ответом из другого потока SO , пробовал и извлекал instantclient-basic-windows.x64-11.2.0.2.0 и поместите папку с двоичными файлами в переменную PATH Windows.Я все еще получаю то же сообщение об ошибке (даже после перезагрузки).
  3. Я следовал «альтернативному пути» из этого ответа и скопировал файлы oci.dll,orannzsbb11.dll, и oraociei11.dll в папку bin / моего проекта веб-сайта.По-прежнему то же сообщение об ошибке.
  4. Я попытался скопировать все файлов с мгновенного клиента в этот каталог и повторил попытку, но безуспешно.
  5. Я установил ODAC112021Xcopy_x64.zip и поместил папку установки и папку bin в переменную PATH Windows.Безуспешно.
  6. Я возлагал надежду на этот ответ и рассмотрел DllPath в реестре (который фактически должен относиться к ODP.NET, а не к System.Data.OracleClient) и увидел, что DllPath указывает на правильную установку ODAC для x64, поэтому, если мое приложение не использует System.Data.OracleClient, оно должно работать, но, поскольку оно его использует, оно все равно не работает.
  7. Я гуглил и stackoverflew, но не нашел ничего, кроме сообщений, на которые я уже ссылался.
  8. Я тщательно продумал этот вопрос SO в надежде получить какой-нибудь проницательный совет от просвещенного пользователя SO.1058 *

    Получив первый ответ от 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 ]

4 голосов
/ 26 июля 2011

Ваш # 5 должен был сработать, но вам также нужно установить переменную среды ORACLE_HOME. Я делал это много раз, в том числе в последнее время с самой установкой xcopy, которую вы используете. Пожалуйста, проверьте мой опыт установки xcopy и сообщите мне, какие дополнительные ошибки вы получаете.

В моем случае я настраивал его для asp.net, но winforms еще проще. Вы можете открыть окно cmd, использовать команду «set», чтобы установить переменные среды PATH и ORACLE_HOME, а затем запустить приложение из того же окна cmd. Как только вы исправите ошибки, вы можете использовать Environment.SetEnvironmentVariable, чтобы установить их в своем коде.

Для справки: я избегаю установки клиента Oracle на клиентские машины, обрабатывая всю бизнес-логику через веб-сервисы. Таким образом, мне нужны только компоненты Oracle на веб-сервере.

1 голос
/ 31 августа 2011

У меня была та же проблема, что и у вас.Я нашел большинство своих ответов на форумах Oracle и здесь, на stackoverflow.Я не могу опубликовать ссылки для справки, но могу дать вам кое-что попробовать.

  1. Также включите OraOps11w.dll в каталог bin вместе с другими файлами Oracle dll.
  2. Перейдите в свойства проекта | Пути ссылки, добавьте C: \ Windows \ Microsoft.NET \ Framework64 \ v2.0.50727 или C: \ Windows \ Microsoft.NET \ Framework64 \ v4.0.30319 в пути ссылки в зависимости от того, какая версия платформыпроект использует.
  3. ** Нечеткая часть, которую я плохо помню: удалите текущую ссылку System.Data.OracleClient и добавьте новую ссылку из C: \ Windows \ Microsoft.NET \ Framework64 \ v2.0.50727 или C: \ Windows \ Microsoft.NET \ Framework64 \ v4.0.30319 к ссылочным путям в зависимости от того, какую версию платформы использует проект.

Проверьте, исчезнет ли исключение.

FYI, Microsoft прекращает поддержку поставщика данных Oracle (в ADO.NET) в ближайшем будущем.В настоящее время он работает через .NET 4, но рекомендуется начать тестировать собственные драйверы Oracle.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...