You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

VB读取Firefox便携版places.sqlite报SQLite程序集加载错误求解

问题根因

你遇到的Could not load file or assembly 'System.Data.SQLite, Version=1.0.116.0... An attempt was made to load a program with an incorrect format报错,核心触发原因分三类:

  1. 程序编译的目标平台和引用的System.Data.SQLite版本架构不匹配(x86/x64混载,这是90%场景下的触发原因)
  2. 只引用了System.Data.SQLite的托管DLL,缺少对应架构的原生互操作依赖文件
  3. 引用的DLL版本和项目配置的绑定版本不一致
可行解决方案
  • 修正项目目标平台配置
    打开VB项目的属性页,进入「编译」选项卡,点击「高级编译选项」,将目标CPU从默认的Any CPU切换为和你引用的System.Data.SQLite匹配的架构:如果引用的是32位版本就选x86,64位版本就选x64,同时取消勾选「首选32位」选项。修改完成后清理项目的bin、obj目录,重新编译即可。

    注意:便携版Firefox本身分32位和64位版本,但places.sqlite文件本身和架构无关,你只需要保证自己的程序和引用的SQLite组件架构统一就行,不需要和Firefox架构对齐。

  • 补全SQLite依赖,统一版本
    不要单独拷贝System.Data.SQLite.dll到项目目录引用,这个DLL是托管层,运行时必须依赖对应架构的原生SQLite.Interop.dll才能正常加载:
    1. 先移除项目里现存的所有System.Data.SQLite相关引用,删除输出目录里残留的旧版SQLite相关DLL
    2. 通过NuGet包管理器安装对应1.0.116版本的System.Data.SQLite.Core包,安装完成后会自动将x86、x64两个版本的互操作DLL配置到输出目录,不需要手动拷贝文件
    3. 如果不用NuGet手动部署,必须把和你目标平台一致的SQLite.Interop.dll和System.Data.SQLite.dll一起放到程序EXE同级目录,不能缺文件
  • 绕开锁文件问题(解决程序集加载问题后需要注意)
    程序集加载正常后,不要直接读取正在运行的Firefox目录下的places.sqlite——Firefox启动时会独占锁定自己的配置数据库,直接读取会报文件占用错误,需要先把该文件拷贝到临时目录,再对拷贝后的文件执行读取操作。
  • 替代方案
    如果不想处理System.Data.SQLite的架构匹配问题,可以直接用原生sqlite3.dll通过P/Invoke方式调用,也可以选择不依赖额外互操作DLL的轻量SQLite包装库,从根源上避免程序集格式不匹配的问题。

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.30 15:39:17