Еще немного подробностей для полноты на случай, если это кому-то поможет ...
Обратите внимание, что наиболее распространенной причиной этого исключения в наши дни является попытка загрузить 32-разрядную ( /platform:x86) DLL в процесс, который является 64-разрядным, или наоборот (а именно, загрузить 64-разрядную ( /platform:x64) DLL в процесс, который является 32 бит). Если ваш platformis non-specific ( /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как указано выше).
Очевидно, что, как описано в другом ответе, также потребуется, чтобы номер версии .NET выполняемой installutilвами версии был> = (предпочтительно =) номером EXE / DLL файла, который вы запускаете установщиком.
Наконец, обратите внимание, что в Visual Studio 2010 инструмент по умолчанию будет генерировать двоичные файлы x86 ( а не любой ЦП, как раньше ).
Полная информация о System.BadImageFormatException (заявив, что единственная причина - несоответствие прикуса, на самом деле является большим упрощением!).
Другой причиной BadImageFormatExceptionиспользования установщика под x64 является то, что в Visual Studio 2010 .vdprojтип Install Project по умолчанию создает 32-разрядную InstallUtilLibпрокладку, даже в системе x64 (поиск по запросу «64-разрядные управляемые настраиваемые действия вызывают исключение System.BadImageFormatException» в страница).