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

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

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

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

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

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

BadImageFormatEx представляет собой 32/64-битное столкновение. Какая у вас конфигурация сборки, какова архитектура вашего компьютера, по какому пути вы выполняете установку и используете ли вы какие-либо управляемые настраиваемые действия в установщике?

Ian 16.10.2018 15:48
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
1
109
2

Ответы 2

Блог: Может быть, проверьте этот блог быстро. По сути: 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 - хорошая альтернатива с открытым исходным кодом. И есть другие, коммерческие варианты. И есть альтернативная версия с более сложные детали.


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

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

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

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

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

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