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

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

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

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

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

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

Ответ 1

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

Если вы работаете в 64-разрядной ОС, сборка RevitAPI может быть скомпилирована как 32-разрядная, а ваш процесс - как 64-разрядный, так и "Любой CPU".

Или, RevitAPI скомпилирован как 64-битный, и ваш процесс скомпилирован как 32-разрядный или "Любой процессор" и работает на 32-разрядной ОС.

Ответ 2

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

Ответ 3

У меня возникли проблемы с новой установкой 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"

Ответ 4

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

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

Надеюсь, что это поможет любому.

Ответ 5

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

Ответ 6

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