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”,共享给大家,欢迎下载使用。
◆ 360云盘共享
SQLite的.NET应用自适应32位/64位系统 z的更多相关文章
- SQLite在.NET中自适应32位/64位系统
如果一个.NET应用要自适应32位/64位系统,只需要在项目的“目标平台”设置为“Any CPU”.但是如果应用中使用了SQLite,情况就不同了. SQLite的.NET开发包来自是System.D ...
- 让使用SQLite的.NET应用自适应32位/64位系统
如果一个.NET应用要自适应32位/64位系统,只需要在项目的“目标平台”设置为“Any CPU”.但是如果应用中使用了SQLite,情况就不同了. SQLite的.NET开发包来自是System.D ...
- 在代码生成工具Database2Sharp中使用ODP.NET(Oracle.ManagedDataAccess.dll)访问Oracle数据库,实现免安装Oracle客户端,兼容32位64位Oracle驱动
由于我们开发的辅助工具Database2Sharp需要支持多种数据库,虽然我们一般使用SQLServer来开发应用较多,但是Oracle等其他数据库也是常用的数据库之一,因此也是支持使用Oracle等 ...
- dll文件32位64位检测工具以及Windows文件夹SysWow64的坑
自从操作系统升级到64位以后,就要不断的需要面对32位.64位的问题.相信有很多人并不是很清楚32位程序与64位程序的区别,以及Program Files (x86),Program Files的区别 ...
- 最新Internet Download Manager (IDMan) 6.25 Build 20 32位 64位注册破解补丁
0x00 IDMan介绍 Internet Download Manager提升你的下载速度最多达5倍,安排下载时程,或续传一半的软件.Internet Download Manager的续传功能可以 ...
- 笔记:C语言数据类型在32位与64位机器上的字节数
读<深入理解计算机系统> 第二章 信息的表示与处理 32位与64位的典型值,单位字节 声明 32位机器 64位机器 char 1 1 short int int 4 4 long int ...
- [转]oracle odp.net 32位/64位版本的问题
本文转自:http://www.cnblogs.com/yjmyzz/archive/2011/04/19/2020793.html 如果你的机器上安装了odp.net,且确信machine.conf ...
- Win7 下用 VS2015 编译最新 openssl(1.0.2j)包含32、64位debug和release版本的dll、lib(8个版本)
Win7 64位系统下通过VS2015编译好的最新的OpenSSL(1.0.2j)所有八个版本的链接库, 包含以下八个版本: 1.32位.debug版LIB: 2.32位.release版LIB: 3 ...
- GCC下32位与64位机器类型变量所占字节数
GCC下32位与64位机器类型变量所占字节数 在C语言中,编译器一般根据自身硬件针对类型变量来选择合适的字节大小,下面列举一下在GCC编译器下32位机器与64位机器各个类型变量所占字节数目: C语言 ...
随机推荐
- 未在本地计算机上注册microsoft.jet
未在本地计算机上注册microsoft.jet http://www.microsoft.com/zh-cn/download/confirmation.aspx?id=13255
- varchar和varchar2的区别
varchar是标准sql里面的. varchar2是oracle提供的独有的数据类型. varchar对于汉字占两个字节,对于英文是一个字节,占的内存小,varchar2都是占两个字节. varch ...
- HDU_2082 找单词 【母函数的应用】
题目: 假设有x1个字母A, x2个字母B,..... x26个字母Z,同时假设字母A的价值为1,字母B的价值为2,..... 字母Z的价值为26.那么,对于给定的字母,可以找到多少价值<=50 ...
- P3813 [FJOI2017]矩阵填数
传送门 矩阵很大,但是发现 $n$ 很小,从这边考虑,对于一个一堆小矩阵放在一起的情况 考虑把每一块单独考虑然后方案再乘起来 但是这些奇怪的东西很不好考虑 所以暴力一点,直接拆成一个个小块 但是这样我 ...
- SPOJ - FAVDICE 简单期望
dp[0]=0; // rep(i,1,n) dp[i]=(double)(n-i)/n*dp[i-1]+1+(double)(i)/n*dp[i]; // (n-i)/n dp[i]= n-i / ...
- properties 资源文件读取
1. 在source中添加资源文件 resource.properties #FTP 相关配置 #FTP 的ip地址 FTP_ADDRESS=192.168.88.142 FTP_PORT=21 ...
- [转] 利用js实现 禁用浏览器后退
[From] http://blog.csdn.net/zc474235918/article/details/53138553 现在很多的内部系统,一些界面,都是用户手动点击退出按钮的.但是为了避免 ...
- win7和centos7双系统--转
转自http://blog.chinaunix.net/uid-30867756-id-5758575.html 参考:http://blog.csdn.net/hsg77/article/detai ...
- linux的运行模式
一. 运行模式 运行模式也可以称为运行级别. 在Linux中存在一个进程:init(initialize,初始化),进程id是1 该进程存在一个对应的配置文件:inittab(系统运行级别配置文件,位 ...
- nodejs基础知识查缺补漏
1. 单线程.异步I/O.对比php nodejs是单线程的,但是是异步I/O,对于高并发时,它也能够快速的处理请求,100万个请求也可以承担,但是缺点是非常的耗内存,但是我们可以加大内存, 所以能用 ...

