SQLite的.NET应用自适应32位/64位系统

原创
小哥 2年前 (2023-05-24) 阅读数 10 #大杂烩

转自:http://www.cnblogs.com/zeroone/p/4316346.html

如果一个.NET应用程序需要自适应32位/64位系统,只需要将项目的“目标平台”设置为”Any CPU"。但是,如果应用程序使用SQLite情况不同。

SQLite的.NET开发包来自System.Data.SQLite、完全兼容ADO.NET接口,也提供Linq和Entity Framework 6实现。但这并不重要,重要的是System.Data.SQLite它由两部分代码组成,一部分是非托管的C++代码实现,其中一部分是托管代码和.NET 框架接口。因为非托管代码无法内置到”Any CPU“所以System.Data.SQLite下载页面上的每个软件包显示如下32位或64位系统是有区别的。

说到这里,顺便说一下,看看System.Data.SQLite我从下载页面感到头晕。虽然在下载页面的开头花了大量的篇幅来解释如何选择下载,但估计很少有人会通读,所以这里简单介绍一下。


1) 首先,按类型分为安装包、非静态连接的二进制包和静态连接的二进制包。安装包会将相关的动态库安装到系统中,并将它们注册到GAC(Global Assembly Cache);两个二进制包的区别在于非托管部件的连接方式不同。非静态连接的二进制包需要VC支持运行时库。应该注意的是,如果有必要 Visual Studio中连接SQLite要安装数据库,必须选择适当的安装包。

例如,到Visual Studio 2010中连接SQLite应该下载”sqlite-netFx40-setup-bundle-x86-2010-1.0.90.0.exe“这在下载软件包的说明中以粗体字体清楚地解释。


[下载软件包的说明有清晰的粗体字体说明]

安装后,您可以安装Visual Studio 2010中连接SQLite了:


[在Visual Studio中连接SQLite]

2) 每种类型都遵循.NET该版本已分为几组,目前从.NET 2.0 SP2到.NET 4.5.1,总共支持5个版本的.NET Framework。每个.NET版本进一步分为32位和64两组。选择32位还是64位是根据使用系统确定的。例如,在开发过程中64释放位系统后运行 在32在位系统上,需要在开发过程中使用它64位System.Data.SQLite.dll发布时,请使用32位的 System.Data.SQLite.dll替换 (看起来很麻烦)请稍后查看解决方案)。

3) 在每个.NET组中有所有版本2文件包,一个带有”bundle“另一个没有话。包括”bundle“动态库以混合模式编译 使用时,您所需要的只是System.Data.SQLite.dll你可以做到没有它”bundle“方法是将非托管部分和托管部分分开。 译,System.Data.SQLite.dll它不能独立使用,需要SQLite.Interop.dll只能使用。


要切中要害,如果你想使用”Any CPU”的System.Data.SQLite.dll必须使用没有”bundle“这个词”指的是一个非混合编译的二进制包。

非混合编译二进制包包括System.Data.SQLite.dll和SQLite.Interop.dll两个动态库。根据官方声明 明,SQLite.Interop.dll它可以与System.Data.SQLite.dll在同一目录下,也可以放在x86或x64在子目录下,由 System.Data.SQLite.dll根据系统类型调用。要确认,请下载以下两个软件包进行比较:

sqlite-netFx40-binary-Win32-2010-1.0.90.0.zip

sqlite-netFx40-binary-x64-2010-1.0.90.0.zip

事实证明,只有SQLite.Interop.*不同,所有其他文件都相同


[比较结果:仅SQLite.Interop.*不同]

然后把两个包放进去SQLite.Interop.*分别放在x86和x64合并到子目录下的包中。在不同类型的系统下运行test.exe结果全部通过

最后要做的是Visual Studio项目中的参考文献System.Data.SQLite.dll,再将x86\SQLite.Interop.dll和x64 \SQLite.Interop.dll复制到项目根目录,将其包含在项目中,然后在属性中设置“如果较新则复制”或“始终复制”。生成的结果如下所示:

TestSQLite\bin\Debug

│  System.Data.SQLite.dll

│  TestSQLite.exe

├─x64

│      SQLite.Interop.dll

└─x86

SQLite.Interop.dll

组合包命名为”sqlite-netFx40-static-binary-x86-x64-2010-1.0.90.0.zip“,分享给大家,欢迎下载使用。

51CTO资源站共享

360云盘共享

版权声明

所有资源都来源于爬虫采集,如有侵权请联系我们,我们将立即删除