Не удалось загрузить файл или сборку... Была сделана попытка загрузить программу с неправильным форматом (System.BadImageFormatException)

У меня есть два проекта: ProjectA и ProjectB. ProjectB - консольное приложение, которое зависит от ProjectA. Вчера все работало нормально, но сегодня, когда я бегу ProjectB, я получаю следующее:

Исключение BadImageFormatException было необработанным:
Не удалось загрузить файл или сборку "ProjectA, Version = 1.0.0.0, Culture = neutral, PublicKeyToken = null" или одну из его зависимостей. Была сделана попытка загрузить программу с неправильным форматом.

Оба являются просто регулярными проектами, без зависимости от каких-либо других проектов, отличных от него. Оба они полностью .Net - нет собственного кода и нет P/Invoke. У меня есть другие проекты, которые зависят от ProjectA и все еще работают отлично.

Вещи, которые я пробовал:

  • Убедитесь, что оба проекта настроены на "Любой процессор", когда установлен флажок сборки. Они.
  • Убедитесь, что оба проекта предназначены для одной и той же целевой структуры (профиль клиента .NET 4.0).
  • В ProjectB → Ссылки → ProjectA → Свойства, убедитесь, что для параметра "Копировать локальное" установлено значение "Истина" _ (я проверил, что файл ProjectA.dll скопирован правильно)
  • Очистить/Восстановить решение. Я даже попытался вручную удалить папки /bin и/obj в обоих проектах.
  • Перезапустите Visual Studio. Перезагрузите компьютер.
  • Проверьте полностью новую копию репозитория.

Но я все равно получаю ту же ошибку. Я понятия не имею, что я сделал для этого, и как это исправить. Любые идеи?

Ответ 1

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

Ответ 2

Возможно, вы столкнулись с проблемой на своем веб-сайте после развертывания на сервере.

Затем вам нужно настроить пул приложений для включения 32-битных приложений.

шаги

  1. Откройте диспетчер IIS
  2. Нажмите на пулы приложений
  3. Выберите любой пул приложений, который вы используете
  4. На правой панели нажмите Расширенные настройки...

  5. Установите для параметра Включить 32-разрядные приложения значение True

    Advanced Settings Enable 32-Bit

Ответ 3

У меня просто появилось это сообщение об ошибке с запуском IIS Express в Visual Studio 2015. В моем случае мне нужно было запустить 64-разрядную версию IIS Express:

Инструменты → Параметры → Проекты и решения → Веб-проекты
Установите флажок в котором говорится: "Используйте 64-битную версию IIS Express для веб-сайтов и проекты".

Скриншот:

Снимок экрана параметров VS для веб-проекта.

Ответ 4

У меня была такая же проблема. Я установил Project A "Target Platform" ( "Проект A" (правый клик) → Свойства- > Сборка → "Платформа Target" ) на x86, но сохранил Project B в "Любой процессор". Установка проекта B на "x86" зафиксировала это.

Ответ 5

У меня была эта проблема с запуском модульных тестов (xunit) в Visual Studio 2015 и наткнулась на следующее исправление:

Menu Bar -> Test -> Test Settings -> Default Processor Architecture -> X64

Ответ 6

Возможно, вам понадобится изменить параметр Appilation Pool "Включить 32-разрядные приложения" на TRUE в IIS7, если в вашем проекте имеется как минимум 1 32-разрядная dll\exe.

Ответ 7

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


Некоторые другие упомянули, что Any CPU может решить эту проблему.

Там пара мест вам нужно сделать, и это может быть не просто так просто, как выбрать из выпадающего списка. Это исправило это для меня:

1) Вам нужно сделать это и здесь:

enter image description here

2) И также в Configuration Manager (щелкните правой кнопкой мыши по решению)

enter image description here

Но что, если его там нет?

Затем нажмите " New и выберите следующие настройки: (спасибо @RckLN)

enter image description here

Ответ 8

У меня была такая же проблема с несколькими проектами в том же решении, что я установил все целевые среды .NET Framework 4 и x86 для целевого ЦП и, наконец, успешно скомпилирован.

Ответ 9

Вы также можете увидеть эту проблему, если пытаетесь упаковать 64-битный проект с установщиком MSI в VS. ( "Причина в том, что встроенная прокладка, упакованная в файл .msi, представляет собой 32-разрядный исполняемый файл." )

Подробнее см. здесь http://blogs.msdn.com/b/heaths/archive/2006/02/01/64-bit-managed-custom-actions-with-visual-studio.aspx

Ответ 10

Ни одно из этих решений не работало для меня - но, удалив содержимое папок bin и obj, все было прохладно снова.

Ответ 11

Я получил это при создании проекта через Visual Studio Online (VSTS) с помощью Visual Studio Build Шагов.

Решение:

  • Удалить существующую исходную папку
  • Явно установить "Любой процессор" на платформе для всех сборников Visual Studio, включая зависимости (см. снимок экрана ниже).
  • Повторно запустите сборку

