BadImageFormatException x64 Issue

本文关键字:Issue x64 BadImageFormatException | 更新日期: 2023-09-27 18:31:54

我发誓,Visual Studio Microsoft"进化"得越多,整个过程就越无知。

我有一个 Windows 服务,里面有 3 个类库。 我进入了每个类库的属性,并将平台目标设置为 x64。 我对 Windows 服务以及我为验证所有内容而添加的测试控制台项目做了同样的事情。

我可以在我的 Windows 2008 R2 x64 服务器上运行控制台应用程序,没有任何问题,但愚蠢的安装程序不断轰炸并告诉我我的形象不好。 我确实确保已将安装程序的目标平台设置为 x64。

我不知道这个愚蠢的东西会爆炸出来,并且真的很感激任何见解。 我确实引用了其他 DLL,这些可能是 x86,但我认为如果主库设置正确,事情就会起作用......

BadImageFormatException x64 Issue

我终于想通了——它与架构、引用或任何其他废话无关,而与安装程序本身有关。 正如本文所解释的 - 默认情况下,Visual Studio 安装程序使用 32 位 DLL,这就是导致失败的原因。

要解决此问题,只需按照以下步骤操作:

  1. 确保进入每个项目的"属性⇒生成"选项卡,并将"目标平台"设置为 x64
  2. 单击安装项目的名称,然后单击"属性",并确保目标平台为 x64
  3. 生成解决方案 – 如果解决方案未编译,请右键单击并卸载项目,然后为引用失败的项目加载 Porject。
  4. 转到此处并下载并安装 7.0 英寸 SDK
  5. 进入 C:''Program Files (x86)''Microsoft SDK''Windows''v7.0A''Bin 文件夹,通过双击 Orca.Msi 文件 安装 Orca
  6. 运行 Orca 并打开项目的 MSI 文件夹
  7. 选择二进制表
  8. 双击单元格 [二进制数据] 以获取记录 InstallUtil
  9. 确保选择了"从文件名读取二进制"
  10. 单击浏览按钮 浏览到 C:''Windows''Microsoft.NET''Framework64''v4.0.30319
  11. 选择安装实用库.dll
  12. 单击"打开"按钮,然后单击"确定"按钮

就是这样 - 将您的 MSI 文件保存在 Orca 中,然后部署它 - x64 安装应该可以正常工作,没有任何进一步的问题。

> 我自己在Visual Studio 2017中遇到了这个问题,为一个长期使用x86的应用程序的x64版本构建安装程序。

我不怀疑 Ken 的答案是确定的,但我突然想到,由于自定义操作是由安装程序调用的,而不是由已安装的应用程序调用的,因此至少就我而言,包含自定义操作的项目没有必要与应用程序的其余部分具有相同的位数,因为它的类永远不会由应用程序本身实例化。

因此,我将该项目的平台单独改回 x86,并重建了安装程序。

这一切都"奏效了"。

当然,这取决于是否具有与解决方案的其余部分完全隔离的自定义操作。 但是,不必使用逆戟鲸真是太解脱了。

此错误发生在我在 64 位计算机上安装 .Net 4.5+ 服务时。

  • 安装程序设置为 x64
  • 服务项目生成平台设置为 x64

安装失败,并出现 BadImageFormatException。

对我来说,解决方案是转到服务项目属性,并将构建平台更改为"任何CPU",并取消选中默认情况下选中的"首选 32 位"复选框(另请参阅它的含义)。