Visual Studio C# – 找不到SQLite.Interop.dll

我目前正在尝试使用Visual Studio创建一个使用SQLite的C#应用​​程序。 我使用NuGet为我的程序安装了SQLite,并且在解决方案资源管理器(System.Data.SQLite,System.Data.SQLite.EF6,System.Data.SQLite.Linq)中出现了三个引用。

当我在VS中执行我的应用程序时,一切正常。 但是,每当我发布它(使用ClickOnce)并尝试运行应用程序时,它都会崩溃并出现以下错误: System.DllNotFoundException:无法加载DLL“SQLite.Interop.dll”:找不到指定的模块(HRESULTexception) :0x8007007E)

经过一些研究,我在Debug文件夹中找到了这个dll并将其复制到我的程序的“.exe”版本的文件夹中(在发布并执行“setup.exe”之后)。 这样,应用程序运行良好。

但我对这个解决方案并不满意,因为它看起来很脏。 我不希望将来的用户在安装我的应用程序时必须手动执行此操作!

因此,我的问题是:我该怎么做才能确保这个dll与我的程序一起安装?

注意:我尝试了这篇文章的第一个答案: 无法加载dll sqlite interop dll WPF但我似乎没有为我工作。

谢谢 !

请参阅https://system.data.sqlite.org/index.html/doc/trunk/www/downloads.wiki上的 使用本机库预加载

您可能需要在其他SQLite DLL下包含x86和x64文件夹。

默认情况下,dll sqlite.interop.dll没有附带SQLite的NuGet安装。 要解决此问题,您需要添加dll,x86和x64。 在SQLite网站下载包含必要dll的包。 在分发之前,将它们安装在客户端中或将这些dll复制到项目中。

我在Visual Studio 2017和.NET Framework 4.5的环境中也遇到了类似的问题,情况是:

我正在使用ClickOnce开发一个Outlook Add Ins来发布它,并将SQLite作为数据库发布。 从NuGet将SQLite库安装到项目中后,它在本地环境中完美运行,但在客户端计算机上弹出exception错误消息“无法加载DLL’SQLite.Interop.dll’”。

我比较了这两个环境,发现DLL文件’SQLite.Interop.dll’尚未发布到客户机上,我们可以在下图中看到。 在此处输入图像描述

我在本地环境中搜索了“SQLite.Interop.dll”,发现它保存在以下文件夹“{project} \ packages \ System.Data.SQLite.Core.1.0.105.2 \ build \”中,用于特定的.Net FrameWork 在此处输入图像描述

因此,我的解决方案是将这两个DLL库添加到项目中,然后可以使用ClickOnce将它们发布到客户端计算机。 在此处输入图像描述

(注意:所选的DLL版本应与您环境中的.NET Framework版本相同。)

如果是可安装文件。 即,如果您正在创建安装文件,则必须手动将dll添加到主输出文件。

转到安装项目的属性,在配置设置中,选择先决条件SQLLite,选择(Checkbox)从项目位置安装它。

看看这是否解决了您的问题。

“注意:我尝试了这篇文章的第一个答案:无法加载dll sqlite interop dll WPF但是我似乎并没有为我工作。”

我也试过了,终于让它运转了。 但重要的是:

  1. 将sqlite.interop.dll作为现有项插入到要构建的项目的根目录中。
  2. 在该文件的属性中,确保其构建处理是“内容”(不是建议的嵌入资源),当然,始终复制到输出目录。

希望有助于击败那个烦人的bug。