Попытка загрузить клиентские библиотеки oracle привела к созданию badimageformatexception

Обновлено: 03.07.2024

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

Но это я настроил систему - вот характеристики:

  • 64-разрядная версия Windows 7
  • Visual Studio 2010 Премиум
  • Oracle Client 11g R2 64Bit установлен как среда выполнения

У меня была та же проблема, и решение, которым поделился Муру, помогло мне:

Просто установите ODAC и

Если вы запускаете приложение через Visual Studio, установите флажок «Использовать 64-разрядную версию IIS Express для веб-сайтов и проектов», выбрав параметр «Веб-проекты» в разделе «Проекты и решения» в Инструменты- > Меню параметров в Visual Studio.

Простое решение: у меня работает. попробуй это.

Я потратил почти 4 часа, чтобы найти решение проблемы BadImageFormatException.

Сценарий: VS 2012, я впервые пытался добавить модель сущности в базу данных Oracle. Я знал, что есть два шага для добавления модели для базы данных Oracle:

  1. Подключите базу данных oracle с помощью server explore (где будет создана строка подключения и которую можно будет использовать при добавлении модели)
  2. Добавьте модель, используя существующую строку подключения (созданную на шаге 1).

Но на первом шаге меня поразило предупреждение BadImageFormatException, и я нашел решение. Разрешение:

Тогда вы готовы использовать модель :)

Если вы хотите использовать 64-битную версию, см. Мой ответ здесь:
64-разрядная конфигурация Oracle DataAccess

Если вас устраивает 32-разрядная версия, просто установите 32-разрядную версию Oracle Data Access Components. Поскольку сервер разработки Visual Studio 32-битный, у вас не будет никаких проблем.

У меня было такое же исключение, и я обнаружил, что это произошло, когда я обновился до версии MVC выше 2.0, в моем случае MVC 4.0.

Создание нового проекта в MVC 2.0 решило проблему.

Чтобы быстро и легко решить эту проблему, вам нужно выполнить только следующие шаги:

  1. Установите ODACv11.2021Xcopy_x64, запустив файл install.bat, затем проверьте "c: \ oracle" как созданный путь.
  2. скопируйте папку конфигурации сети [содержащую папку администратора с файлом tnsnames.ora] в 32bit oracle в "c: \ oracle".
  3. Добавлен путь "c: \ oracle" к переменной среды PATH.

С уважением, англ. Наваф Х. Бен Талеб.

Я изменил 32-разрядную поддержку на FALSE в моем пуле приложений в IIS7. Это сработало для меня. Мне было легко. Ваше здоровье :)

С такой же проблемой вы можете столкнуться также в Visual Studio 2013 и 64-битном клиенте Oracle (версии 11 и 12). Мое решение:

а) Настольный проект . Свойства проекта> Сборка> снимите флажок «Предпочитать 32-битный».

У меня была такая же ошибка после обновления до Windows 7. Я решил ее, изменив целевую платформу на x86 на вкладке «Сборка» на странице «Свойства» в Visual Studio.

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

Установлено два клиента

Управляйте своей переменной среды пути. Какой клиент Oracle первый, он загружается раньше другого.

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


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

Ошибка говорит, что . Но я много раз удостоверился, что клиент установлен в бит , а не .

Одно из решений - установить на вашем компьютере клиенты Oracle x86 (32-бит) и x64, тогда не имеет значения, на какой архитектуре работает ваше приложение.

Вот инструкция по установке клиента Oracle x86 и x64 на одну машину:

Предположения: Oracle Home называется , клиентская версия - 11gR2.

При желании удалите любой установленный клиент Oracle (см. Как удалить / полностью удалить Oracle 11g (клиент)? При возникновении проблем)

Загрузите и установите клиент Oracle x86, например, в

Скачайте и установите Oracle x64 Client в другую папку, например на

Откройте инструмент командной строки, перейдите в папку% WINDIR% \ System32, обычно , и создайте символическую ссылку на папку (см. Раздел команд ниже)

Перейдите в папку% WINDIR% \ SysWOW64, обычно , и создайте символическую ссылку на папку (см. Ниже)

