Не удалось загрузить файл или сборку "Oracle.DataAccess" или одну из ее зависимостей

Я пытаюсь запустить это веб-приложение. Я продолжаю получать эту ошибку "Не удалось загрузить файл или сборку" Oracle.DataAccess "или одну из его зависимостей. Была сделана попытка загрузить программу с неправильным форматом". Сведения об исключении: System.BadImageFormatException. "Не удалось загрузить файл или сборку" Oracle.DataAccess "или одну из его зависимостей. Была сделана попытка загрузить программу с неправильным форматом". Ниже приведены те вещи, которые я уже пробовал.

1) заменил всю dll оракула на 32-битную оракул dll, т.е. 2.112.3.0

У меня 32-битный клиент, установленный на 64-битной машине. Операционная система - Windows 7.

2) индивидуально составлять каждый отдельный проект. Удалены все DLL файлы, зависящие от oracle, а затем добавлены dll 2.112.3.0 в отдельности, а затем скомпилированы каждый проект

3) Зарегистрируйте 32-битную dll на GAC, используя этот оператор gacutil/i% ORA_HOME4%\odp.net\bin\4\Oracle.DataAccess.dll

gacutil/i% ORA_HOME4%\asp.net\bin\4\oracle.web.dll

для вышеупомянутых двух операторов, я скопировал gacutil.exe из c:\Program Files (x86)\Microsoft sdk\windows\v7.0A\Bin\NETFX4.0 Инструменты \X64 в C:\диск, а затем

Я выполнил вышеупомянутое утверждение:

gacutil/i% ORA_HOME4%\odp.net\bin\4\Oracle.DataAccess.dll gacutil/i% ORA_HOME4%\asp.net\bin\4\oracle.web.dll, когда я выполнил вышеупомянутые два утверждения, я didn Я получаю сообщение, я выполнил их в окнах Dos под правами администратора.

4) Я также удалил все временные файлы ASP.net из этого места

c:\windows\Microsoft.Net\V4.0.30319\временные файлы ASP.net. Я также изменил цель платформы для веб-приложений для платформы X86. Первоначально она была на "ANy CPU". Из-за разочарования я также попытался изменить платформу на X64, а затем получил сообщение об ошибке

"Холодный файл без загрузки или сборка. Webapp" или одна из его зависимостей. Была сделана попытка загрузить программу с неправильным форматом.

У меня нет IIS, установленного на моем компьютере, я запускаю это приложение в Visual Studio 2010, поэтому я думаю, что он будет использовать встроенный IIS, который поставляется с визуальной студией.

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

любая помощь или намек будут высоко оценены.

Ответы

Ответ 1

Если бы я перешел с одной машины на другую и все было переустановлено. В моем случае я использую как 32-битную, так и 64-битную установку ODP.NET Oracle.

При перечислении сборок на моей новой машине я закончил со следующим списком

 C:\oracle\product\11.2.0\X64\odp.net\bin\4>gacutil /l|findstr Oracle.DataAccess
     Oracle.DataAccess, Version=2.112.3.0, Culture=neutral, PublicKeyToken=89b483f429c47342, processorArchitecture=AMD64
     Policy.2.102.Oracle.DataAccess, Version=2.112.3.0, Culture=neutral, PublicKeyToken=89b483f429c47342, processorArchitecture=AMD64
     Policy.2.111.Oracle.DataAccess, Version=2.112.3.0, Culture=neutral, PublicKeyToken=89b483f429c47342, processorArchitecture=AMD64
     Policy.2.112.Oracle.DataAccess, Version=2.112.3.0, Culture=neutral, PublicKeyToken=89b483f429c47342, processorArchitecture=AMD64
     Oracle.DataAccess, Version=4.112.3.0, Culture=neutral, PublicKeyToken=89b483f429c47342, processorArchitecture=AMD64
     Policy.4.112.Oracle.DataAccess, Version=4.112.3.0, Culture=neutral, PublicKeyToken=89b483f429c47342, processorArchitecture=AMD64

Здесь можно увидеть только 64-битные DLL файлы.

enter image description here

Я не мог видеть это из web.config, но тот, который я использовал, был 32-битной версией.

При проверке моей старой машины с GACutil я видел больше DLL, а также X86.

Исправлено повторным применением процесса регистрации (как версия x32/x64, ссылка на которую приведена здесь)

