若是一个.NET应用要自适应32位/64位系统,只须要在项目的“目标平台”设置为“Any CPU”。可是若是应用中使用了SQLite,状况就不一样了。sql
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数据库,就必须选择合适的安装包进行安装。
ide
好比,要在Visual Studio 2010中链接SQLite,应该下载“sqlite-netFx40-setup-bundle-x86-2010-1.0.90.0.exe”,这在下载包的说明中有明确黑体字说明。spa
安装以后就能够在Visual Studio 2010中链接SQLite了:blog
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替换(看起来很麻烦的样子~~请看后面的解决办法~~)。ip
3) 在每一个.NET版本分组中都有2个文件包,一个带有“bundle”字样,另外一个没有。其中带有“bundle”字样的表示动态库是按混合模式编译的,在使用的时候只须要System.Data.SQLite.dll就能够了,而不带“bundle”的则是将非托管部分和托管部分分别编译,System.Data.SQLite.dll不能独立使用,还须要有SQLite.Interop.dll才能使用。ci
言归正传,若是要使用“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.*分别放在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云盘共享
出处:http://blog.51cto.com/jamesfancy/1357462