Не удалось загрузить файл или сборку "Oracle.DataAccess" или одну из его зависимостей. Была сделана попытка загрузить программу с неправильным форматом
Я установил веб-приложение на IIS 7.0 Windows Server 2008 R2 64bit.
Я имею в виду oracle.DataAccess.dll;
Когда я пытаюсь получить доступ к приложению, я получаю следующее сообщение:
"Не удалось загрузить файл или сборку" Oracle.DataAccess "или одну из его зависимостей. Была сделана попытка загрузить программу с неправильным форматом".
Кто-нибудь может мне помочь, пожалуйста?
Ответы
Ответ 1
Кажется, что процесс установки компонента Oracle Data Access Component с использованием версии 11.2 Release 3 (11.2.0.2.1) с Xcopy Deployment "нарушен. Чтобы исправить это, вы должны зарегистрировать недостающие сборки в GAC. Чтобы сделать это для этой конкретной версии, запустите эти команды из консоли администратора:
md C:\Windows\assembly\GAC_32\Oracle.DataAccess\4.112.2.0__89b483f429c47342\
copy %ORACLE_HOME%\odp.net\bin\4\Oracle.DataAccess.dll C:\Windows\assembly\GAC_32\Oracle.DataAccess\4.112.2.0__89b483f429c47342\
md C:\Windows\assembly\GAC_32\Oracle.Web\4.112.2.0__89b483f429c47342\
copy %ORACLE_HOME%\asp.net\bin\4\oracle.web.dll C:\Windows\assembly\GAC_32\Oracle.Web\4.112.2.0__89b483f429c47342\
Обратите внимание, что это регистрирует только ресурсы DLL, но не другие языки. Итак, если вы используете какой-либо другой язык, чем английский (de, es, fr, it, ja, ko, pt-BR, zh-CHS и zh-CHT), вам также необходимо зарегистрировать их, используя соответствующий ресурс файл.
Если на компьютере установлена Visual Studio, вы можете вместо этого выполнить следующие команды:
gacutil /i %ORACLE_HOME%\odp.net\bin\4\Oracle.DataAccess.dll
gacutil /i %ORACLE_HOME%\asp.net\bin\4\oracle.web.dll
Примечание. Найдите файл gacutil.exe в папке установки Visual Studio.
Надеюсь, что это поможет.
P.S. Или вы можете попробовать this.
Ответ 2
Я не смог зарегистрировать сборку 11.2 Release 5 в GAC параметр "Включить 32-разрядные приложения" для пула приложений в true.
Ответ 3
Возможно, вам потребуется включить 32-битные приложения в AppPool.
http://www.alexjamesbrown.com/development/could-not-load-file-or-assembly-chilkatdotnet2-or-one-of-its-dependencies-an-attempt-was-made-to-load-a-program-with-an-incorrect-format/
Ответ 4
Вам необходимо зарегистрировать эту DLL на реальном сервере с помощью утилиты GAC. Также проверьте, присутствует ли его в папке bin или нет. Некоторое время отсутствует DLL в каталоге bin приводит к той же ошибке
Ответ 5
В моем случае я использую VS 2010, Oracle v11 64 бит. Я могу опубликовать в 64-битном режиме (установка в режиме "Любой процессор" в конфигурации веб-проекта), и я могу настроить IIS на сервере Production на 32-битную компиляцию на false (потому что сервер 64 бит, и мне нравится использовать его).
Затем для решения проблемы "Не удалось загрузить файл или сборку" Oracle.DataAccess "(иногда появляется сообщение об ошибке" Сообщение компилятора: CS1705: Сборка "):
- На локальном компьютере и сервере установлен Oracle v11, 64 бит.
- Во всех локальных Dev-компьютерах я ссылаюсь на 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 и снова опубликовать на сервере, и он работает.
Ответ 6
Установка 64-разрядного ODAC 11.2 Release 3 (11.2.0.2.1) Xcopy для Windows x64 из:
http://www.oracle.com/technetwork/database/windows/downloads/index-090165.html
Исправлено это для меня. Обязательно обновите свой системный путь в соответствии с шагом # 4 в файле readme.
Ответ 7
Принятый ответ, опубликованный Джорджем Нету, помог решить мою проблему, но мне пришлось возиться с некоторыми дополнительными пустяками:
Описание проблемы:
В разделе C:\Windows\assembly я обнаружил два элемента Oracle.DataAccess(GAC-папки?). Relict, вызванный несколькими установками клиента Oracle. Один элемент показал версию 2.112.1.0, но был на самом деле версия 2.121.2.0 (видимая через Properties- > Version). Эта несогласованность была ошибкой.
Первые бесполезные попытки:
- попытался удалить и переустановить полный клиент Oracle, как в версиях Runtime/Administrator
- попытался перераспределить правильные .dlls
- попытался скопировать новые установленные сборки в серверные времена GAC, как указано в принятом ответе выше с помощью командной строки (но это не решило несоответствие версии..)
- попытался использовать
gacutil /i ...
Конечный успех:
Я приземлился на странице Gacutil.exe msdn и в конечном итоге смог удалить элементы из папки сборки C:\Windows \.
gacutil /u Oracle.DataAccess, Version=2.112.1.0, Culture="Neutral",PublicKeyToken=45e343aae32233ca
gacutil /u Oracle.DataAccess, Version=2.212.2.0, Culture="Neutral",PublicKeyToken=45e343aae3223abc
gacutil /u Oracle.Web, Version=2.112.1.0, Culture="Neutral",PublicKeyToken=45e343aae3223def
После этого я повторил две команды gacutil /i ...
, и две DLL появились там в согласованных версиях.
Наконец перезапустил IIS, и он работает.