让使用SQLite的.NET应用自适应32位/64位系统

2023-05-16

Windows 7 64 bit(刚扩到4G内存,果断换64位的,那速度杠杠的)
Microsoft Visual Studio 2010 Ultimate 32bit(在64位系统里运行正常)
sqlite-netFx40-setup-bundle-x64-2010-1.0.90.0
首先要先下载SQLite的开发环境安装包(我是这么理解的,貌似只搞到System.Data.SQLite.dll这个文件引用过去都行),下载页面:http://system.data.sqlite.org/index.html/doc/trunk/www/downloads.wiki
根据自己的VS版本,我下载的是
 
Setups for 64-bit Windows (.NET Framework 4.0)
 sqlite-netFx40-setup-bundle-x64-2010-1.0.90.0.exe 
(12.00 MiB)
 This setup package features the mixed-mode assembly and will install all the necessary runtime components and dependencies for the x64 version of the System.Data.SQLite 1.0.90.0 (3.8.2) package. The Visual C++ 2010 SP1 runtime for x64 is included. The .NET Framework 4.0 is required. 
(sha1: 518be2c4029f7602dd01b6bb24939a5da861e2aa)
下载这个安装文件的时候有个小插曲,就是直接在搜狗浏览器中点这个链接的时候调用迅雷下下来的是一个html文件,显然有问题,后来用IE访问,在新标签页中打开才出来真实的下载地址
搞下来这个文件后运行安装,一路下一步就行了,默认安装到了C:Program FilesSystem.Data.SQLite,打开这个路径可以看到下面的2010bin文件夹下还有个演示用的程序test.exe,运行一下可以看到效果,这里还有最核心的System.Data.SQLite.dll文件,这个文件就是SQLite数据库的引擎了,其实后面访问数据库的时候也就用这一个文件,很方便嵌入的.

 

 

 

如果一个.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”,这在下载包的说明中有明确黑体字说明。

wKioL1L2-2mij_P_AAJV6pRtu7c170.jpg
[下载包的说明中有明确的黑体字说明]

 

  安装之后就可以在Visual Studio 2010中连接SQLite了:

