Ошибка BadImageFormatException x64
Я клянусь, что Microsoft "развивает" Visual Studio, тем более неосведомлен весь процесс.
У меня есть служба Windows с 3-мя библиотеками классов. Я вошел в свойства для каждой библиотеки классов и установил для платформы значение x64. Я сделал то же самое с Windows Service, а также с проектом Test Console, который я добавил, чтобы проверить все.
Я могу запустить консольное приложение на своем сервере x64 для Windows 2008 R2 без каких-либо проблем, но глупый установщик продолжает бомбить и говорит мне, что у меня плохое изображение. Я убедился, что установил целевую платформу установщика на x64.
Я понятия не имел, что эта глупая вещь будет бомбить, и будет очень признательна за любые идеи. Я ссылаюсь на другие DLL, и это может быть x86, но я думал, что если основные библиотеки были установлены правильно, что все будет работать...
Ответы
Ответ 1
Я наконец понял это - это НИЧЕГО не имеет отношения к архитектуре, ссылкам или любой другой ерунде и всему, что связано с самим установщиком. Как объясняется в этой статье - установщик Visual Studio по умолчанию использует 32-разрядную библиотеку DLL, и именно это вызывает сбои.
Чтобы преодолеть эту проблему, просто выполните следующие действия:
- Убедитесь, что вы переходите на вкладку "Свойства" ⇒ "Сборка" для каждого проекта и устанавливаете целевую платформу на x64
- Нажмите на название вашего Установочного проекта, а затем Свойства и убедитесь, что Целевая Платформа имеет x64
- Создайте свое решение - если решение не компилируется, щелкните правой кнопкой мыши и выгрузите проект, а затем загрузите Porject для тех проектов, ссылки на которые не пройдены.
- Перейдите сюда и загрузите и установите 7.0 INstaller SDK
- Перейдите в папку C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Bin и установите Orca, дважды щелкнув файл Orca.Msi
- Запустите Orca и откройте папку MSI вашего проекта
- Выберите двоичный стол
- Дважды щелкните ячейку [Binary Data] для записи InstallUtil
- Убедитесь, что выбрано "Чтение двоичного файла из имени файла"
- Нажмите кнопку Обзор. Перейдите в C:\Windows\Microsoft.NET\Framework64\v4.0.30319
- .Выберите InstallUtilLib.dll
- Нажмите кнопку Открыть, а затем кнопку ОК
Вот и все - сохраните файл MSI в Orca, а затем разверните его - установка x64 должна работать без каких-либо проблем.
Ответ 2
Я сам столкнулся с этой проблемой в Visual Studio 2017, создавая установщик для x64-версии приложения, которое долгое время было x86.
Я не сомневаюсь, что ответ Кена является окончательным, но мне пришло в голову, что поскольку пользовательские действия вызываются установщиком, а не установленным приложением, в моем случае, по крайней мере, нет необходимости в проекте, содержащем пользовательский Действия должны иметь ту же разрядность, что и остальная часть приложения, поскольку его классы никогда не создаются самим приложением.
Поэтому я изменил платформу для этого проекта обратно на x86 и перестроил установщик.
Все это "просто сработало".
Конечно, это зависит от наличия пользовательских действий, которые полностью изолированы от остальной части решения. Впрочем, облегчение - не использовать Orca.