Измените переменную среды , замените все записи вроде и на , соответствующие их подпапке . Примечание. не должен находиться в среде PATH.

При необходимости установите для переменной среды значение .

Откройте редактор реестра. Установите значение реестра на

Установите значение реестра на (не )

Вы сделали! Теперь вы можете без проблем использовать клиент Oracle x86 и x64, то есть приложение x86 будет загружать библиотеки x86, приложение x64 загружает библиотеки x64 без каких-либо дополнительных изменений в вашей системе.

Вероятно, будет разумным вариантом установить переменную среды (соответственно, записей в реестре) в общее расположение, например .

Команды для создания символических ссылок:

Обе символические ссылки должны иметь одинаковое имя, например .

Несмотря на их названия, папка содержит библиотеки x64, тогда как содержит библиотеки x86 (32-битные). Не путайте.

В моей ситуации Oracle 11.2 32-битный клиент был установлен на моем 64-битная Windows ОС 2008 R2.

См. Ниже автономный .ashx тестовый скрипт, который я использовал для проверки возможности подключения к Oracle. Перед изменением пула приложений его ответ был:

. и после изменения пула приложений:

TestOracle.ashx - сценарий для проверки соединения с Oracle через System.Data.OracleClient:

Использовать: При необходимости измените переменные пользователя, пароля и хоста.

На этой странице отметьте параметр, который гласит: Используйте 64-разрядную версию IIS Express для веб-сайтов и проектов.

  • 1 Это сработало и для меня. По умолчанию IIS Express будет работать в VS в 32-битном режиме.

Чтобы пересмотреть IIS

Платформа: Windows Server 2008 R2 Enterprise - 64-битная - IIS 7.5

Как было указано в комментариях, System.Data.OracleClient устарел. Нет особых причин начинать использовать его так поздно в игре.

Если вы предпочитаете использовать старый неуправляемый поставщик Oracle.DataAccess от Oracle, самое простое решение - установить переменную конфигурации "DllPath":

это решение работает для меня,

Чтобы пересмотреть IIS

Платформа: Windows Server 2012 Standart- 64Bit - IIS 8

Опять же, вы можете найти очень подробное решение и многое другое на исходном сайте.

Это было единственное, что у меня сработало и не испортило мою среду.

были применены следующие решения

  • Project, properties, Build TAB, выберите платформу target: x86
  • Проект, чистая сборка, решение ReBuild
  • Установите 32-разрядный клиент Oracle 11G *

теперь он работает, потому что приложение настроено для 32-битного клиента и 32-битного клиента Oracle, установленного на сервере Win2012 R2, надеюсь, сработает для вас.

Сделайте для Enable32bit Application значение TRUE в пуле приложений IIS, который вы используете

  • Просто выбросьте это на случай, если кто-то с этим столкнется. В моем случае для 32-битного пула приложений было установлено значение True. Мне пришлось установить его в False, чтобы мой заработал, но это был пул приложений.

BadImageFormatException возникает, когда 32-битная (x86) dll вызывает 64-битную dll или наоборот. Если вы используете AnyCPU для вашего исполняемого файла записи, то при запуске на 64-битной машине он будет работать как 64-битный, однако, если он затем вызывает 32-битную dll, вы получаете исключение, поэтому AnyCPU не всегда является ответом.

Я стараюсь строить все как 32-битные (x86), так как нам все еще нужно взаимодействовать с некоторыми старыми компонентами, выполненными на VB6 (32-бит (x86)). Хотя производительность может быть лучше для 64-битных машин, если мы будем строить AnyCPU, для нас важнее надежность.

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

См. Здесь для получения информации об использовании

Хочу добавить разрешение, которое у меня работало. Установка: 64-разрядная версия Oracle 11g под управлением Windows 2008 R2 (64-разрядная ОС)

У меня была такая же проблема с BadImageFormatException. Компиляция до 64 бит исключает исключение, но это не было вариантом для меня, поскольку мое приложение использует 32-битные компоненты activex, которые не работают в 64-битном режиме.

