Ошибка «Отсутствует зависимость» для Oracle.DataAccess при развертывании на 64-битном сервере IIS - PullRequest
0 голосов
/ 11 июня 2019

Я новичок в .Net. Я создал код, который подключается к базе данных и выполняет некоторые транзакции. Для диспетчера доступа к данным я добавил ссылку Oracle.DataAccess.86 (Oracle.DataAccess.dll) и запуск с «Любой ЦП» на локальном компьютере. Работает нормально. Но когда я развертываю его на сервере, на котором работает 64-битная IIS, то выдает ошибку ниже>

Не удалось загрузить файл или сборку «Oracle.DataAccess» или одну из ее зависимостей. Была предпринята попытка загрузить программу с неверным форматом. Описание: во время выполнения текущего веб-запроса произошло необработанное исключение. Пожалуйста, просмотрите трассировку стека для получения дополнительной информации об ошибке и о том, где она возникла в коде.

Сведения об исключении: System.BadImageFormatException: Не удалось загрузить файл или сборку «Oracle.DataAccess» или одну из ее зависимостей. Предпринята попытка загрузить программу с неверным форматом.

[BadImageFormatException: не удалось загрузить файл или сборку «Oracle.DataAccess» или одну из ее зависимостей. Была предпринята попытка загрузить программу с неверным форматом.] System.Reflection.RuntimeAssembly. System.Reflection. System.Reflection. System.Reflection. System.Reflection.Assembly.Load (String assemblyString) +34 System.Web.Configuration.CompilationSection.LoadAssemblyHelper (String AssemblyName, Boolean starDirective) + 48

Пожалуйста, помогите мне найти решение этой ошибки.

Ответы [ 2 ]

1 голос
/ 11 июня 2019

Ваша проблема в том, что неправильная Oracle DLL загружается в память

Если вы собираете сборку в AnyCPU ...

Требование для запуска под x64 - Oracle Client x64 установлен, Oracle.DataAccess.dll x64 развернут, AppPool set "run 32 bit" = false.

Требование для запуска под x86 - Oracle Client x86 установлен, Oracle.DataAccess.dll x86 развернут, AppPool set "run 32 bit" = true.

НО с чего бы вам использовать Oracle.DataAccess.dll в 2019 году? Используйте Oracle.ManagedDataAccess.dll. Установите небольшой набор компонентов для подключения (ODAC) и нет необходимости в клиенте Oracle, x64 / x86 - все будет сделано как AnyCPU. Более того, установите средства разработки Oracle для Visual Studio, которые будут включать ODAC

0 голосов
/ 11 июня 2019

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

Ссылка на Oracle.DataAccess.dll такая же. Приложение (IIS в вашем случае) автоматически загрузит правильную сборку - при условии, что она установлена ​​и доступна на машине. Вы можете удалить атрибут processorArchitecture=x86 в вашем файле проекта, вы можете отредактировать *.csproj, соответственно. *.vbproj файл вручную с помощью текстового редактора.

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