Ошибка при использовании oracle.dataaccess.dll - PullRequest
8 голосов
/ 20 января 2010

У меня есть веб-приложение, которое использует Oracle.DataAccess.dll для связи с базой данных Oracle. Веб-приложение, развернутое в 32-битной системе Windows, работает, но не на 64-битной Windows Server 2008. Я установил пакет 10204_vista_win2k8_x64_production_db, ссылался на установленную dll (версия 2.102.4.0) из проекта, но я получаю следующую ошибку:

Не удалось загрузить файл или сборку 'Oracle.DataAccess, версия = 2.102.4.0, культура = нейтральная, PublicKeyToken = 89b483f429c47342' или одна из ее зависимостей. Система не может найти указанный файл.

Ответы [ 5 ]

12 голосов
/ 20 января 2010

То же самое здесь. Сборка Oracle.DataAccess не работает в 64-битном режиме.

Вы должны установить пул приложений для своего сайта в 32-битный режим (перейдите в пул приложений Расширенные настройки и установите Разрешить 32-битным приложениям значение "True")

Если это не сработает, убедитесь, что ваш каталог Oracle (каталог, содержащий все библиотеки Oracle) находится в системном пути. Если вы забудете об этом, вы получите ту же загадочную ошибку о том, что не можете найти Oracle.DataAccess.

EDIT

Установка клиента Oracle может быть серьезной проблемой. Использование Oracle Instant Client несколько проще, чем установка полного клиента, поэтому я обычно делаю:

  1. Загрузите Oracle Instant Client
  2. Распакуйте архив в c: \ oracle (подойдет любой другой каталог)
  3. Открыть командную строку как администратор
  4. type cd \ oracle
  5. тип настройка odp.net20 myhome
  6. Щелкните правой кнопкой мыши «Мой компьютер», «Дополнительные параметры системы», «Переменные среды» и добавьте каталог C: \ oracle в системный путь
  7. Скопируйте файл Oracle.DataAccess.dll из c: \ oracle \ odp.net \ bin \ 2.x в папку bin вашего приложения
  8. (опционально) отредактируйте ваш файл c: \ oracle \ tnsnames.ora
4 голосов
/ 24 февраля 2010

Я собираюсь дать вам ответы из того, что я только что прошел на Windows Server 2008 R2, который является 64-битной операционной системой. Набор приложений, который мне дали, был разработан с использованием .net 3.5 x86 с более старыми библиотеками DLL, и я застрял, потому что установил новые клиенты x64 из oracle.

Я обнаружил следующее: Установите последний клиент x64 из Oracle для Windows Server 2008. Я считаю, что это будет клиент 2.7.0. Когда вы выбираете установку, убедитесь, что вы делаете пользовательские настройки и выбираете библиотеки .NET. Сконфигурируйте свои файлы tnsnames и протестируйте tnsping для вашего источника данных.

Далее, если вы используете 32-битное приложение, установите ту же версию клиента для 32-битной. Кроме того, выполните ту же процедуру установки и выберите тот же дом.

Когда вы закончите, вы обнаружите, что у вас есть одно приложение / продукт с двумя клиентскими каталогами (Client1 и Client2).

если вы перейдете в каталог windows / сборки, вы обнаружите, что у вас есть ссылка на Oracle.DataAccess.dll (x2) с одной для x86 и одной для AMD64.

Теперь, в зависимости от того, есть ли у вас разработчики или вы сами разрабатываете на машине, вам может быть хорошо, однако, если они используют более старые драйверы, вам нужно выполнить последний шаг.

Перейдите в каталог app \ name \ product \ version \ client_1 \ odp.net \ publisher policy \ 2.x. Здесь включены два файла политики. используйте gacutil / i для установки Policy.2.111.Oracle.DataAccess.dll в GAC. Это перенаправит устаревшие вызовы Oracle ODP на более новые версии. Так что, если кто-то разработал с клиентом 10g, теперь он будет работать с клиентом 11.

Если вам нужна дополнительная информация или если вам нужны ответы на другие вопросы, такие как включение или выключение 32-битного режима в сборках .net, напишите мне.

J Банки jbanks27@hotmail.com

Удачи.

2 голосов
/ 01 июля 2010

Если 32-разрядный клиент oracle не работает и не установлен 64-разрядный, вам необходимо установить 64-разрядный клиент и загрузить файл oracle.dataaccess.dll в odp.net из папки установленного клиента oracle. И вы должны использовать эту dll и обмениваться ссылкой на этот файл вместо 32-битной dll. (Это то, что вы, вероятно, имеете для проекта / решения)

Если у вас другой клиент-оракул, он не будет работать. так что вы получите такие ошибки. Надеюсь, это поможет.

См. Иллюстрацию на Реализация Oracle.Web.dll, 64-разрядная ошибка Oracle.DataAccess.dll в Windows Server 2008 с отключенной 32-разрядной IIS 7.5

0 голосов
/ 26 июня 2013

Если вы делаете следующее, все работает нормально 1. Последовательно установите все ваши dll на AnyCPU. 2. Убедитесь, что на компьютере, на котором будет выполняться исполняемый файл, установлена ​​соответствующая версия библиотеки DLL (т.е. 32-разрядная или 64-разрядная, т. Е. Такая же, как в ОС). 3. Игнорировать предупреждения компилятора о том, что используется версия 64/32 бит, а не версия MSIL

Скомпилированные версии могут затем использоваться как на 32-, так и на 64-битной версии, если установлена ​​соответствующая версия библиотеки Oracle.

0 голосов
/ 06 сентября 2012

Если вы используете 32-разрядную версию Oracle.DataAccess.dll, вам необходимо выполнить одно из следующих действий:

a) Развертывание на 32-разрядном сервере или

b) Развертывание на 64-разрядном сервере с параметром «Включить 32-разрядные приложения», установленным в значение «true».

Если вы используете 64-битную версию Oracle.DataAccess.dll, вам просто нужно использовать 64-битный сервер.

Проблема вызвана тем, что Oracle не предлагает версию Oracle.DataAccess.dll для AnyCPU (возможно, из-за того, что она имеет неуправляемые / собственные части)

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