jobin007007 Ответов: 6

64 бит ASP.NET Project - попытка загрузить клиентские библиотеки Oracle вызвала исключение BadImageFormatException.


Я получаю "Попытка загрузить клиентские библиотеки Oracle вызвала исключение BadImageFormatException. Эта проблема возникает при работе в 64-разрядном режиме с установленными 32-разрядными клиентскими компонентами Oracle."

У меня есть главная ASP.NET проект, который является 64-битным(установлен в Auto, хотя) и другой проект базы данных oracle 64-битный(установлен в Auto). Я получаю вышеуказанную ошибку в "Connection.open()- в проекте базы данных oracle. Я использую System.Data.Клиент Oracle, 64-битная версия-2.0.50727.5420


Редактировать.Я подумал, что должен упомянуть, что использую последнюю версию Instant Client v 11.0.2.0 от Oracle для запуска своей программы.
...Я также попробовал провайдера ODAC от Oracle. Та же проблема.

Кроме того, проект базы данных oracle, похоже, прекрасно работает в 64-битном режиме сам по себе без каких-либо проблем. Способ, которым я проверил, что он работает в 64-битном режиме, состоял в том, что я просто заглянул в Диспетчер задач во время выполнения проекта базы данных Oracle, и в названии проекта не было *32. Все ссылки фрейма на этот проект уже являются 64-битными. Похоже, что проблема в том, что ASP.NET проект который находится на уровне 3,5

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


1. удалил все 64-битные ссылки из моих проектов. Добавлены 64-битные ссылки на dll из Windows\Microsoft.Net\2.0*\.NETFRAMEWORK64.

2. добавлена 32-битная поддержка в моем пуле приложений в IIS7.

3. Когда я запускаю проект, я все еще получаю& 'попытка загрузить клиентские библиотеки Oracle вызвала исключение BadImageFormatException. Эта проблема возникает при работе в 64 битном режиме с установленными 32 битными клиентскими компонентами Oracle


Кто-нибудь добился в этом успеха?

У кого-нибудь есть предложения. Я мог бы сделать весь свой проект x86 но тогда я использую 64 битный сервер processor..so это кажется плохим. Должен ли я загрузить Orcale Data access provider из Oracle и попробовать его? Он должен быть 64-битным.

Любые предложения будут очень оценены.

Спасибо
Джобин Томас

6 Ответов

Рейтинг:
2

jobin007007

ВАУ...Наконец-то решен этот вопрос!!!!

Я думаю, что меня смутили все сообщения, которые я читал, которые говорили мне установить 32-битный Enabled =true в пуле приложений для IIS.

Решение, по-видимому, состоит в том, чтобы установить 32-битный Enabled=false в IIS, потому что по какой-то причине установка 32-битного Enabled =true, похоже, заставляет IIS выполнять код как 32-битный, что вызывает исключение.

Это сообщение, которое помогло мне решить эту проблему..Спасибо провайдеру..

http://social.msdn.microsoft.com/Forums/en-US/netfx64bit/thread/b8cb5f3d-8e61-4e63-b325-d07b261f77ac/[^]

Так что просто перейдите в свой пул приложений и отключите 32-битную версию. Полегче!!!

Спасибо, что посмотрели мои посты.


kguyot

Это сработало и для меня. Сообщение об ошибке было немного Мисс Лидинг, но это решило все для меня! Отличная работа!

StefanHam

Работал большой для меня, спасибо отводите

Рейтинг:
19

jobin007007

