System.BadImageFormatException при установке программы из проекта установщика VS2010 - PullRequest
4 голосов
/ 29 марта 2011

Я получаю эту ошибку при попытке установить службу Windows из проекта установщика VS2010 .NET 4:

"Возникла исключительная ситуация при инициализации установки: System.BadImageFormatException. Не удалось загрузить файл [имя файла] .exe или одну из его зависимостей. Эта сборка построена средой выполнения, более новой, чем текущая загруженная среда выполнения, и не может быть загружена. «

Я не могу понять, что является причиной этого. Все проекты в моем решении компилируются под .NET Framework 4, а для зависимостей решения установщика требуется .NET 4. Я очистил / перестроил решения и проекты безрезультатно. Есть что-то очевидное, чего мне не хватает?

Ответы [ 5 ]

8 голосов
/ 23 июля 2011

Это может произойти, если ваш установщик устанавливает 64-битные библиотеки DLL.

Если вы добавляете 64-разрядное управляемое настраиваемое действие в проект установки, процесс сборки Visual Studio встраивает 32-разрядную версию InstallUtilLib.dll в MSI как InstallUtil. В свою очередь, 32-разрядная платформа .NET Framework загружается для запуска 64-разрядного управляемого настраиваемого действия и вызывает исключение BadImageFormatException.

Для обходного пути замените 32-разрядную версию InstallUtilLib.dll 64-разрядной версией.

  1. Откройте полученный MSI-файл в Orca из пакета установщика Windows.
  2. Выберите двоичный стол.
  3. Дважды щелкните ячейку [Binary Data] для записи InstallUtil.
  4. Убедитесь, что выбрано «Чтение двоичного файла из имени файла», и нажмите кнопку «Обзор».
  5. Перейдите к папке% WINDIR% \ Microsoft.NET \ Framework64 \ v2.0.50727.
  6. Каталог Framework64 устанавливается только на 64-разрядных платформах и соответствует 64-разрядному типу процессора.
  7. Выберите InstallUtilLib.dll.
  8. Нажмите кнопку Открыть.
  9. Нажмите кнопку ОК.
3 голосов
/ 29 марта 2011

Возможно, у вас неправильные предпосылки для установки.Перейдите в окно свойств вашего установочного проекта, нажмите «Предварительные условия ...» в разделе «Сборка» и убедитесь, что .NET Framework 4 отмечен.Скорее всего, у вас еще проверен .NET Framework 3.5 SP1.Возможно, вам также понадобится установщик Windows 4.1 (в том же диалоговом окне).

Также убедитесь, что в условиях запуска ваша версия .NET Framework указывает на 4.

1 голос
/ 11 мая 2013

Я избежал необходимости взламывать инсталлятор с помощью Orca (что лишило меня силы подписи). Я просто добавил новый исполняемый проект под названием «InstallHelper» в мое решение, скомпилированное в режиме x86, и добавил к нему код настраиваемого действия. Затем я добавил основной вывод этого проекта в программу установки и настроил настраиваемые действия в проекте установки на выполнение этого основного вывода вместо 64-битного вывода из основного приложения. Теперь мои 32-битные и 64-битные проекты установки работают нормально.

1 голос
/ 30 марта 2011

Может быть, вы могли бы попытаться создать [yourfile.exe] .config в стороне [yourfile.exe] следующим образом:

<configuration>
  <startup>
    <supportedRuntime version="v4.0.30319" />
  </startup>
</configuration>

или, возможно, на машине, которую вы устанавливаете, просто нет Framework4 установлены?

0 голосов
/ 09 ноября 2011

В качестве альтернативы, если вы все еще сталкиваетесь с этой проблемой, вы можете установить goto VS2010, в Build-> Configuration Manager и установить вашу платформу проекта на «Любой процессор».

Перейдите в Solution Explorer и нажмите на свой проект MSI Setup, вы сможете увидеть «TargetPlatform» в свойствах.Установите его на x64.Перестройте свой проект MSI и попробуйте.

...