Это решило проблему, из инструмента ProcMon я вижу, что локально скопированный файл oci.dll загружается System.Data.OracleClient, и все в порядке.

Вероятно, это можно было бы сделать, изменив настройки среды, как предложено выше, но этот метод имеет то преимущество, что не меняет никаких настроек в конфигурации сервера.

Загрузите правильную версию Oracle Client, например Oracle Client 11.2 32-Bit; который решил проблему для меня.

Я также получал ту же ошибку, что и я проверял, что моя система была в 64-разрядной версии, и я использовал oracle.DataAccess 32-разрядной версии. Я добавил правильную 64-разрядную версию, теперь она была разрешена ниже пути для ссылки Oracle.DataAccess.dll

Правильный путь для 64-битной ОС -

Правильный путь для 32-битной ОС -

У меня была эта ошибка в моем приложении DNN, установленном в Windows 2012 R2. Он использует 32-битную dll, и работает только Oracle.DataAccess.dll x32. Мое решение:

У меня проблема с консольным приложением.

В моем случае я просто изменил Платформа Target к "Любой процессор"который вы можете увидеть, щелкнув правой кнопкой мыши свое решение и выбрав" Свойства ", вы найдете вкладку" Сборка ", щелкните по нему, вы увидите" Цель платформы: "измените его на" Любой процессор ", что решит вашу проблему.

Для ssis 2008 просто активный 32-битный запуск, ниже Изображение (щелкните по этой ссылке)


Новый участник korbobolla - новый участник этого сайта. Позаботьтесь о разъяснениях, комментариях и ответах. Ознакомьтесь с нашим Кодексом поведения.

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

Но именно я настроил систему - вот спецификации:

  • 64-разрядная версия Windows 7
  • Visual Studio 2010 Premium
  • Oracle Client 11g R2 64Bit установлен как Runtime

ОТВЕТЫ

Ответ 1

Я видел это несколько раз недавно при запуске Visual studio на 64Bit O/S. Простым рабочим столом является установка 32-битного клиента на 64-разрядную машину разработки.

С уважением, Пит

Ответ 2

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

Установлены два клиента

Контролируйте свой путь переменная среды. Какой клиент Oracle является первым, он загружается перед другим.

После этого вы можете подключиться к oracle. Конечно, вы можете поместить клиента 32Bit первым в пути, но я предпочитаю ставить 64-битный клиент до 32 бит для других приложений.

Ответ 3

У меня была такая же ошибка после обновления до Windows 7. Я разрешил ее, изменив целевой объект платформы на x86 на вкладке "Сборка" на странице "Свойства" в Visual Studio

Ответ 4

Те же проблемы, с которыми вы можете столкнуться также в Visual Studio 2013 и 64-битном Oracle Client (11 и 12 версий). Мое решение:

a) Настольный проект. Свойства проектa > Сборкa > отключить флажок "Предпочитаю 32-бит".

b) проект или веб-сайт ASP.NET. Главное меню > ИНСТРУМЕНТЫ > Функции > Проект и решения > Веб-проекты > Включите флажок "Использовать 64-битную версию IIS Express для веб-сайтов и проектов".

Ответ 5

Я изменил поддержку 32-битной поддержки на ЛОЖЬ в моем пуле приложений в IIS7. Это сработало для меня. Мне было легко. Приветствия:)

Ответ 6

Быстрое и простое решение этой проблемы вы должны выполнить только следующие шаги:

  • Установите ODACv11.2021Xcopy_x64, запустив файл install.bat, затем проверьте "c:\oracle" как созданный путь.
  • скопируйте папку конфигурации сети [, содержащую папку администратора с файлом tnsnames.ora] в oracle 32bit, чтобы "c:\oracle" .
  • Добавлен путь "c:\oracle" к переменной среды PATH.

С наилучшими пожеланиями, Eng. Наваф Х. Бин Талеб.

Ответ 7

У меня такое же исключение, и я узнал, что это произошло, когда я обновил версию MVC выше 2.0., в моем случае MVC 4.0.

Создание нового проекта в MVC 2.0 решило проблему.

Ответ 8

Если вы хотите использовать 64 бит, см. мой ответ здесь:
64-битная конфигурация Oracle DataAccess

