"Была сделана попытка загрузить программу, имеющую неверный формат", даже если платформы одинаковые
Я вызываю функции из 32-разрядной неуправляемой DLL на 64-разрядной системе. Что я получаю это:
BadImageFormatException: была сделана попытка загрузить программу с неверным форматом. (Исключение из HRESULT: 0x8007000B)
сначала у меня были свои проекты, настроенные на любую платформу процессора, поэтому я изменил их на x86, но эта ошибка все еще происходит. Это действительно единственное исправление, которое я знаю для этого.
библиотеки DLL не повреждены или что-то еще, потому что я могу использовать их с другими программами (что у меня нет источника). Я думал, что, возможно, это не было найти зависимость, но я проверил, и они все там. Кроме того, разве это не бросит DllNotFoundException в этом случае?
что еще я могу сделать? И прежде чем вы скажете: "вместо этого используйте 64-разрядную неуправляемую DLL", позвольте мне указать, что ее нет. ;)
15 ответов:
при попытке запустить 32-разрядные приложения на IIS 7 (и / или 64-разрядной ОС), вы получите ту же ошибку. Итак, из IIS 7 щелкните правой кнопкой мыши на пуле приложений приложений и перейдите в раздел "Дополнительные настройки" и измените "включить 32-разрядные приложения" на "TRUE".
перезагрузите ваш сайт и он должен работать.
Почему-то Build флажок в Диспетчере конфигураций был снят для моего исполняемого файла, поэтому он все еще работал со старой сборкой любого процессора. После того, как я исправил это, Visual Studio пожаловался, что он не может отладить сборку, но это было исправлено с помощью перезагрузки.
на Visual Studio, щелкните правой кнопкой мыши проект -> на левой панели нажмите кнопку Build tab,
под Целевой Платформы выберите x86 (или в более общем плане архитектура чтобы соответствовать библиотеке, на которую вы ссылаетесь)
надеюсь, это кому-то поможет! :)
У меня тоже была эта проблема. Пробовал все предложения здесь, но они не помогли.
Я нашел еще одну вещь, чтобы проверить, что установил его для меня. В Visual Studio щелкните правой кнопкой мыши на проекте и откройте "Свойства". Нажмите на вкладку "компиляция", а затем нажмите на кнопку" Дополнительные параметры компиляции " в нижней части.
Проверьте выпадающее меню "целевой процессор". Он должен соответствовать "платформе", которую вы строите. То есть, если вы создаете "любой процессор", то "целевой процессор" должен сказать " любой ЦПУ." Пройдите через все ваши платформы, сделав их активными и проверьте эту настройку.
Если вы столкнулись с этой ошибкой, когда вы нажимаете зеленую кнопку со стрелкой, чтобы запустить приложение, но все еще хотите запустить приложение в 64-разрядной версии. Вы можете сделать это в VS 2013 или 2015
перейдите в раздел: Инструменты > Параметры > проекты и решения > веб-проекты > используйте 64-разрядную версию IIS Express
немного не по теме для этого поста, но поиск этого сообщения об ошибке привел меня сюда.
Если вы строите через team system и получаете эту ошибку, вкладка процесс определения сборки имеет параметр "платформа MSBuild". Если установлено значение "авто", может возникнуть эта проблема. Изменение его на " X86 " также может устранить ошибку.
в моем случае я использовал собственную DLL в C#. Эта DLL зависела от нескольких других DLL, которые отсутствовали. После того, как эти другие DLL были добавлены все работало.
см. Также ответ, которые решали ту же проблему для меня.
опубликовано Luis Mack на 5/12/2010 в 8: 50 AM я нашел ту же проблему, только для конкретного проекта при компиляции на 64-разрядной машине. Исправление, которое, кажется, работает, чтобы вручную изменить один символ в потоке изображений каждый раз, когда usercontrol или форма редактируется в конструкторе
AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4wзаменить на
AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj0yLjAuMC4wэто 00LjAuMC4w на 0yLjAuMC4w в конце строки (00 назад к 0y)
в моем случае, я использую крошечный .exe, который загружает библиотеки DLL, которые ссылаются посредством отражения. Поэтому я просто делаю эти шаги, которые спасают мой день:
в свойствах проекта в обозревателе решений щелкните на вкладке построить, Я выбираю целевая платформа х86
в моем случае я запускал тесты через MSTest и обнаружил, что я развертываю как 32-разрядную, так и 64-разрядную DLL в тестовый каталог. Программа предпочитала 64-разрядную DLL и вызывала ее сбой.
TL; DR убедитесь, что вы развертываете только 32-разрядные библиотеки DLL для тестов.
Я получил эту проблему решена в "Windows" Способ. После проверки всех моих настроек, очистки решения и его восстановления я просто закрываю решение и снова открываю его. Затем это сработало, поэтому VS, вероятно, не избавился от некоторых вещей во время очистки. Когда логические решения не работают, я обычно обращаюсь к нелогичным (или кажущимся нелогичными). Окна меня не подводят. :)
Я смог исправить эту проблему, сопоставив мою версию сборки с версией .NET на сервере.
Я дважды щелкнул .exe просто чтобы посмотреть, что произойдет, и он сказал мне установить 4.5....
Так что я понизил до 4.0 и это сработало!
поэтому убедитесь, что ваши версии совпадают. Он работал на моем dev box отлично, но сервер имел более старую версию .NET.
в моем случае это было неправильное содержимое файла. DLL был загружен из интернета, но содержание DLL было HTML page :D Попробуйте проверить, если это двоичный файл, если это кажется правильным DLL :)
основываясь на ответе @paibamboo
Он сказал: перейдите в раздел: Инструменты > Параметры > проекты и решения > веб-проекты > используйте 64-разрядную версию IIS Express
мой коллега поставил этот флажок (он явно искал его), но имел сообщение об ошибке в вопросе. Через несколько часов он снял флажок и проверил его снова. И вот: код теперь работал с успехом.
кажется, что есть два места, где сохранено состояние этого ящика, которое стал не синхронизирован. ООН - и перепроверки он синхронизируется это снова.
вопрос для более знающих пользователей: было ли обновление или что-то на прошлой неделе (для VS 2015), которое де-синхронизировало состояния?





Comments