CorFlags.exe,System.Data.SQLite.dll和BadImageFormatException

Gio*_*rgi 4 .net sqlite clr 64-bit badimageformatexception

运行CorFlags.exeSystem.Data.SQLite.dllhttp://sqlite.phxsoftware.com/产生下面的输出.

Version   : v2.0.50727
CLR Header: 2.5
PE        : PE32
CorFlags  : 24
ILONLY    : 0
32BIT     : 0
Signed    : 1
Run Code Online (Sandbox Code Playgroud)

如您所见,32BIT未指定且PE等于PE32.根据.NET Framework上从32位移动到64位应用程序开发,这意味着程序集是Any CPU.但是,使用64位应用程序中的程序集会导致错误:

System.BadImageFormatException:无法加载文件或程序集"System.Data.SQLite"或其依赖项之一.尝试加载格式不正确的程序.文件名:'System.Data.SQLite'

如果CorFlags.exe报告任何CPU,为什么会发生异常?装配是否标有错误32BIT: 0

我知道有一个64位版本也可用,我只是想知道导致错误的原因.

Mor*_*gil 9

您正在使用的System.Data.SQLite.dll文件是混合模式程序集,这意味着它不是纯.NET代码(另请参阅"ILONLY:0"标志),它还包含非托管机器代码,但不能是"任何CPU".因此,由于DLL包含32位本机代码,因此只能将其加载到32位进程中,否则会发生BadImageFormatException.