Если вы довольны 32-разрядным, просто установите 32-разрядную версию Oracle Data Access Components. Поскольку сервер разработки Visual Studio 32 бит, у вас не возникнут проблемы.

Ответ 9

Простое решение: работает для меня. попробуйте это.

Я потратил почти 4 часа, чтобы найти решение проблемы с BadImageFormatException.

Сценарий: VS 2012, я пытался впервые добавить модель сущности в базу данных Oracle. Я знал, что есть два способа добавить модель для базы данных оракула:

  • Подключить базу данных oracle с использованием сервера (где будет создана строка соединения и которая может использоваться при добавлении модели)
  • Добавить модель с помощью существующей строки подключения (созданной в шаге 1).

Но я был поражен на первом шаге с предупреждением BadImageFormatException, и я нашел решение. Разрешение:

тогда вы готовы использовать модель:)

Ответ 10

У меня была такая же проблема, и это решение, с которым работал Muru, работало со мной:

Ошибка говорит о том, что This problem will occur when running in 64 bit mode with the 32 bit Oracle client components installed. . Но я убедился много раз, что клиент установлен в x64 бит, а не 32 .

Одно из решений состоит в том, чтобы установить на вашем компьютере клиенты Oracle как x86 (32-bit), так и x64, тогда не имеет значения, на какой архитектуре работает ваше приложение.

Вот инструкция по установке клиента Oracle x86 и x64 на одну машину:

Допущения: Oracle Home называется OraClient11g_home1 , версия клиента - 11gR2

При желании удалить любой установленный клиент Oracle (см. Как удалить/полностью удалить Oracle 11g (клиент)? , если у вас возникли проблемы)

Загрузите и установите клиент Oracle x86, например, в C:\Oracle\11.2\Client_x86

Загрузите и установите Oracle x64 Client в другую папку, например, в C:\Oracle\11.2\Client_x64

Откройте инструмент командной строки, перейдите в папку% WINDIR%\System32, обычно C:\Windows\System32 и создайте символическую ссылку ora112 на папку C:\Oracle\11.2\Client_x64 (см. Раздел «Команды» ниже)

Перейдите в папку% WINDIR%\SysWOW64, обычно C:\Windows\SysWOW64 , и создайте символическую ссылку ora112 на папку C:\Oracle\11.2\Client_x86 , (см. Ниже)

Измените переменную среды PATH , замените все записи, такие как C:\Oracle\11.2\Client_x86 и C:\Oracle\11.2\Client_x64 , на C:\Windows\System32\ora112 , соответствующие их подпапке \bin . Примечание: C:\Windows\SysWOW64\ora112 не должен находиться в среде PATH.

При необходимости установите переменную среды Oracle_HOME в C:\Windows\System32\ora112

Откройте редактор реестра. Установите значение реестра HKLM\Software\Oracle\KEY_OraClient11g_home1\Oracle_HOME равным C:\Windows\System32\ora112

Установите значение реестра HKLM\Software\Wow6432Node\Oracle\KEY_OraClient11g_home1\Oracle_HOME равным C:\Windows\System32\ora112 (не C:\Windows\SysWOW64\ora112 )

Вы сделали! Теперь вы можете без проблем использовать клиент Oracle x86 и x64, то есть приложение x86 загрузит библиотеки x86, приложение x64 загрузит библиотеки x64 без каких-либо дополнительных изменений в вашей системе.

Вероятно, разумно установить общую переменную окружения TNS_ADMIN (соответственно записи TNS_ADMIN в реестре), например TNS_ADMIN=C:\Oracle\Common\network .

Команды для создания символических ссылок:

cd C:\Windows\System32 mklink /d ora112 C:\Oracle\11.2\Client_x64 cd C:\Windows\SysWOW64 mklink /d ora112 C:\Oracle\11.2\Client_x86

Обе символические ссылки должны иметь одинаковое имя, например ora112 .

Несмотря на их имена, папка C:\Windows\System32 содержит библиотеки x64, тогда как C:\Windows\SysWOW64 содержит библиотеки x86 (32-bit). Не смущайтесь.

