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

如果一个.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云盘共享

时间: 2024-10-16 03:13:41

SQLite的.NET应用自适应32位/64位系统 z的相关文章

qml实现对SSL的支持(使用msys2,同时支持32和64位)超详细 good

首先准备环境.两种方法,使用mingw64 或者VS 直接放上下载地址https://sourceforge.net/projects/msys2/我下载的是msys2-x86_64-20161025 ,同时支持32和64位里面有三个EXE   msys2  mingw64  mingw32  3个程序完全独立各自使用各自的gcc 再也不用麻烦的切换了.进入msys2  这时可以运行  pacman   使用说明地址https://wiki.archlinux.org/index.php/pac

查看系统版本、32位与64位生产场景中的使用及对比

一.查看系统版本 [[email protected] ~]# uname -a #系统版本详细信息 Linux ysolin 2.6.32-431.el6.x86_64 #1 SMP Fri Nov 22 03:15:09 UTC 2013 x86_64 x86_64 x86_64 GNU/Linux [[email protected] ~]# uname -r   #内核版本 2.6.32-431.el6.x86_64 [[email protected] ~]# uname -m   #

dll文件32位64位检测工具以及Windows文件夹SysWow64的坑(很详细,还有自动动手编程探测dll)

阅读目录 dll文件不匹配导致数据库无法启动 究竟是System32还是SysWow64 区分dll文件32位64位的程序让我倍感迷惑 再次判断究竟是System32还是SysWow64——意想不到的坑 Program Files (x86)与Program Files 32位程序真的需要访问System32吗 32位程序与64位程序的区别总结 参考资料 自从操作系统升级到64位以后,就要不断的需要面对32位.64位的问题.相信有很多人并不是很清楚32位程序与64位程序的区别,以及Program

阿里云主机Windows 2008 32位 64位自助正版激活图文教程

这篇文章主要介绍了阿里云主机Windows 2008 32位 64位自助正版激活图文教程,本文讲解详细,图文说明自助激活Windows正版教程,需要的朋友可以参考下 Windows2008 32位.64位 中文版操作系统,自助激活Windows正版,远程登录服务器后: 1.开始——运行 2.在运行里面输入cmd. 系统会跳出如下窗口: 3.输入slmgr   -skms   kms.aliyun-inc.com 4.输入slmgr -ato 5.完成

dumpbin判断windows程序是32还是64位(包括DLL)

http://blog.csdn.net/csfreebird/article/details/10105681 dumpbin /HEADERS gdal18.dll(or xxx.exe) 如果安装过VS2012的话,直接打开一个VS 2012提供的控制台窗口,比如VS2012 x64 Native Tools Command Prompt. 用下面的命令查看程序的头部信息: [cpp] view plain copy gdal_1.8_rtc>dumpbin /HEADERS gdal18

关于32位/64位版本头文件的重要

1.今天在测试产品发现一个十分异常的现象,代码从语法上分析完全正确,代码如下 2.在32位系统上编译可以通过,其中第15行出现警告:warning: initialization makes pointer from integer without a cast, 但执行时,正常结束 3.在64位linux系统编译可以通过,其中第15行出现警告:warning: initialization makes pointer from integer without a cast, 但在执行时出现 S

深度技术ghost win8 32位/64位装机旗舰版V2014

深度技术ghost win8 32位装机旗舰版V2014下载地址:http://pan.baidu.com/s/1kTLqJLt 深度技术ghost win8 64位装机旗舰版V2014下载地址:http://pan.baidu.com/s/1i3zakU5 本软件深度技术ghost win8 32位/64位装机旗舰版V2014由深度系统官网特别分享: 一.主要更新 * 更新PE系统采用2003内核,支持最新型号机器,解决一些笔记本认不到硬盘问题. * 驱动采用自由天空最新驱动包,个别电脑可能会

32位与64位系统的不同点

设计的初衷不同 64位操作系统的设计初衷是:满足机械设计和分析.三维动画.视频编辑和创作,以及科学计算和高性能计算应用程序等领域中需要大量内存和浮点性能的客户需求,简单说就是64位操作系统是为专业用户专业软件而设计的,而32位系统是为普通用户设计的. 要求配置不同 64位操作系统只能安装在64位电脑上,即CPU必须是64位的,同时需要安装64位常用软件以发挥最佳性能.32位操作系统可以安装在32位或64位电脑上,但是32位操作系统安装在64位电脑上显然不能充分发挥64位硬件的性能. 运算速度不同

@清晰掉 各种类型32位与64位下各类型长度对比

64 位的优点:64 位的应用程序可以直接访问 4EB 的内存和文件大小最大达到4 EB(2 的 63 次幂):可以访问大型数据库.本文介绍的是64位下C语言开发程序注意事项. 1. 32 位和 64 位C数据类型 32和64位C语言内置数据类型,如下表所示: 上表中第一行的大写字母和数字含义如下所示:I表示:int类型L表示:long类型P表示:pointer指针类型32表示:32位系统64表示64位系统如:LP64表示,在64位系统下的long类型和pointer类型长度为64位.64位Li