Не удалось загрузить файл или сборку ... была сделана попытка загрузить программу, имеющую неверный формат (система.Исключение badimageformatexception)

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

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

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

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

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

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

21 ответов


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


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

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

действия:

  1. открыть Диспетчер IIS
  2. нажмите на пулы приложений
  3. выберите пул приложений, который вы используете
  4. на правой панели выберите Дополнительные параметры...
  5. Set включить 32-разрядные приложения для Правда

enter image description here


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

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

скриншоты:

Screenshot of VS options for Web Project.


У меня была такая же проблема. Я установил "цель платформы" проекта A ("проект A"(щелкните правой кнопкой мыши)->Свойства->сборка->" цель платформы") в x86, но сохранил проект B в"любом процессоре". Задание проекта " Б " на "x86" это исправил.


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

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

возможно, Вам придется изменить Приложение, Бассейн настройка "Enable 32bit Applications" на TRUE в IIS7, если у вас есть по крайней мере 1 32bit dll\exe в вашем проекте.


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


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

см. здесь для получения более подробной информации: http://blogs.msdn.com/b/heaths/archive/2006/02/01/64-bit-managed-custom-actions-with-visual-studio.aspx


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


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

решение:

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

VSO Screenshot


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

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

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

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

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

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


Я также сталкиваются с этой проблемой в проекте, через несколько минут я нашел решение, эта проблема связана с конфигурацией CPU, Если вы используете Visual Studio 2010 или VS 2013, just goto project ' s свойства и выберите Compile из боковой панели, и будет 5 выпадающих, 5-й выпадающий будет целевой процессор:, вы должны установить его на x86 или x64 согласно вашим требованиям вместо любого К. П. У.

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


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

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

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

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

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

в моем проекте для C#, свойство проекта - >[Build] - >цель платформы: любой процессор, и снимите флажок предпочесть 32-бит, чтобы компилятор мог выбирать автоматически.


сборка 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


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


несколько других упомянули выбор Any CPU исправить эту проблему.

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

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

enter image description here

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

enter image description here

но что, если его не существует???

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

enter image description here


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


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


У меня также была эта проблема с запуском модульных тестов с помощью ReSharper в Visual Studio 2017 и исправлена со следующей конфигурацией:

enter image description here

также вы можете изменить настройку теста запуска ReSharper: https://resharper-support.jetbrains.com/hc/en-us/articles/207242715-How-to-run-MSTest-tests-using-x64-configuration


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


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