概述

System.BadImageFormatException的原因是我们收到的常见问题。乍一看,一些LEADTOOLS用户认为BadImageFormatException是一个LEADTOOLS特定的异常,因为LEADTOOLS是一个影像SDK,而“Image”是该异常的名称。 但是,这个错误与LEADTOOLS开发包并无关系。

当进程尝试加载为不兼容体系结构构建的程序集时,会引发此异常。MSDN对该异常的描述是:

当动态链接库(.dll文件)或可执行文件(.exe文件)的文件格式不符合公共语言运行库期望的格式时,会引发此异常。以下是文章链接:

https://msdn.microsoft.com/en-us/library/system.badimageformatexception.aspx

显然,这意味着64位进程正试图加载标记为32位的程序集,反之亦然。为了解决这个异常,有几件事要检查。

首先,检查以确保Visual Studio中的构建目标平台被设置为将为x86或x64,而不是Any CPU。 (有关/ platform标志的更多信息,请参阅MSDN)。因为大多数LEADTOOLS都是用托管C ++编写的,所以我们必须提供可以以x86或x64为目标的二进制文件。如果您在项目中使用LEADTOOLS,我们建议继续并针对特定目标进行构建。除非需要分配大量内存,否则请选择x86,因为它具有较少的内存开销并且比x64更具可移植性(即,x86应用程序可以在x86和x64版本的Windows上运行)。

如果构建的目标是x86,并且仍然出现异常,那么请检查项目的引用程序集以确保x64版本未被错误添加。如果所有参考路径都指向x86版本的程序集,请查看BIN文件夹中的其他程序集以确保它们全部与x86兼容,并且x64程序集不会被错误地复制。

Windows资源管理器 - 产品名称列

检查LEADTOOLS程序集体系结构的最简单方法是在Windows资源管理器中。 将产品名称列添加到Windows资源管理器。 LEADTOOLS程序集将清楚地列出产品名称中的体系结构。 Win32和任何CPU一起没关系。 x64和任何CPU一起也没关系。 Win32和x64在同一个文件夹会发生错误。

以上基本覆盖了产生这个问题的绝大多数原因。

另外,Visual Studio是一个32位的进程。这意味着如果您的目标平台是x64,您还可能在VS设计器中引起这个错误。 解决办法是在使用VS设计器时将编译平台选择为 x86。 然后,如果您出于某种原因需要x64,则可以在所有设计工作完成后,在后台编译代码时再将平台目标更改为x64。