Не удалось загрузить файл или сборку "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 файлы.
Я не мог видеть это из 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
В моем случае следующее решение проблемы:
- Загрузка "32-разрядных компонентов доступа к данным Oracle (ODAC) с помощью инструментов разработчика Oracle для Visual Studio" http://www.oracle.com/technetwork/topics/dotnet/utilsoft-086879.html
- Затем добавьте ссылку
oracle.dataaccess.dll
в файл bin
, просмотрев местоположение файла или просто из списка подтверждения на вкладке .NET
.
Ответ 6
Если вы используете IIS Express и VS 2017:
Перейдите в Свойства веб-приложения> Веб-вкладка> Раздел серверов> И измените Bitness на x64.
Ответ 7
Также вы можете загрузить и выполнить файл install.bat в "ODAC112030Xcopy.zip" из 64-разрядных загрузок Oracle Data Access Components (ODAC). Это решило мою проблему.
Ответ 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