Попытка загрузить клиентские библиотеки oracle привела к созданию badimageformatexception
Эта проблема возникает при работе в 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:
- Подключите базу данных oracle с помощью server explore (где будет создана строка подключения и которую можно будет использовать при добавлении модели)
- Добавьте модель, используя существующую строку подключения (созданную на шаге 1).
Но на первом шаге меня поразило предупреждение BadImageFormatException, и я нашел решение. Разрешение:
Тогда вы готовы использовать модель :)
Если вы хотите использовать 64-битную версию, см. Мой ответ здесь:
64-разрядная конфигурация Oracle DataAccess
Если вас устраивает 32-разрядная версия, просто установите 32-разрядную версию Oracle Data Access Components. Поскольку сервер разработки Visual Studio 32-битный, у вас не будет никаких проблем.
У меня было такое же исключение, и я обнаружил, что это произошло, когда я обновился до версии MVC выше 2.0, в моем случае MVC 4.0.
Создание нового проекта в MVC 2.0 решило проблему.
Чтобы быстро и легко решить эту проблему, вам нужно выполнить только следующие шаги:
- Установите ODACv11.2021Xcopy_x64, запустив файл install.bat, затем проверьте "c: \ oracle" как созданный путь.
- скопируйте папку конфигурации сети [содержащую папку администратора с файлом tnsnames.ora] в 32bit oracle в "c: \ oracle".
- Добавлен путь "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 и все в порядке.
Возможно, это можно сделать, изменив настройки среды, как предложено выше, но этот метод имеет то преимущество, что не изменяет какие-либо настройки в конфигурации сервера.
Читайте также: