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

如何在VSIX项目中使用System.Data.SQLite?运行时遇DLL加载失败

在VSIX项目中使用System.Data.SQLite的正确方案

问题本质

SQLite.Interop.dll是原生非托管DLL,并非.NET程序集——这就是你尝试通过VSIX清单添加“程序集资产”时报错的原因。同时VSIX打包流程默认不会自动复制这类原生DLL到输出目录,导致运行时触发DllNotFoundException。

分步解决步骤

1. 确认NuGet包安装正确

通过NuGet安装System.Data.SQLite元包(或单独安装System.Data.SQLite.Core),安装过程会自动下载对应平台的SQLite.Interop.dll,并生成x64/x86目录结构。

2. 配置原生DLL的打包规则

  • 找到项目输出目录(如bin/Debug)下的x64和x86文件夹,每个文件夹内都有SQLite.Interop.dll。
  • 将这两个文件夹完整复制到VSIX项目的根目录中。
  • 在Visual Studio中选中这两个文件夹,修改属性:
    • 生成操作:设置为内容
    • 复制到输出目录:设置为始终复制

3. 修改VSIX清单添加内容资产

打开source.extension.vsixmanifest:

  • 切换到「资产」标签页,点击「新建」。
  • 类型选择内容,源选择「文件系统」,路径选择刚才复制到项目根目录的x64和x86文件夹(可分别添加两个资产)。
  • 部署路径保持默认(和项目中的目录结构一致),确保打包后VSIX内保留x64/x86的层级结构。

4. 验证打包结果

生成VSIX包后,将其解压,检查内部是否存在x64和x86文件夹,且每个文件夹内都包含SQLite.Interop.dll。

5. 可选:手动加载DLL(极端情况)

如果仍出现加载问题,可在扩展启动时手动指定DLL路径:

using System.IO;
using System.Runtime.InteropServices;

// 根据进程位数匹配对应目录
var archDir = Environment.Is64BitProcess ? "x64" : "x86";
var dllFullPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, archDir, "SQLite.Interop.dll");
NativeLibrary.Load(dllFullPath);

避坑提醒

  • 绝对不要把SQLite.Interop.dll当作.NET程序集添加到VSIX资产中,它没有程序集元数据,编辑器必然报错。
  • 必须保留x64/x86的目录结构,System.Data.SQLite运行时会自动根据当前进程位数到对应目录加载DLL。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 19:30:09