Я мог бы узнать, почему у меня возникла эта проблема. Я проверял все модули, загруженные в мой компьютер. ASP.NET проект, и я вижу, что все ссылки относятся к 32-битным dll вместо 64-битных DLL( модули можно проверить, перейдя в Debug - > Windows - >Modules . Ниже приведены некоторые из сообщений, которые я вижу->



C:\Windows\assembly\GAC_32\System-да.Транзакции\2.0.0.0__b77a5c561934e089\System.Операции.dll да N/A символы загружены. C:\Users\ctdi\AppData\Local\Temp\SymbolCache\MicrosoftPublicSymbols\System-да.Transactions.pdb\BD0888386832412091CB17B3C28CF7721\System.Transactions.pdb 18 2.0.50727.4927 (NetFXspW7.050727-4900) 6/4/2009 1:41 AM 659C0000-65A5C000 [5868] w3wp.exe: управляемый
Система.Услуги предприятий.файл DLL

C:\Windows\assembly\GAC_32\System-да.EnterpriseServices\2.0.0.0__b03f5f7f11d50a3a\System.Услуги предприятий.dll Yes N/A не может найти или открыть файл PDB. 19 2.0.50727.5420 (Win7SP1.050727-5400) 9/29/2010 12:02 AM 1C700000-1C79D000 [5868] w3wp.exe: управляемый

C:\Windows\assembly\GAC_32\System.Data.OracleClient\2.0.0.0__b77a5c561934e089\System.Data.OracleClient.dll Yes N/A не может найти или открыть файл PDB. 21 2.0.50727.5420 (Win7SP1.050727-5400) 9/29/2010 12:04 AM 626E0000-627F4000 [5868] w3wp.exe: управляемый</pre>

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

<pre lang="msil">mscorlib.dll C:\Windows\assembly\GAC_64\mscorlib\2.0.0.0__b77a5c561934e089\mscorlib.dll да N/A не может найти или открыть файл PDB. 1 2.0.50727.5420 (Win7SP1.050727-5400) 9/28/2010 11:53 PM 000007FEF8250000-000007FEF912C000 [6264] DAccess_OLP.vshost.exe: управляемый

System.Data.dll C:\Windows\assembly\GAC_64\System-Да.Data\2.0.0.0__b77a5c561934e089\System.Data.dll да N/A не может найти или открыть файл PDB. 10 2.0.50727.5420 (Win7SP1.050727-5400) 9/29/2010 12:01 AM 000007FEE9120000-000007FEE996B000 [6264] DAccess_OLP.vshost.exe: управляемый
Система.Данные.OracleClient.файл DLL

C:\Windows\assembly\GAC_64\System.Data-да.OracleClient\2.0.0.0__b77a5c561934e089\System.Data.OracleClient.dll Yes N/A не может найти или открыть файл PDB. 11 2.0.50727.5420 (Win7SP1.050727-5400) 9/29/2010 12:01 AM 000007FEEA040000-000007FEEA1B3000 [6264] DAccess_OLP.vshost.exe: управляемый</pre>


Все проекты в моем автономном проекте Oraclient ссылаются на 64 - битные библиотеки. Так вот, кажется, почему ASP.NET сообщает, что "попытка загрузить клиентские библиотеки Oracle вызвала исключение BadImageFormatException".

Тот самый ASP.NET проект загружает 32-битные библиотеки всего, что я указал, и поэтому терпит крах....


Как мне это исправить? Как мне указать правильные библиотеки в ASP.NET проект? Я действительно ссылался на 64-битные проекты в ASP.NET изначально. Так почему же это происходит ASP.NET проект загружает все эти 32-битные библиотеки.


Любая помощь будет оценена по достоинству. Спасибо


Рейтинг:
1

Patrick Kalkman

Обычно вам не нужно явно устанавливать платформу для Microsoft .Чистая программа. Вы указываете AnyCPU в Visual Studio, и ваша программа компилируется в IL-код. Во время выполнения Microsoft.Net как раз вовремя компилирует IL-код в x86 или x64 в зависимости от операционной системы.

Явно указывая платформу в Visual Studio, вы заставляете во время выполнения IL-код преобразовываться в x86 или x64.

Это становится другим, когда вы ссылаетесь на неуправляемую библиотеку, что имеет место в вашем приложении. Вы не можете ссылаться на 64-битную неуправляемую dll из 32-битной программы и наоборот. Единственный вариант-явно указать платформу в Visual Studio.

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


[no name]

Вот это-то и сбивает с толку. Я не ссылаюсь ни на какие неуправляемые библиотеки в своей программе. У меня есть 64-битные версии всех платформ .net в качестве ссылок. Система.Данные.OracleClient является частью managed .NET.
Почему я все еще получаю исключение плохого изображения?

Рейтинг:
0

Jörgen Andersson

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


[no name]

Должно быть.

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

Рейтинг:
0

KK shah

ДЛЯ НАСТОЛЬНОГО МОДУЛЯ

Решение установить дополнительные опции собственность компиляции целевой процессор на x86, это позволит решить проблемы с подключением

В ТО ВРЕМЯ КАК В ВЕБ

СОЗДАЙТЕ ОДИН ДРУГОЙ ПУЛ ПРИЛОЖЕНИЙ В IIS НАЗНАЧЬТЕ ЕМУ ИМЯ УСТАНОВИТЕ ENABLE 32 BIT APPLICATION POOL=TRUE.
И назначьте этот пул приложений конкретному веб-модулю в IIS, он будет работать F9....



Кунал Шах

Kunal.shah06@gmail.com


Reena Kshatriya

Это сработало для меня

KK shah

хумм его вообще работает во всех ситуациях

KK shah

Да это действительно работает во всех решениях

Рейтинг:
0

Mohd Ismail Siddiqui

Решено!!!!


I've run it similar issues with the Oracle Data Access Components before. My guess is that you built your .exe using the AnyCPU platform target in your console application's build configuration. This means that when it's run on your 32-bit development machine it will be loaded into a 32-bit process whereas on the 64-bit server it will be loaded into a 64-bit process. The problem is that the Oracle.DataAccess.dll component comes in two different flavours, a 32-bit and 64-bit version. When you copied the 32-bit version into the deployment bin directory from your development machine, at runtime the application would try to load an assembly explicitly marked as 32-bit into a 64-bit process which doesn't work and explains why you get the System.BadImageFormatException.

Поэтому, возможно, лучшим решением было бы явно нацелить 64-разрядную платформу в настройках проекта вашего консольного приложения для конфигурации выпуска и ссылаться на 64-разрядную версию Oracle.DataAccess.dll. На сервере вам нужна либо 64-разрядный.Доступа к данным.dll должна быть установлена в GAC (как это могло быть при установке ODAC) или вам необходимо развернуть 64-разрядную сборку вместе с вашим приложением.

Я обнаружил, что этот материал причиняет боль, когда вам нужно нацелиться на обе платформы.

Для получения любой справки, пожалуйста, перейдите по этой ссылке.
http://stackoverflow.com/questions/7851090/deploying-c-sharp-console-app-with-oracle-dataaccess-reference/7851988#7851988