You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

无法加载SQLite.Interop.dll模块的成因及解决方法咨询

关于VS2015使用System.Data.SQLite 1.0.108时SQLite.Interop.dll加载失败的问题

我之前在VS2015里用System.Data.SQLite 1.0.108开发C#应用时,也踩过这个一模一样的坑,太懂这种编译过了但运行报错的崩溃感了!下面给你拆解成因和靠谱的解决办法:

成因分析

这个错误的核心是找不到原生依赖的SQLite.Interop.dll
System.Data.SQLite是混合模式程序集,它本身是C#写的,但底层要调用SQLite的C语言核心库,SQLite.Interop.dll就是负责中间交互的原生动态链接库。出现问题通常是这两个原因:

  • 构建时这个DLL没被自动复制到输出目录
  • 复制的DLL版本和你的项目平台(x86/x64)不匹配

详细解决办法

按从简单到进阶的顺序试,基本都能搞定:

1. 检查NuGet包的自动复制配置

如果你是通过NuGet安装的包,默认应该会自动处理interop DLL,但偶尔配置会出问题:

  • 右键项目 → 「管理NuGet程序包」,确认System.Data.SQLiteSystem.Data.SQLite.Core两个包都安装了1.0.108版本(这个版本的包是拆分的,两个都需要)
  • 打开项目根目录的packages.config,检查是否有类似下面的配置,确保copyLocal="true"
    <package id="System.Data.SQLite.Core" version="1.0.108" targetFramework="net45" />
    <package id="System.Data.SQLite" version="1.0.108" targetFramework="net45" />
    
  • 清理解决方案(菜单→生成→清理解决方案),然后重新生成,去输出目录(bin/Debugbin/Release)看看,应该会有x86x64文件夹,里面各有一份SQLite.Interop.dll

2. 固定项目的平台目标

VS默认的「任何CPU」模式很容易搞混interop DLL的加载路径:

  • 右键项目 → 属性 → 生成 → 平台目标,选择x86或者x64(不要选「任何CPU」,哪怕勾选了「首选32位」也容易出问题)
  • 重新生成项目,此时输出目录会直接生成对应平台的SQLite.Interop.dll,不用再嵌套在子文件夹里,程序就能正确找到它

3. 手动复制interop DLL到输出目录

如果上面的自动配置不管用,那就手动兜底:

  • 找到NuGet包的安装目录,一般是解决方案根目录/packages/System.Data.SQLite.Core.1.0.108/build/,里面有x86x64两个文件夹,各对应平台的SQLite.Interop.dll
  • 把你项目平台对应的DLL复制到输出目录(比如bin/Debug
  • 更稳妥的方式:把DLL添加到项目中,右键这个DLL → 属性 → 复制到输出目录,选择「如果较新则复制」,这样每次构建都会自动同步

4. 用生成事件自动复制(进阶)

怕手动复制麻烦?可以给项目加个后期生成事件,自动搞定:

  • 右键项目 → 属性 → 生成事件 → 后期生成事件命令行,添加下面的命令(根据你的平台和NuGet路径调整):
    copy "$(SolutionDir)packages\System.Data.SQLite.Core.1.0.108\build\x86\SQLite.Interop.dll" "$(TargetDir)"
    
    如果你的项目是x64平台,把命令里的x86换成x64就行

内容的提问来源于stack exchange,提问作者chinnathambi chinnathambi

火山引擎 最新活动