В моей ситуации Oracle 11.2 32-битный клиент был установлен в моей 64-битной ОС Windows 2008 R2.

Ниже приведен отдельный скрипт .ashx test, который я использовал для проверки возможности подключения к Oracle. Перед изменением пула приложений его ответ был:

. и после изменения пула приложений:

TestOracle.ashx - Скрипт для проверки соединения с Oracle через System.Data.OracleClient:

Чтобы использовать: Измените пользователь, пароль и переменные хоста в зависимости от ситуации.

На этой странице установите флажок: Используйте 64-разрядную версию IIS Express для веб-сайтов и проектов.

Платформа: Windows Server 2008 R2 Enterprise - 64-битная - IIS 7.5

Как было отмечено в комментариях, System.Data.OracleClient устарела. Существует мало причин, чтобы начать использовать его так поздно в игре.

Если вы предпочитаете использовать старого неуправляемого поставщика Oracle.DataAccess от Oracle, самое простое решение - установить переменную конфигурации «DllPath»:

Для краткости написано: (если страница все еще там, просто перейдите на страницу и следуйте инструкциям . ) 1) Загрузите и установите последнюю версию odac 64 bit xcopy с сайта Oracle . 2) Загрузите и установите последнюю версию odac 32-битной xcopy с сайта Oracle . Как? откройте командную консоль cmd в качестве администратора и запустите: c:\64bitODACLocation> install.bat oledb c:\odac\odac64 . первый параметр - это компонент, который вы хотите установить. Второй параметр - это место для установки в . Установить версию 32, а также так: c:\32bitODACLocation> install.bat oledb c:\odac\odac32 . 3) Измените путь системы, включив в него C:\ODAC\odac32; C:\ODAC\odac32\Bin; c:\odac\odac64; c:\odac\odac64\bin В ЭТОМ ПОРЯДКЕ . 4) Перезагрузите компьютер . 5) Убедитесь, что у вас есть одинаковые tnsnames.ora в обоих odac32\admin\network и odac64\admin\network folder (или хотя бы та же запись для вашего соединения) . 6) Теперь откройте SSIS в Visual Studio (я использовал бесплатную версию 2013 года с пакетом ssis) - Используйте OLEDB и затем выберите Oracle Поставщик для OLE поставщика БД в качестве типа вашего соединения. Установите имя записи в вашем tnsnames.ora как «имя сервера или файла». Имя пользователя - это имя вашей схемы (имя базы данных), а пароль - это пароль для схемы. вы сделали!

Опять же, вы можете найти очень подробное решение и многое другое на оригинальном сайте.

Это было единственное, что сработало для меня и не испортило мою среду.

были применены следующие решения

  • Проект, свойства, сборка TAB, выбор целевой платформы: x86
  • Проект, чистая сборка, решение ReBuild
  • Установите Oracle 11G * 32-битный клиент

теперь, это работает, потому что приложение настроено для 32-битного, а Oracle 32-битный клиент установлен на сервере Win2012 R2, надеюсь, будет работать для вас.

Я получил эту проблему для консольного приложения. В моем случае я просто изменил Цель платформы на «Любой ЦП», который вы можете увидеть, если щелкнуть правой кнопкой мыши свое решение и щелкнуть свойства, вы увидите вкладку «Построить», нажмите на нем вы увидите «Platform target:» поменяйте его на «Any CPU», что решит вашу проблему

Я хотел бы добавить разрешение, которое работает для меня . Установка: Oracle 11g 64 бит работает на Windows 2008 R2 (64 бит ОС)

У меня была точно такая же проблема BadImageFormatException. Компиляция до 64 бит исключает исключение, но для меня это не вариант, так как мое приложение использует 32-битные компоненты activex, которые не работают в 64-битной версии.

Это решило проблему, из инструмента ProcMon я вижу, что локально скопированный файл oci.dll загружается System.Data.OracleClient и все в порядке.

Возможно, это можно сделать, изменив настройки среды, как предложено выше, но этот метод имеет то преимущество, что не изменяет какие-либо настройки в конфигурации сервера.

Читайте также: