Установщик, созданный проектом развертывания VS 2008, завершается с ошибкой "System.BadImageFormatException"

Я создал установщик с Visual Studio 2008. Тип проекта VS является проектом развертывания. Этот установщик не работает в некоторых средах, но также отлично работает в некоторых других средах.

Например, установщик скомпилирован на виртуальной машине под управлением Windows Server 2012 R2 Standard. Конечно, установка там удалась. Однако в другой виртуальной машине, работающей под управлением той же версии Windows, происходит сбой.

Сообщение об ошибке: "Ошибка 1001. Исключительная ситуация при инициализации установки: System.BadImageFormatException: Не удалось загрузить файл или сборку" файл: Custom actions.dll "или одну из ее зависимостей. Эта сборка создается средой выполнения, более новой, чем в настоящее время загружен и не может быть загружен. "

Целевая структура составляет 3,5 во всех приложениях в решении для установки. Также ссылки в библиотеке пользовательских действий имеют.NET версии 2.0 или 3.5.

Чего не хватает в провальной среде? С чего начать поиск?

2 ответа

Блог: Может быть, проверить этот блог быстро. По существу: 1) bitness 32/64, 2) corrupted binary file или же 3) configuration issues (app.config).

InstallUtilLib.dll: Вот аналогичный ответ: System.BadImageFormatException: Не удалось загрузить файл или сборку (из installutil.exe). Он ссылается на это объяснение MSDN: 64-разрядные управляемые настраиваемые действия генерируют исключение System.BadImageFormatException. Кажется вероятным.


Альтернативы: реальный ответ - ИМХО - будет избегать проектов установщика Visual Studio из-за ряда известных проблем с этим типом проекта. Инструментарий WiX является хорошей альтернативой с открытым исходным кодом. И есть другие, коммерческие варианты. И есть альтернативная версия с более сложными деталями.


Некоторые ссылки:

На самом деле есть только две причины этой ошибки:

  1. У вас есть 32-битный (или 64-битный) код, пытающийся вызвать сборку противоположной архитектуры. В вызовах пользовательских действий вам нужно будет выследить последовательность вызовов и быть осторожным с типами сборок AnyCpu, которые могут быть JIT-скомпилированы для архитектуры системы, а не для сборок, которые вы будете вызывать.

  2. Несовместимые NET архитектуры. В вашем случае все упомянутые вами сборки основаны на NET 2.0 CLR. Если они в конечном итоге работают в NET 4.0 CLR, они потерпят неудачу. Это может помочь посмотреть на условия запуска, чтобы увидеть, что происходит.

Я также думаю, что Visual Studio 2008 не является хорошей основой для проекта установки. VS Community Edition является бесплатным, и будет размещать надстройку Projects. Конечно, VS 2008 не знает о NET 4.0 CLR.

Другие вопросы по тегам