Я создал установщик с Visual Studio 2008. Тип проекта VS - проект развертывания. Этот установщик не работает в некоторых средах, но также отлично работает в некоторых других средах.
Например, установщик компилируется на виртуальной машине под управлением Windows Server 2012 R2 Standard. Конечно, там установка проходит успешно. Однако он не работает на другой виртуальной машине с той же версией Windows.
Сообщение об ошибке: «Ошибка 1001. Исключение при инициализации установки: System.BadImageFormatException: не удалось загрузить файл или сборку file: Custom actions.dll» или одну из его зависимостей. Эта сборка создана средой выполнения более новой, чем в настоящее время загружена среда выполнения и не может быть загружена ".
Целевая платформа - 3.5 во всех приложениях в решении для установки. Также ссылки в библиотеке настраиваемых действий имеют версию .NET 2.0 или 3.5.
Чего не хватает в неудачной среде? С чего начать поиск?
Блог: Может быть, проверьте этот блог быстро. По сути: 1) bitness 32/64
, 2) corrupted binary file
или 3) configuration issues
(app.config
).
InstallUtilLib.dll: Вот похожий ответ: System.BadImageFormatException: не удалось загрузить файл или сборку (из installutil.exe). Он ссылается на это объяснение MSDN: 64-разрядные управляемые настраиваемые действия вызывают исключение System.BadImageFormatException. Кажется вероятным.
Альтернативы: Настоящий ответ - IMHO - был бы избегать проектов установщика Visual Studio из-за ряда известных проблем с этим типом проекта. Набор инструментов WiX - хорошая альтернатива с открытым исходным кодом. И есть другие, коммерческие варианты. И есть альтернативная версия с более сложные детали.
Некоторые ссылки:
На самом деле есть только две причины этой ошибки:
У вас есть 32-битный (или 64-битный) код, который пытается вызвать сборку противоположной архитектуры. В вызовах настраиваемых действий вам нужно будет отслеживать последовательность вызовов и быть осторожным с типами сборок AnyCpu, которые могут быть JIT-скомпилированы для архитектуры системы, а не сборок, которые вы вызовете.
Несовместимые архитектуры NET. В вашем случае все сборки, на которые вы ссылаетесь, основаны на среде CLR NET 2.0. Если они закончат работу в среде CLR NET 4.0, они потерпят неудачу. Чтобы понять, что происходит, полезно ознакомиться с условиями запуска.
Я также считаю, что Visual Studio 2008 не является хорошей основой для проекта установки. VS Community Edition является бесплатным и будет содержать проекты установщика надстроек. Конечно, VS 2008 не знает о NET 4.0 CLR.
BadImageFormatEx представляет собой 32/64-битное столкновение. Какая у вас конфигурация сборки, какова архитектура вашего компьютера, по какому пути вы выполняете установку и используете ли вы какие-либо управляемые настраиваемые действия в установщике?