VB.NET项目编译后提示无法加载SQLite.Interop.dll如何解决?
根因说明
System.Data.SQLite类库分为托管封装层和原生实现层,报错中提到的SQLite.Interop.dll就是对应x86/x64架构的原生实现文件。Visual Studio调试时会自动根据项目配置将对应版本的依赖文件复制到输出目录,但MSI打包工具默认不会自动识别该非托管依赖,因此部署后运行就会触发加载失败错误:
Unable to load DLL 'SQLite.Interop.dll'
排查解决步骤
- 第一步:明确项目目标平台
打开项目属性页→生成选项卡,取消「首选32位」勾选,不要选择「Any CPU」作为目标平台,根据部署需求明确指定为x86或x64,避免运行时加载错架构的依赖文件。 - 第二步:强制生成输出Interop文件
在项目的app.config配置文件中添加如下节点,开启NuGet包自动复制Interop文件的逻辑:
重新编译后检查Release目录,会生成<configuration> <!-- 原有配置保留 --> <runtime> <System.Data.SQLite> <add key="CopySQLiteInteropFiles" value="True" /> </System.Data.SQLite> </runtime> </configuration>x86、x64两个子目录,内部包含对应架构的SQLite.Interop.dll文件。 - 第三步:修正安装包打包规则
打开MSI安装项目,将Release目录下的x86、x64目录、以及存放数据库的db目录都添加到安装包的应用程序根目录中,确保部署时所有依赖都会被复制到目标设备的主程序运行目录。 - 可选精简方案:如果仅需要单一架构部署,可以直接将对应目标平台的
SQLite.Interop.dll复制到主程序根目录,和System.Data.SQLite.dll放在同一级,打包时仅包含该文件即可,运行时会优先读取根目录下的Interop文件。
代码优化提示
你提供的数据库连接代码存在变量重复声明问题:类层级已经声明了共享变量SQLiteConn,但OpenConnection方法内又重新通过Dim SQLiteConn As New SQLiteConnection声明了局部变量,会导致类层级的共享连接变量永远为空,每次调用方法都会重复创建连接对象,建议删除方法内的局部变量声明,直接复用类层级的共享变量即可。
内容的提问来源于stack exchange,提问作者David A Stumpf
相关产品推荐
相关产品推荐

