System.BadImageFormatException Была предпринята попытка загрузить программу с неверным форматом. - PullRequest
40 голосов
/ 03 декабря 2010

Я пишу плагин для другой программы, основанной на общедоступном .NET API.Обычно эти плагины создаются путем создания библиотеки библиотек классов, которая ссылается на сборку API.Затем создается класс команд путем наследования от базового класса команд в сборке API.Затем приложение устанавливает ссылку на файл DLL подключаемого модуля, а затем также отвечает за фактическое включение пользовательского класса команд, когда пользователь запрашивает его.

Однако сейчас я пытаюсь автоматизировать некоторый кодгенерация через System.CodeDOM и хочу создать простое консольное приложение, которое автоматически генерирует новые типы классов на основе типов в сборке API.

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

System.BadImageFormatException не обработано. Сообщение: не удалось загрузить файл или сборку 'RevitAPI, версия = 2011.0.0.0, культура = нейтральная, PublicKeyToken = null' или одна из ее зависимостей.Была предпринята попытка загрузить программу с неверным форматом.

Обычно мне нужно установить целевой фреймворк сборки плагина на 3.5.Тем не менее, теперь я обнаружил, что вышеприведенная ошибка исчезнет, ​​если я установлю целевой каркас моего консольного приложения на 2.0.Тем не менее, мое консольное приложение уже ссылается на другие мои библиотеки классов, для которых целевая среда установлена ​​на 3.5.И я бы действительно не хотел переписывать их в рамках 2.0.

Ответы [ 6 ]

49 голосов
/ 03 декабря 2010

Возможно, это несоответствие 32 - 64 бит.

Если вы работаете в 64-битной ОС, RevitAPI сборки может быть скомпилирован как 32-битный, а ваш процесс - как 64-битный или «Любой ЦП».

Или RevitAPI скомпилирован как 64-битный, а ваш процесс скомпилирован как 32-битный или «Любой ЦП» и работает в 32-битной ОС.

39 голосов
/ 20 ноября 2013

Если вы используете IIS, перейдите в пул приложений. Выберите тот, который используется вашим сайтом, и нажмите Дополнительные параметры. Убедитесь, что для параметра Включить 32-разрядные приложения установлено значение True

.
27 голосов
/ 06 апреля 2016

У меня были проблемы с новой установкой VS с проектом x64 - для Visual Studio 2013 и Visual Studio 2015:

Tools
  -> Options
   -> Projects and Solutions
    -> Web Projects
     -> Check "Use the 64 bit version of IIS Express for web sites and projects"
3 голосов
/ 17 марта 2017

Эти предложения точны, но я хотел добавить примечание. Я застрял просто потому, что у меня было несколько конфигураций публикации. Я редактировал «Debug - Any CPU», а затем развертывал конфигурацию «Debug - x64». Убедитесь, что вы редактируете и развертываете ту же конфигурацию. Проверьте это, щелкнув вкладку «Настройки» после начала публикации, и появится диалоговое окно «Опубликовать в Интернете». Убедитесь, что он соответствует конфигурации, которую вы редактировали. (Это 4 часа моей жизни, я никогда не вернусь!)

0 голосов
/ 16 сентября 2017

У меня та же проблема, что и у меня, я просто скачал 32-битную DLL и добавил ее в папку bin, это решило мою проблему

0 голосов
/ 07 января 2017

У меня была такая же проблема при запуске моего программного обеспечения на другом компьютере.На моем компьютере разработчика (Windows 7) у меня была установлена ​​Visual Studio 2015, целевым компьютером была чистая установка Windows 10 (установлена ​​.Net).Я также проверил его на другом чистом ПК с Windows 7, включая .Net Framework.Однако на обоих целевых компьютерах мне нужно было установить распространяемый пакет Visual C ++ для Visual Studio 2015 для x86 или x64 (зависит от того, для чего создается ваше приложение).Это уже было установлено на моем компьютере разработчика.

Мое приложение использовало библиотеку C, которая была скомпилирована в приложение C ++ с использованием параметров / clr и / TP в Visual Studio.Также приложение обеспечивало функции для C # с использованием сигнатур метода dllexport.Не уверен, что интеграция C # привела ко мне, или если приложение C ++ дало бы мне то же самое.

Надеюсь, это кому-нибудь поможет.

...