最近项目中要用到本地的文件型数据库,很自然的选择了SQLite。
以前在.net framework 2.0/3.5下使用过SQLite,一直都没有什么问题。
不过这次在.net framework 4.0中开始是怎么都不好用,后来看到网上有人说System.Data.SQLite(1.0.66)是在.net framework 2.0平台下编译的,有的给出了在4.0平台下的配置方法,看看这个版本是2010年更新了好像就再也没动过。不会吧,这么好的项目应该不会挂掉吧。又一顿谷哥后,发现了http://system.data.sqlite.org/,果然还活着,而且已经有.net framework 4.0平台下编译的版本了(1.0.81),用上后发现Spring.NET还没有支持到这个版本的DbPrivoder,照着文档,打开Spring.NET源码,按照文档上说的参考以前版本的写了个配置文件(其实就是把以前版本号换了换),F5,可以正常运行了。
开发中没问题了,但是到客户机器部署时又出问题了,有的机器好用有的机器不好用。单独做了个读写SQLite的小程序,最终确定还是System.Data.SQLite的问题。
报的异常是 Could not load file or assembly 'System.Data.SQLite.dll' or one of its dependencies.
但是System.Data.SQLite.dll、System.Data.SQLite.dll两个文件都在啊,用ILSpy打开System.Data.SQLite.dll看了一下,引用的貌似都是framework本身的东西了。
又回去度娘、谷哥,看到有人说是需要用到SQLite.Interop.dll,于是直接拷贝到目录、引用都试过了,还是报相同的异常。
也有人说是32、64位的问题,但是我的都是32位的,只是个客户端程序,也没有IIS等环境的影响。
继续回去找谷哥问问吧,看到stackoverflow有个回答说 System.Data.SQLite.dll is a mixed assembly, i.e. it contains both managed code and native code.,下面还有人说需要安装Microsoft Visual C++ 2010 SP1 Redistributable Package (x86),看起来有点道理,试了一下果然问题解决了。
一直以来都以为System.Data.SQLite只要安装了.net framework就可以读SQLite数据库了,原来还需要安装Microsoft Visual C++ Redistributable Package啊。