17

我发誓微软越“进化”Visual Studio,整个过程就会变得越无知。

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

我可以在我的 Windows 2008 R2 x64 服务器上毫无问题地运行控制台应用程序,但愚蠢的安装程序一直在轰炸并告诉我我的图像不好。我确实确保已将安装程序的目标平台设置为 x64。

我不知道这个愚蠢的东西会爆炸,并且真的很感激任何见解。我确实引用了其他 DLL,那些可能是 x86,但我认为如果主库设置正确,那么一切都会正常工作......

4

3 回答 3

29

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

要克服这个问题,只需按照以下步骤操作:

  1. 确保进入每个项目的 Properties ⇒ Build 选项卡并将 Target Platform 设置为 x64
  2. 单击安装项目的名称,然后单击属性并确保目标平台为 x64
  3. 构建您的解决方案 - 如果解决方案无法编译,请右键单击并卸载项目,然后为那些引用失败的项目加载项目。
  4. 去这里下载并安装 7.0 INstaller SDK
  5. 进入 C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Bin 文件夹并通过双击 Orca.Msi 文件安装 Orca
  6. 运行 Orca 并打开项目的 MSI 文件夹
  7. 选择二进制表
  8. 双击记录 InstallUtil 的单元格 [Binary Data]
  9. 确保选中“从文件名读取二进制文件”
  10. 单击浏览按钮 浏览到 C:\Windows\Microsoft.NET\Framework64\v4.0.30319
  11. 选择 InstallUtilLib.dll
  12. 单击打开按钮,然后单击确定按钮

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

于 2012-04-23T13:30:09.447 回答
1

这个错误发生在我将 .Net 4.5+ 服务安装到 64 位机器上。

  • 安装程序设置为x64
  • 服务项目构建平台设置为x64

安装失败并出现 BadImageFormatException。

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

于 2021-02-15T11:34:43.023 回答
1

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

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

所以我将那个项目的平台单独改回 x86,并重建了安装程序。

这一切都“刚刚奏效”。

当然,这取决于拥有与解决方案的其余部分完全隔离的自定义操作。然而,不必使用 Orca 真是一种解脱。

于 2019-01-31T19:11:15.980 回答