4

http://sqlite.phxsoftware.com/运行CorFlags.exeSystem.Data.SQLite.dll会产生以下输出。

Version   : v2.0.50727
CLR Header: 2.5
PE        : PE32
CorFlags  : 24
ILONLY    : 0
32BIT     : 0
Signed    : 1

如您所见,32BIT未指定且PE等于PE32。根据Moving from 32-bit to 64-bit application development on .NET Framework,这意味着程序集是Any CPU。但是,使用 64 位应用程序的程序集会导致错误:

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

如果 CorFlags.exe 报告Any CPU,为什么会发生异常?组件是否错误地标有32BIT: 0

我知道也有 64 位版本,我只是想知道是什么导致了错误。

4

2 回答 2

9

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

于 2011-01-29T20:37:26.277 回答
2

如果您SQLite-1.0.66.0-binaries.zip从 sourceforget.net 下载该文件,则该文件包含一个bin/x64目录,System.Data.SQLite.dll其中包含您要查找的文件。

它也有一个 Itanium 目录。

网址是:

http://sourceforge.net/projects/sqlite-dotnet2/files/SQLite%20for%20ADO.NET%202.0/1.0.66.0/

于 2011-02-07T19:53:04.907 回答