Еще немного подробностей для полноты, если кому-то это поможет ...
Обратите внимание, что наиболее распространенной причиной этого исключения в наши дни является попытка загрузить 32-битную (/platform:x86
) DLL-библиотеку в процесс, который является 64-битным или наоборот (то есть загрузить 64-битную (*) 1004 *) DLL в 32-битном процессе). Если ваш platform
не является специфическим (/platform:AnyCpu
), это не произойдет (при условии, что ссылочные зависимости не имеют неправильной битности).
Другими словами, работает:
% windir% \ Microsoft.NET \ Framework \ v2.0.50727 \ installutil.exe
или
% windir% \ Microsoft.NET \ Framework 64 \ v2.0.50727 \ installutil.exe
не будет работать (замените в других версиях фреймворка: v1.1.4322
(только 32-битная, поэтому проблема не возникает) и v4.0.30319
, как требуется выше).
Очевидно, что, как показано в другом ответе, для версии installutil
, с которой вы работаете, нужно также иметь номер версии .NET, равный> = (предпочтительно =), для файла EXE / DLL, в котором вы запускаете программу установки. .
Наконец, обратите внимание, что в Visual Studio 2010 этот инструмент по умолчанию будет генерировать двоичные файлы x86 ( вместо Любой ЦП , как ранее ).
Полная информация о System.BadImageFormatException (говоря, что единственная причина - несоответствующая битность, действительно является чрезмерным упрощением!).
Другая причина BadImageFormatException
в установщике x64 заключается в том, что в Visual Studio 2010 по умолчанию .vdproj
Тип проекта установки генерирует 32-разрядную InstallUtilLib
шим, даже в системе x64 (Поиск «64-разрядные управляемые настраиваемые действия вызывают исключение System.BadImageFormatException» на странице).