从CorFlags.exe对System.Data.SQLite.dll运行http://sqlite.phxsoftware.com/将产生以下输出。
Version : v2.0.50727
CLR Header: 2.5
PE : PE32
CorFlags : 24
ILONLY : 0
32BIT : 0
Signed : 1如您所见,没有指定32BIT,PE等于PE32。根据http://blogs.msdn.com/b/gauravseth/archive/2006/03/07/545104.aspx,这意味着程序集是任意的CPU。但是,使用来自64位应用程序的程序集会导致错误:
System.BadImageFormatException:无法加载文件或程序集“System.Data.SQLite”或其依赖项之一。试图加载格式不正确的程序。文件名:“System.Data.SQLite”
如果CorFlags.exe正在报告任何CPU,为什么会出现异常?程序集是否被错误标记为32BIT: 0?
我知道有一个64位版本也可用,我只是想知道是什么导致了错误。
发布于 2011-01-29 20:37:26
您使用的System.Data.SQLite.dll文件是一个混合模式装配,这意味着它不是一个纯.NET代码(参见“ILONLY:0”标志),它还包含非托管机器代码,它不能是“任何CPU”。因此,由于DLL包含32位本机代码,它只能加载到32位进程中,否则会发生BadImageFormatException。
发布于 2011-02-07 19:53:04
如果您从SQLite-1.0.66.0-binaries.zip下载sourceforget.net文件,那么这将包含一个带有System.Data.SQLite.dll文件的bin/x64目录,这正是您要寻找的。
它也有一个Itanium目录。
URL是:
http://sourceforge.net/projects/sqlite-dotnet2/files/SQLite%20for%20ADO.NET%202.0/1.0.66.0/
https://stackoverflow.com/questions/4816529
复制相似问题