OraProvCfg.exe /action:gac /providerpath:C:\oracle\product\11.2.0\x32\ODP.NET\bin\4\Oracle.DataAccess.dll

OraProvCfg.exe /action:gac /providerpath:C:\oracle\product\11.2.0\x64\ODP.NET\bin\4\Oracle.DataAccess.dll

после этого Visual Studio была счастливым кроликом и снова собрала все для меня.

Ответ 2

Попробуйте это: Откройте диспетчер IIS, измените настройку пула приложений, измените Включить 32-битное приложение на false.

Ответ 3

Я нашел решение со следующими шагами:

  • удалите ссылку Oracle.DataAcces.dll,
    и добавьте новую ссылку на:
    C:\windows\assembly\GAC\Oracle.DataAccess\X.XXX.X.XX__89b483f429c47342/oracle.dataaccess.dll
  • Сделайте локальную копию = false.

Надеюсь, поможет

Ответ 4

Возможно, вам потребуется включить 32-битные приложения в AppPool. Перейдите в "Пул приложений" в IIS => щелкните правой кнопкой мыши ваш пул приложений => параметр настройки => "включить 32-разрядное приложение" в значение true.

Не забудьте перезапустить пул приложений и соответствующее приложение, указывающее на этот пул приложений.

Ответ 5

В моем случае следующее решение проблемы:

  1. Загрузка "32-разрядных компонентов доступа к данным Oracle (ODAC) с помощью инструментов разработчика Oracle для Visual Studio" http://www.oracle.com/technetwork/topics/dotnet/utilsoft-086879.html
  2. Затем добавьте ссылку oracle.dataaccess.dll в файл bin, просмотрев местоположение файла или просто из списка подтверждения на вкладке .NET.

Ответ 6

Если вы используете IIS Express и VS 2017:

Перейдите в Свойства веб-приложения> Веб-вкладка> Раздел серверов> И измените Bitness на x64.

Ответ 8

В моем случае я использую VS 2010, Oracle v11 64 бит. Я могу опубликовать в 64-битном режиме (установка в режиме "Любой процессор" в конфигурации веб-проекта), и я могу настроить IIS на сервере Production на 32-битную компиляцию на false (потому что сервер 64 бит, и мне нравится использовать его).

Затем для решения проблемы "Не удалось загрузить файл или сборку" Oracle.DataAccess ":

  • На локальном ПК и сервере установлен Oracle v11, 64 бит.
  • Во всех локальных Dev PC я ссылаюсь на Oracle.DataAccess.dll(C:\app\user\product\11.2.0\client_1\odp.net\bin\4), который является 64-битным.
  • В IIS Production Server я установил 32-битную совместимость с False.
  • Ссылка в веб-проекте на System.Web.Mvc.dll была версией v3.0.0.1 на локальном ПК, однако в Production была установлена только версия MVC 3.0.0.0. Таким образом, исправление было локально работать с MVC 3.0.0.0, а не 3.0.0.1 и публиковать снова на сервере, и оно работает.

Ответ 9

Для меня все остальное было почти нормально, но как-то изменились настройки моего проекта, и iisExpress стал использоваться вместо IISLocal. Когда я изменил и указал на виртуальный каталог (в IISLocal), он снова работал отлично.

Ответ 10

Мне нужна была 64-битная версия oracle.dataaccess.dll, но это вызывало проблемы с другими библиотеками, которые я использовал.

[BadImageFormatException: не удалось загрузить файл или сборку "Oracle.DataAccess" или одну из ее зависимостей. Была предпринята попытка загрузить программу с неверным форматом.]

Я следовал за несколькими шагами выше. Переходя к дополнительным настройкам в пуле проектов, чтобы разрешить 32-битную работу, я не был рад оставить это так, поэтому я снова включил его.

В моем проекте также были ссылки, основанные на ссылках Elmah и log4net. Я скачал их последнюю версию, и мой проект был в состоянии собраться и нормально работать, не мешая настройкам пула 32bit.

Ответ 11

У меня возникла та же проблема, и она была решена путем замены старого Oracle.DataAccess.dll новым Oracle.DataAccess.dll(которые поставляются с клиентом Oracle при установке)

в моем случае путь нового Oracle.DataAccess.dll -

  • E:\приложение\Rehman.Rashid\продукт\11.2.0\client_1\ODP.NET\Bin