BadImageFormatException x64 Проблема

Клянусь, чем больше Microsoft "развивает" Visual Studio, тем более невежественным становится весь процесс.

У меня есть служба Windows с 3 библиотеками классов в нем. Я вошел в свойства для каждой библиотеки классов и установил целевой платформой значение x64. Я сделал то же самое с Windows Service, а также с проектом Test Console, который я добавил, чтобы все проверить.

Я могу запустить консольное приложение на своем сервере Windows 2008 R2 x64 без проблем, но глупый установщик продолжает бомбить и говорить мне, что у меня плохой образ. Я гарантировал, что я установил целевую платформу установщика на x64.

Я понятия не имею, идея была бы, что эта глупая вещь будет бомбить и действительно ценила бы любое понимание. Я ссылаюсь на другие библиотеки DLL, и это может быть x86, но я подумал, что если бы основные библиотеки были установлены правильно, то все заработало бы...

3 ответа

Решение

Я наконец понял это - это НИЧЕГО не имеет отношения к архитектуре, ссылкам или любой другой ерунде и всему, что связано с самим установщиком. Как объясняется в этой статье - http://blogs.msdn.com/b/heaths/archive/2006/02/01/64-bit-managed-custom-actions-with-visual-studio.aspx - установщик Visual Studio, по умолчанию используется 32-битная DLL, и именно это вызывает сбои.

Чтобы преодолеть эту проблему, просто выполните следующие действия:

  1. Убедитесь, что вы переходите на вкладку Properties => Build для каждого проекта и устанавливаете Target Platform на x64
  2. Нажмите на название вашего Установочного проекта, а затем Свойства и убедитесь, что Целевая Платформа - x64
  3. Создайте свое решение - если решение не компилируется, щелкните правой кнопкой мыши и выгрузите проект, а затем загрузите Porject для тех проектов, ссылки на которые не пройдены.
  4. Перейдите по http://www.microsoft.com/download/en/details.aspx?displaylang=en&id=3138 и загрузите и установите 7.0 INstaller SDK.
  5. Перейдите в папку C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Bin и установите Orca, дважды щелкнув файл Orca.Msi.
  6. Запустите Orca и откройте папку MSI вашего проекта
  7. Выберите двоичный стол
  8. Дважды щелкните ячейку [Binary Data] для записи InstallUtil
  9. Убедитесь, что выбрано "Чтение двоичного файла из имени файла"
  10. Нажмите кнопку "Обзор". Выберите "C:\Windows\Microsoft.NET\Framework64\v4.0.30319".
  11. Выберите InstallUtilLib.dll
  12. Нажмите кнопку Открыть, а затем кнопку ОК

Вот и все - сохраните файл MSI в Orca, а затем разверните его - установка x64 должна работать без каких-либо проблем.

Я сам столкнулся с этой проблемой в Visual Studio 2017, создавая установщик для x64-версии приложения, которое долгое время было x86.

Я не сомневаюсь, что ответ Кена является окончательным, но мне пришло в голову, что поскольку пользовательские действия вызываются установщиком, а не установленным приложением, в моем случае, по крайней мере, нет необходимости в проекте, содержащем пользовательский Действия должны иметь ту же разрядность, что и остальная часть приложения, поскольку его классы никогда не создаются самим приложением.

Поэтому я изменил платформу для этого проекта обратно на x86 и перестроил установщик.

Все "просто сработало".

Конечно, это зависит от наличия пользовательских действий, которые полностью изолированы от остальной части решения. Как бы то ни было, облегчение не использовать Orca.

Эта ошибка произошла со мной при установке службы .Net 4.5+ на 64-разрядную машину.

  • Установщик был установлен на x64
  • Платформа сборки сервисного проекта была установлена ​​на x64

Установка завершается ошибкой BadImageFormatException.

Для меня решение заключалось в том, чтобы перейти к свойствам проекта службы и изменить платформу сборки на « Any CPU », а также снять флажок «Prefer 32bit», который был установлен по умолчанию (см. Также, что это означает ).

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