wKiom1L2-eqwJv4jAAE2HS7eYKM589.jpg
[在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.*不同,其它文件都完全相同

wKiom1L3AN-yjXWaAAdjyVYpUAk800.jpg
[比较结果:只有SQLite.Interop.*不同]

 

  然后将两个包的SQLite.Interop.*分别放在x86和x64子目录下,合并成一个包。再在不同类型的系统下运行test.exe,结果都是完全通过

wKioL1L3AWWiY0tNAAUO5xpmciI727.jpg

 

  最后需要做的就是在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”,共享给大家,欢迎下载使用。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

让使用SQLite的.NET应用自适应32位/64位系统 的相关文章

  • 用最小二乘法拟合任意次函数曲线(C#)

    lt summary gt 用最小二乘法拟合二元多次曲线 lt summary gt lt param name 61 34 arrX 34 gt 已知点的x坐标集合 lt param gt lt param name 61 34 arrY
  • OpenCV积分图函数:integral ()详解

    函数名称 xff1a OnMenu020503 函数功能 xff1a 对角积分图 菜单 函数参数 xff1a 输入参数 无 输出参数 无 返 回 值 xff1a void 创建作者 xff1a xff08 QQ xff1a 37071175
  • C语言基础MessageBox(......)用法详解

    MessageBox 功能显示一个消息对话框 语法MessageBox text title icon button default 参数title xff1a string类型 xff0c 指定消息对话框的标题text xff1a 指定消
  • 详解Socket编程---TCP_NODELAY选项

    Nagle算法描述 Socket编程中 xff0c TCP NODELAY选项是用来控制是否开启Nagle算法 xff0c 该算法是为了提高较慢的广域网传输效率 xff0c 减小小分组的报文个数 xff0c 完整描述 xff1a 该算法要求
  • OPC UA简介

    OPC是应用于工业通信的 xff0c 在windows环境的下一种通讯技术 xff0c 原有的通信技术难以满足日益复杂的环境 xff0c 在可扩展性 xff0c 安全性 xff0c 跨平台性方面的不足日益明显 xff0c 所以OPC基金会在
  • 简单的OPC与C#通讯,别想复杂了

    简单的OPC与C 通讯 xff0c 别想复杂了 using System using System Collections Generic using System ComponentModel using System Data usin
  • 开发框架-概念

    前言 做为一个程序员 xff0c 在开发的过程中会发现 xff0c 有框架同无框架 xff0c 做起事来是完全不同的概念 xff0c 关系到开发的效率 程序的健壮 性能 团队协作 后续功能维护 扩展 等方方面面的事情 很多朋友在学习搭建自己
  • 自动化设备的软件框架

    自动化设备的软件主要由2部分组成 xff1a 1是运动控制部分的软件实现 xff0c 2是上位机处理数据并显示结果的软件实现 运动控制的实现 第1部分的实现主要有2种方式 xff0c 一种是用板卡控制的方式 xff0c 一种是用PLC控制的
  • 图解分布式系统架构演进之路

    0 介绍 本篇文章是在我看完 从零开始学架构 之后 xff0c 以架构演变为主线 xff0c 梳理了一下演变过程中出现的问题以及解决方案 xff0c 文章中引用了这本书的一些内容和图片 分布式和集群的概念经常被搞混 xff0c 现在一句话让
  • 分布式系统架构简单介绍

    目录 xff1a 一 什么是分布式系统 xff1f 二 为什么要走分布式系统架构 xff1f 三 系统如何进行拆分 xff1f 四 分布式之后带来的技术挑战 xff1f 一 什么是分布式系统 xff1f 在谈分布式系统架构前 xff0c 我
  • 简述单机,集群,分布式架构区别及联系

    单机结构 我想大家最最最熟悉的就是单机结构 xff0c 一个系统业务量很小的时候所有的代码都放在一个项目中就好了 xff0c 然后这个项目部署在一台服务器上就好了 整个项目所有的服务都由这台服务器提供 这就是单机结构 那么 xff0c 单机
  • 多线程 ---并发与并行概念总结

    软件开发 xff0c 网站开发过程中经常有并发 xff0c 并行这样的多线程处理与应用 因此 xff0c 有必要对其进行了解与掌握 多线程 xff1a 在了解线程之前 xff0c 要先知道进程这个概念 进程是一个具有独立功能的程序关于某个数
  • 并发和并行的概念

    1 CPU的发展趋势 xff1a 核心数目依旧会越来越多 xff0c 根据摩尔定律 xff0c 由于单个核心性能提升有着严重的瓶颈问题 xff0c 普通的PC桌面在2018年可能回到24核心 2 并发和并行的区别 xff1a 所有的并发处理
  • 浅谈多核CPU、多线程、多进程

    1 CPU发展趋势 核心数目依旧会越来越多 xff0c 依据摩尔定律 xff0c 由于单个核心性能提升有着严重的瓶颈问题 xff0c 普通的桌面PC有望在2017年末2018年初达到24核心 xff08 或者16核32线程 xff09 xf
  • markdown 中 希腊字母 与 图片标注

    1 希腊字母 例如想要输入 xff1a xff0c 则只需要键入 lambda xff0c 即可实现 xff0c 其他希腊字母的编码如图所示 2 动态图片 将动态图片保存到本地 xff0c 然后上传 xff1b 3 图片标注 span cl
  • C#操作快捷方式(获取快捷方式属性、创建快捷方式)

    第一步 创建一个项目 无需废话 xff0c 跳过 第二步 引用COM组件 右键 引用 xff0c 添加引用 xff0c 选择 COM组件 xff0c 找到 Windows Script Host Object Model xff0c 然后确
  • C#如何判断程序调用的exe已结束

    二个方法 xff1a 以运行系统记事本为例 方法一 xff1a 这种方法会阻塞当前进程 xff0c 直到运行的外部程序退出 System Diagnostics Process exep 61 System Diagnostics Proc
  • c#中程序以管理员身份运行的三种办法

    三种办法 xff1a 一 设置程序本身的属性 xff1a 勾选 以管理员身份运行此程序 xff0c 必要时设置 更改所有用户设置 以管理员身份运行此程序 xff0c 当然这种办法是被动的 xff0c 也不是最实际的办法 xff1b 二 代码
  • 在c#中将debug/release下文件打包成一个可直接运行exe文件

    winrar5 60 1 选择debug release下所有文件 xff0c 鼠标右键 添加到压缩文件 2 常规 gt 压缩选项 gt 创建自解压格式压缩文件 xff0c 可将默认文件名重命名 3 高级 gt 自解压选项 3 1 设置 g
  • C#-文件只读时进行拷贝或删除报错, 对路径不允许访问

    文件只读时进行拷贝报错 xff0c 解决方法如下 xff1a 设置文件属性为正常 然后在进行拷贝 lt summary gt 拷贝文件夹 lt summary gt lt param name 61 34 sourceDirectory 3

随机推荐

  • c# gdi设置画刷透明

    使用solidBrush新建画刷 xff0c 定义画刷的颜色为透明色 Brush b 61 new SolidBrush Color FromArgb 50 Color Green 这里的50是透明度的设置 xff0c 范围从0 255 x
  • c#中实现图像图像卷积与滤波-高斯平滑

    使用C 语言编写高斯平滑 一 线性滤波与卷积的基本概念 2D卷积需要4个嵌套循环4 double loop xff0c 所以它并不快 xff0c 除非我们使用很小的卷积核 这里一般使用3 3或者5 5 而且 xff0c 对于滤波器 xff0
  • C# 中Bitmap图像处理含增强对比度的三种方法

    Bitmap类 Bitmap对象封装了 xff27 xff24 xff29 43 中的一个位图 xff0c 此位图由图形图像及其属性的像素数据组成 因此Bitmap是用于处理由像素数据定义的图像的对象 该类的主要方法和属性如下 xff1a
  • c#获取控件指定坐标的像素值

    DllImport 34 gdi32 dll 34 private static extern uint GetPixel IntPtr hDC int XPos int YPos Graphics g 61 control CreateG
  • C#完美实现透明窗体的绘制效果

    为了实现透明窗体的绘制 xff0c 最开始是采用了双层窗体的模式 思路 xff1a 将form1的属性transparencyKey设置为背景色 xff0c 将form2的opicaty设置的很低 xff0c 比如0 05 保证鼠标不会穿透
  • CAS SSO 单点登录框架 学习

    1 了解单点登录 SSO 主要特点是 SSO 应用之间使用 Web 协议 如 HTTPS xff0c 并且只有一个登录入口 SSO 的体系中有下面三种角色 1 User 多个 2 Web 应用 多个 3 SSO 认证中心 一个 2 SSO
  • C# override详解

    重载 重写 覆写 xff0c 分别指的是overload override new 一 override重写 xff0c 是在子类中重写父类中的方法 xff0c 两个函数的函数特征 xff08 函数名 参数类型与个数 xff09 相同 用于
  • C# -WinForm 中英文实现, 国际化实现的简单方法

    来源 xff1a http www jb51 net article 45675 htm xff0c 今天看到了借鉴过了 xff0c 保存一下 xff0c 下次开发直接用嘻嘻 软件行业发展到今天 xff0c 国际化问题一直都占据非常重要的位
  • C#的Winform多语言实现(resx文件)

    使用resx文件实现Winform多语言切换 xff0c 本博文提供的代码可以实现简体中文 繁体中文 英文的切换 如果需要增加其它语言的切换 xff0c 只需要编写相应的语言的resx文件即可 并且 xff0c 当修改了语言之后 xff0c
  • c#中中读取嵌入和使用资源文件的方法

    Dotnet中嵌入资源 xff08 位图 图标或光标等 xff09 有两种方式 xff0c 一是直接把资源文件加入到项目 xff0c 作为嵌入资源 xff0c 在代码中通过Assembly的GetManifestResourceStream
  • c#中英文切换实例

    1 创建两个资源文件 Resource en US resx Resource zh CN resx 注意中间部分每种语言文件名固定 xff0c 后缀名是 resx 首部分是自定义的名字 2 创建读写工具类 上面两个资源文件都是在Utili
  • TCP/IP协议讲的明明白白

    从字面意义上讲 xff0c 有人可能会认为 TCP IP 是指 TCP 和 IP 两种协议 实际生活当中有时也确实就是指这两种协议 然而在很多情况下 xff0c 它只是利用 IP 进行通信时所必须用到的协议群的统称 具体来说 xff0c I
  • TCP/IP协议与Http协议的区别详解

    TPC IP协议是传输层协议 xff0c 主要解决数据如何在网络中传输 xff0c 而HTTP是应用层协议 xff0c 主要解决如何包装数据 关于TCP IP和HTTP协议的关系 xff0c 网络有一段比较容易理解的介绍 xff1a 我们在
  • C#中使用MD5对用户密码加密与解密

    C 中常涉及到对用户密码的加密于解密的算法 xff0c 其中使用MD5加密是最常见的的实现方式 本文总结了通用的算法并结合了自己的一点小经验 xff0c 分享给大家 一 使用16位 32位 64位MD5方法对用户名加密 1 xff09 16
  • C#中修改文件或文件夹的权限,为指定用户、用户组添加完全控制权限

    写在前面 在windows系统中 xff0c c盘中的目录权限比较高 xff0c 有时制作安装包的时候 xff0c 默认的安装路径就是在c盘 xff0c 但对运行可执行文件 xff0c 有时候需要为其添加完全控制权限 xff0c 或者读写权
  • C#使用SafeNet的开发狗和超级狗加密使用方法

    1 在安装光盘中选择Windows文件夹 xff0c 单击Setup exe执行安装程序 xff0c 安装过程默认选择 xff0c 单击下一步即可 2 安装完毕后插入超级狗 xff0c 在菜单栏中打开 超级狗开发商向导 xff0c 选择下载
  • Keil5 新建工程编译后Download按钮变灰

    Keil5 新建工程编译后Download按钮变灰 百度看到很多文章解决变灰方法为 这个主要目的是生成 HEX文件 xff0c 但有时候当你在线下载时点了Creat HEX File 并进行编译后 Download按钮依然呈现灰色 此时问题
  • C# SQLite 数据库操作语句与文件视图管理器

    sqlite数据库视图管理器 SQLiteSpy是一款专业的SQLite数据库管理 xff0c 主要用于读取sqlite数据库 xff0c 建立新的SQL查询 xff0c 视图 xff0c 复制和删除表 编辑单元格 xff0c 以及查看索引
  • C#JSON与XML相互转换

    using System using System Collections Generic using System Linq using System Text using System Xml using Newtonsoft Json
  • 让使用SQLite的.NET应用自适应32位/64位系统

    Windows 7 64 bit 刚扩到4G内存 果断换64位的 那速度杠杠的 Microsoft Visual Studio 2010 Ultimate 32bit 在64位系统里运行正常 sqlite netFx40 setup bun