VSO Screenshot

Ответ 12

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

В снимке Exception для FusionLog я увидел следующее сообщение:

... C:\Windows\Microsoft.NET\Framework64...

Подробнее о журнале слияния: http://msdn.microsoft.com/en-us/library/e74a18c4(v=vs.110).aspx

Все проекты имели целевой процессор AnyCPU. Я изменил проект приложения (проект, который ссылается на все другие проекты) на целевой процессор x86. Теперь он работает.

Не знаю, как произошел смешение ЦП процессора без видимых причин, но это произошло.

Ответ 13

Я также сталкиваюсь с этой проблемой в проекте, через несколько минут я нашел решение, эта проблема связана с конфигурацией процессора, Если вы используете Visual Studio 2010 или VS 2013, просто перейдите в проект свойства, а затем выберите Скомпилировать с боковой панели, down, 5th Drop-down будет Target CPU:, вы должны установить его в x86 или x64 в соответствии с вашими требованиями вместо Any CPU.

Моя проблема была решена после ее изменения на x86.

Ответ 14

Это также может произойти только при наличии нескольких поддерживаемых фреймворков, определенных в файле app.config, и, заставляя приложение работать в другой .NET-среде, отличной от один , упомянутый первым в файле app.config.

А также это срабатывает, когда у вас есть обе указанные системы, доступные в вашей системе.

В качестве обходного решения поднимите целевую структуру, которую вы собираетесь использовать для отладки в app.config

ex: если вы пытаетесь выполнить в .NET 4, файл конфигурации должен иметь что-то похожее на это,

<supportedRuntime version="v4.0"/>
<supportedRuntime version="v2.0.50727"/>

Ответ 15

В моем проекте для С# свойство проекта → [Build] → Цель платформы: любой процессор, и снимите флажок Prefer 32-bit, чтобы позволить компилятору выбирать автоматически.

Ответ 16

Для сборки Chilkat.NET 4.5 требуется, чтобы среда исполнения VC++ 2012 или 2013 была установлена на любом компьютере, на котором выполняется ваше приложение. На большинстве компьютеров он уже установлен. У вашего компьютера разработки будет это, потому что Visual Studio установлен. Однако при развертывании на компьютере, где требуемое время выполнения VC++ недоступно, произойдет ошибка выше:

Установите все нижние пакеты

Visual C++ Распространяемые пакеты для Visual Studio 2013 - vcredist_x64

Visual C++ Распространяемые пакеты для Visual Studio 2013 - vcredist_x86

Visual C++ Распространяемые пакеты для Visual Studio 2012 - vcredist_x64

Visual C++ Распространяемые пакеты для Visual Studio 2012 - vcredist_x86

Ответ 17

Если вы используете LibreOffice из своей программы через интеграцию cli.net, как и я, я получил ту же ошибку. Я использую более старую версию LibreOffice в рабочей среде на моем ПК. Я установил более новую версию, которая находилась в конфликте. Просто удалите LibreOffice. Я нашел решение здесь .NET CLI: Не удалось загрузить файл или сборку 'cli_cppuhelper'

Ответ 18

Это может быть немного смешно, но у меня была такая же проблема с нормальным рабочим кодом. Я добавил StreamWriter и StreamReader, и он дал эту ошибку. Решение: я взял этот код в квадратные скобки комментариев, затем отлаживал и снова начал работать

Ответ 20

В моем случае отсутствовала зависимость в dll, которая вызвала это исключение. Я проверил с помощью Dependency Walker, добавил недостающую dll и проблема была решена.

Более конкретно, я каким-то образом повредил свой opencv_core340.dll, случайно добавив в него ключевые слова SVN, и, таким образом, моя dll больше не могла его использовать. Однако я не верю, что решение этой проблемы зависит от того, повреждена ли DLL или отсутствует. Я просто добавляю это ради предоставления полной информации.

Ответ 21

Стреляйте! Я знал об этой проблеме. Я думал, что все делал правильно, пока случайно не увидел "x86" в окне вывода VS, и когда я понял причину. Потратил на это несколько минут сегодня.

Конфигурация в окне "Опубликовать" была установлена на "x86"; в то время как везде это был "х64".

Убедитесь, что он синхронизирован с менеджером конфигурации, опубликуйте настройки, конфигурации решения и настройки IIS (если это ваш веб-сервер).

Также имейте в виду, что VS - это 32-разрядное приложение, а IIS - 64-разрядное. 32-разрядные приложения по умолчанию отключены в IIS.

enter image description here

Ответ 22

Моя машина показала мне обновление BIOS, и я подумал, не связано ли это с внезапным появлением этой ошибки. И после того, как я сделал обновление, ошибка была решена, и решение было построено отлично.

Ответ 23

Вы пытаетесь запустить ваш.exe файл из cmd? Это была моя ошибка. Просто запустите файл.exe, дважды щелкнув по нему. Если это.NET Core SCD для Windows 8.1/Windows Server 2012 R2 x64.