[解决]System.DllNotFoundException: 无法加载 DLL“SQLite.Interop.DLL” -- 绿化System.Data.SQLite.dll
这个问题是在绿化System.Data.SQLite.dll的时候出现的
[1]在下面的网站下载的1.0.66版本的单文件整合型的dll是可以直接使用的http://sqlite.phxsoftware.com/
[2]在下面的网站下载的Setups for 32-bit Windows (.NET Framework 3.5 SP1)的安装文件安装后也是可以解决问题的
http://system.data.sqlite.org/index.html/doc/trunk/www/downloads.wiki
但上面两种都不见得是理想的解决方案
[1]方案的dll是 Apr 18, 2010更新的,太老了
[2]方案需要在电脑上进行一次seup的安装,而SQLite的dll,众所周知是可以单独调用就可以的
于是在[2]Precompiled Binaries for 32-bit Windows (.NET Framework 3.5 SP1)成了最佳解决方案
下载来是一个zip文件,里面的dll直接放在应用程序目录下就可以了
这样的zip也有两个选择,
[3]一个是带有bundle字样的单dll形式的,经测试,在.Net 2.0安装正确的前提下,这个方案也是可以解决问题的
[4]还有一种是不带有bundle字样的,内会多出一个SQLite.Interop.DLL文件,这个文件虽然在编程的时候不用添加引用,但是在程序运行的时候需要和System.Data.SQLite.dll放在同一目录下才可以
问题出现在[4]这一用法上,当我使用这一方案的时候,在开发环境一切正常,在实际的服务器上部署的时候出现了标题上的问题了,我的SQLite.Interop.DLL分明就在指定的目录下,为什么说没有呢?
我如果在实际环境中安装一次[2]的setup版本的驱动程序,问题就解决了,但是奇怪的是我当我卸载了这个setup驱动之后,问题不会再次出现
我用监控软件监控了所有这个setup包所作的一切,注册表,环境变量,dll等,再卸载的时候全部删除,但是问题还是没有再现
百思不得其解。。。。。
最后在官网下载区的一句话
This binary package features the mixed-mode assembly and contains all the binaries for the x86 version of the System.Data.SQLite 1.0.74.0 (3.7.7.1) package. The Visual C++ 2008 SP1 runtime for x86 and the .NET Framework 3.5 SP1 are required.
说是想要使用这个绿色版的dll就需要安装Visual C++ 2008 SP1 runtime,我才发现,setup驱动安装的同时会在电脑上安装vc2008运行时,而这一过程没有在安装的过程中有任何提示并且vc2008运行时不会随着setup的卸载而卸载,
问题解决了,在想要部署[4]方案绿化版本的System.Data.SQLite.dll电脑上安装vc2008[下载]运行时就可以了