Не удалось загрузить файл или исключение сборки - PullRequest
30 голосов
/ 23 февраля 2012

Есть мысли о том, что может быть причиной этого исключения?

У меня есть proj веб-службы, когда я загружаю ссылку, я получаю

Не удалось загрузить файл или сборку Interop.DIB или одну из ее зависимостей. Предпринята попытка загрузить программу с неверным форматом.
Сведения об исключении: System.BadImageFormatException: Не удалось загрузить файл или сборку Interop.DIB или одну из ее зависимостей. Предпринята попытка загрузить программу с неверным форматом.

Внутренние исключения:

[BadImageFormatException: не удалось загрузить файл или сборку Interop.DIB или одну из ее зависимостей. Была предпринята попытка загрузить программу с неверным форматом.]

[ConfigurationErrorsException: не удалось загрузить файл или сборку Interop.DIB или одну из ее зависимостей. Была предпринята попытка загрузить программу с неверным форматом.]

[HttpException (0x80004005): не удалось загрузить файл или сборку Interop.DIB или одну из ее зависимостей. Была предпринята попытка загрузить программу с неверным форматом.]

Информация о версии:
Microsoft .NET Framework Версия: 4.0.30319; ASP.NET версия: 4.0.30319.272

Ответы [ 12 ]

81 голосов
/ 23 февраля 2012

Хорошо, ответ: «Пуск» - «Выполнить» -> введите inetmgr, и в левых пулах приложений выберите DefaultAppPool и имя виртуального каталога приложения, и для обоих убедитесь, что для 32-битных приложений установлено значение true, используюIIS7.0 и Windows 7 64-разрядная.enter image description here

27 голосов
/ 23 февраля 2012

BadImageFormatException обычно означает конфликт между 64 и 32 битами.Одна из сборок настроена на конкретную платформу , т. Е. 64-битную или 32-битную, в то время как другая установлена ​​или по умолчанию настроена на другую.Проверьте, предназначены ли обе сборки для одной и той же платформы, предпочтительно «Любой процессор».Другими словами, может случиться так, что 64-битная сборка пытается загрузить 32-битную или наоборот.

Это также применимо, если вы вызываете COM или DLL, которые скомпилированы для другой платформы, напримерВы вызываете 32-битную COM / DLL из сборки в 64-битной системе, где платформой сборки по умолчанию будет x64.В этом случае настройте платформу вашей сборки так, чтобы она соответствовала.

Чтобы изменить платформу, перейдите в Свойства проекта -> Построить -> Платформа.

9 голосов
/ 17 марта 2016

У меня была эта проблема при попытке использовать 64-разрядные .dll в моем проекте ASP.Net в Visual Studio 2013.

Решением было нажать Инструменты \ Параметры и поставить галочку в этом поле:

enter image description here

3 голосов
/ 23 февраля 2012

Самая распространенная причина в моем опыте заключается в том, что вы внесли изменение в ссылочную сборку, которая требует перестройки других сборок с использованием этой измененной сборки, и не перестроили их.EXE, который ссылается на DLL.Вы добавляете что-то к указанной DLL, которая добавляет новый метод, новый параметр, что угодно.Это изменяет внешнюю «подпись» DLL;то есть расположение в памяти различных точек входа.Вы не восстанавливаете EXE.Когда EXE загружается и пытается сослаться на новую DLL, его старая точка входа больше не действительна, поэтому он не может выполнить необходимый код.

Пример # 2: у вас есть x86 EXE, который ссылается на DLL.Эта DLL также должна быть скомпилирована для x86 (или любого процессора).Если вы перестроите его для x64, EXE-файл, работающий в 32-разрядном пространстве, не поймет инструкции и не зарегистрирует ссылки на 64-разрядный «расширенный» мир, и будет плакать дядя.

2 голосов
/ 30 августа 2015

У меня была такая же проблема на Visual Studio 2015 на Windows 10 x64.Я уже компилировал в любом режиме процессора.Это было приложение MVC4 по умолчанию (ничего не добавлено).Здесь я нашел простое решение, которое сработало для меня: https://github.com/aspnet/Home/issues/524

В VS 2015: Инструменты> Параметры> Проекты и решения> Веб-проекты> Использование 64-разрядной версии IIS Express для веб-сайтов и проектов

1 голос
/ 23 февраля 2012

Если бы мне пришлось угадать, это либо а) не найденная сборка с поддержкой, либо б) COM DLL не зарегистрирована в локальном реестре. Простого копирования DIB в папку / bin недостаточно, если вы работаете с COM.

Я полагаю (B) - наиболее вероятный ответ на происходящее.

0 голосов
/ 24 апреля 2018

Моя ошибка исправлена, с изменением опции сборки на:

в моем проекте C # .net win:

Свойства> Сборка> Цель платформы> 'x86'

Я случайно изменил его значение на «Любой процессор» и забыл изменить его.

0 голосов
/ 18 апреля 2018

Эта работа для меня, если не работа для вас, не голосуйте. Это невежливо

Так что это работает, если я изменяю в проекте c # с любого процессора на x86 (все dll скомпилированы в WIN32) из ​​Свойства -> Сборка -> Цель платформы. я работать на 64-битном ПК с Win7 и, очевидно, если я использую любой процессор в качестве целевой не находит оболочку dll.

https://www.codeproject.com/Questions/358717/Could-not-load-file-or-assembly-dll-file
0 голосов
/ 31 января 2017

Что мне помогло, так это обновление BIOS на моей машине!

0 голосов
/ 09 июля 2014

Альтернативой этой проблеме является изменение свойств сборки вашего проекта.

Для vb.net попал в Project -> Properties -> Compile -> Advanced Compile Options Здесь меняют целевой процессор

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...