欢迎您访问我爱IT技术网,今天小编为你分享的编程技术是:【让Sqlite脱离VC++ Runtime独立运行的方法】,下面是详细的讲解!
让Sqlite脱离VC++ Runtime独立运行的方法
目前手头上的一个.NET项目用到了Sqlite,这是我第一次接触和使用Sqlite,总体感觉还是非常不错的。这里把我使用Sqlite的经验跟大家分享一下。
一.关于Sqlite
Sqlite是一款开源的、适合在客户端和嵌入式设备中使用的轻量级数据库,支持标准的SQL。
不像SqlServer或Oracle的引擎是一个独立的进程、通过TCP或命名管道等与程序进行通信,SQLite却是作为程序的一个部件、一个构成部分,使用Sqlite的方式就是直接在程序中进行API调用。
原始的Sqlite是没有一个向SqlServer企业管理器的可视化操作程序的,但是有个第三方开发的应用SqliteStudio非常不错,基本的建库、建表、编辑数据、导出数据等功能都支持得很好。SqliteStudio运行截图如下所示:

Sqlite资源链接:
(1)Sqlite官网:可以从官网下载源码、或下载已经编译好的二进制版本。支持的系统包括:Linux、MacOS、Windows、.NET。
(2)SqliteStudio:好用的Sqlite可视化管理器。
二.在.NET中使用Sqlite
从官网下载.NET版本的Sqlite,其主要包括两个dll:SQLite.Interop.dll、System.Data.SQLite.dll。
(1)System.Data.SQLite.dll是一个标准的托管dll,我们可以直接在.NET项目中引用并使用它,就像使用.NET自带的System.Data命名空间中的各个对象一样。
(2)SQLite.Interop.dll是一个非托管的dll,是Sqlite引擎核心,我们需要将其拷贝到运行目录下,在运行时,它会被System.Data.SQLite.dll调用。
三.让Sqlite脱离VC++运行时
我们在项目开发完毕后测试的过程中发现,使用了Sqlite的客户端程序在某些机器上运行时会报错,如下所示:
无法加载 DLL"SQLite.Interop.DLL";由于应用程序配置不正确,应用程序未能启动。重新安装应用程序可能会纠正这个问题。(异常来自 HRESULT:0x800736B1)
经过一番折腾,才发现是这些机器上没有安装VC++运行时(Visual C++ 2005 SP1 runtime),而SQLite.Interop.dll的运行是需要VC++运行时支持的。这点太不友好了。我们的项目是基于.NET 2.0开发的,windows xp sp1 及以上版本都自带了这个Framework,而这些机器不一定安装了VC++运行时。所以我第一反应就是,尝试让Sqlite在没有安装VC++运行时的机器上也能正常运行。
1.方案一
我baidu了一下,有个似乎可行的方案是这样的:将msvcm80.dll、msvcp80.dll、msvcr80.dll这几个动态库也放到运行目录下。这个方案我不太喜欢,于是我尝试自己动手解决问题。
2.方案二
凭借我还未完全忘记的一点VC++基础,我知道VC++程序在编译时可以选择是动态链接到依赖的库还是静态链接,如果是静态连接,编译生成的二进制程序中就相当于包含了一份依赖库的拷贝。所以,我的想法是,重新编译 SQLite.Interop.dll,使其静态链接到VC++运行库。我下载了Sqlite的源码,用VS2010打开,截图如下:

SQLite.Interop.2010这个项目是核心,我们需要对它的一些设置稍微做些修改,这些小修改我花了一些时间摸索才成功,这里就略去具体的摸索过程,直接给出摸索成果:
(1)打开SQLite.Interop.2010项目属性页面,配置属性 -> C/C++ -> 代码生成 -> 运行库,该项设置为 多线程调试 (/MTd)。
(2)继续 配置属性 -> 清单工具 -> 输入和输出 -> 嵌入清单,该项原来是“是”,改成“否”。
(3)显示所有项目文件,然后找到SQLite.Interop.2010.props文件,并打开。删掉其中的<INTEROP_MIXED_NAME>配置节点。
(4)从项目中移除“Resource Files”文件夹。
(5)重新编译项目,生成的SQLite.Interop.dll便是我们所需要的。
四.下载成果
除非特别需求,否则大家没有必要重复这一过程,我把生成的Sqlite二进制版本直接提供给大家下载使用。
补充:Sqlite官网已经提供静态连接的库了
http://system.data.sqlite.org/downloads/1.0.93.0/sqlite-netFx20-static-binary-bundle-Win32-2005-1.0.93.0.zip
关于让Sqlite脱离VC++ Runtime独立运行的方法的用户互动如下:
相关问题:win7 64位下运行暴力辛迪加,弹出对话框vc++ runti...
答:把所有的游戏运行库,都重装一遍 >>详细
相关问题:如何解决 Microsot VC++ runtime installer
答:以管理员方式打开命令行窗口 在窗口中输入如下类似的Dos命令,将当前目录切换到程序的安装文件目录下 我的程序安装目录文件在 H:\迅雷下载\MySQL5.5从零开始学光盘\postgresql-9.3.4-1-windows-x64 运行 postgresql-9.3.4-1-windows-x64.exe --i... >>详细
相关问题:如何解决 Microsoft VC++ runtime installer
答:以管理员方式打开命令行窗口 在窗口中输入如下类似的Dos命令,将当前目录切换到程序的安装文件目录下 我的程序安装目录文件在 H:\迅雷下载\MySQL5.5从零开始学光盘\postgresql-9.3.4-1-windows-x64 运行 postgresql-9.3.4-1-windows-x64.exe --i... >>详细
- 【asp】asp.net url重写浅谈-net-url重写
- 【DataSet】DataSet、DataTable、DataRow区别详解
- 【asp】asp.net 动态添加多个用户控件-net-动态添
- 【创建】ASP.NET Web API教程 创建域模型的方法详
- 【asp】asp.net ubb使用代码-net-ubb使用
- 【默认图片】图片不存在使用默认图片代替的实例
- 【asp】asp.net 页面转向 Response.Redirect Ser
- 【页面打印】关于ASP.NET页面打印技术的常用方法
- 【MVC5】MVC 5 第一章 创建MVC 5 web应用程序-net
- 【MVC】一个简单MVC5 + EF6示例分享-EF6实例-MVC5
- 评论列表(网友评论仅供网友表达个人看法,并不表明本站同意其观点或证实其描述)
-
