BadImageFormatException x64问题

时间:2012-04-23 05:10:31

标签: c# visual-studio-2010 windows-services badimageformatexception

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

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

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

我不知道这个愚蠢的事情会不会爆炸,并且非常感谢任何见解。我确实引用了其他的DLL,那些可能是x86,但我想如果主库已正确设置,事情会起作用......

3 个答案:

答案 0 :(得分:22)

我终于想到了这一点 - 它与架构,引用或任何其他无意义以及与安装程序本身有关的任何事情都没有关系。正如本文所解释的那样 - http://blogs.msdn.com/b/heaths/archive/2006/02/01/64-bit-managed-custom-actions-with-visual-studio.aspx - 默认情况下,Visual Studio Installer使用32位DLL,这就是导致失败的原因。

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

  1. 确保您进入属性=>为每个项目构建选项卡,并将目标平台设置为x64
  2. 单击安装项目的名称,然后单击属性,并确保目标平台为x64
  3. 构建您的解决方案 - 如果解决方案无法编译,请右键单击并卸载项目,然后为那些引用失败的项目加载项目。
  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.Msi文件安装Orca
  6. 运行Orca并打开项目的MSI文件夹
  7. 选择二进制表
  8. 双击单元格[二进制数据]以获取记录InstallUtil
  9. 确保选择“从文件名中读取二进制文件”
  10. 单击“浏览”按钮浏览到C:\ Windows \ Microsoft.NET \ Framework64 \ v4.0.30319
  11. 选择InstallUtilLib.dll
  12. 单击“打开”按钮,然后单击“确定”按钮
  13. 就是这样 - 将您的MSI文件保存在Orca中然后进行部署 - x64安装应该没有任何进一步的问题。

答案 1 :(得分:0)

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

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

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

一切都“正常”。

当然,这取决于自定义操作与解决方案的其余部分完全隔离。不过,不必使用Orca也很容易。

答案 2 :(得分:0)

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

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

安装失败,出现 BadImageFormatException。

对我来说,解决方案是转到服务项目属性,将构建平台更改为“Any CPU”,同时取消选中“Prefer 32bit”默认情况下选中的复选框(另见 what does it mean)。