无法加载 DLL 'sqlite3':未找到指定的模块。(来自 HRESULT: 0x8007007E)

35
我目前在Windows Forms中使用SQLite,但在运行项目时出现错误:
无法加载DLL 'sqlite3':找不到指定的模块。(HRESULT异常:0x8007007E)
我已经添加了System.Data.SQLite.dll的DLL,但仍然显示相同的错误。请问是否有人可以帮助我提供关于这个问题的完美答案?谢谢。

2
我曾经遇到过同样的问题,解决方法是: 从http://www.sqlite.org/download.html下载并安装VSIX包`sqlite-winrt81-3080403.vsix`,然后选择_Solution Explorer/References/Add reference.../Windows/Extensions/SQLite for Windows Runtime (Windows 8.1)_。我正在使用SQLite,并且之前已经安装了NuGet Package sqlite-net - marbel82
尝试这个例子。这对我有用。Windows 10通用应用程序 http://stackoverflow.com/a/33331478/3509494 - Kavinda Gehan
对于更新的解决方案,请使用SQLitePCLRaw.bundle_e_sqlite3包。 - Metro Smurf
14个回答

25

这应该能解决我的问题了。 添加以下DLL文件。

  • Microsoft Visual C++ 运行时程序包
  • SQLite for Windows 运行时

图片描述


3
这是实际解决方案。这个应该标记为答案(Answer)。 - Zia Ur Rahman
4
我正在使用传统的桌面库项目,当我点击“添加引用”时,根本没有“Windows”部分。 我在哪里可以找到它? - LaoR
1
我在使用Visual Studio 2017时遇到了错误(但在2015中没有问题),我安装了2017的C++包,安装了Windows的SQLite运行时,同时也为x86和x64安装了SQLite ADO.Net提供程序,并添加了System.Data.SQLite。我重启了电脑,但仍然出现错误 :( - Elaine
@SurenSaluka 没有“解决”问题。和Elaine一样的问题。我也安装了visx包,System.Data.SQLite,sqlite-net,并尝试手动添加来自官方二进制网站的dll。仍然是同样的问题。 - maplemale
你好,你的项目类型是什么?它是UWP还是Windows 8商店应用程序? - SurenSaluka
显示剩余3条评论

13

使用“添加现有项目”功能,选择sqlite3.dll并将其“作为链接”添加到项目中。点击确定后,在项目中选择DLL并设置“复制本地”值为True。


1
为什么我们应该选择“作为链接”?我们可以只复制它,然后将属性设置为“始终复制”吗? - Ebsan

12

也许你没有添加正确平台的版本?SQLite提供了一个X86(32位)组件和一个X64(64位)组件。

如果你的应用程序是32位应用程序,你应该使用System.Data.SQLite发行版中“bin”目录下的System.Data.SQLite.dll。如果是64位应用程序,则应该使用 bin\x64 目录下的 System.Data.SQLite.dll。

然而,从重新查看错误消息来看,我不确定是否是这个原因。你是否在调用SQLite的本地函数?在这种情况下,你可能需要将dll文件重命名为sqlite3.dll。

正如你所知,System.Data.SQLite是原始本地sqlite3.dll和托管的ADO.NET提供程序的捆绑包(除非你使用某些旧版本,在这种情况下我不确定 - 你可能需要单独使用本地的sqlite3.dll)。


如果您的应用程序是32位应用程序,则应使用System.Data.SQLite分发的“bin”目录中的System.Data.SQLite.dll,如果是64位应用程序,则应使用“bin\x64”中的一个。 - Yhrn
在原始答案中添加了更多的建议,因为评论会太长。 - Yhrn
真正需要理解的是各个平台(.NET、UWP、Xamarin等)寻找DLL的位置。我有时可以让SQLite工作,但我不知道为什么或如何做到的。就像有时它通过渗透作用找到了DLL的位置一样。其他时候,我将DLL放入运行时文件夹中,仍然会收到相同的错误。它实际上是如何找到DLL的位置的呢? - Christian Findlay

3

在我的情况下,我正在开发UWP项目。我需要添加对 Visual C++ 2015 Runtime for Universal Windows Platform Apps 的引用,这样就可以解决错误了。可以在“引用管理器”中选择“通用 Windows > 扩展”进行添加。详细解决方案可以在此处找到。


3

经过3天的努力,终于找到了解决方法。

截至2018年3月,如果您尝试通过Nuget包管理器使用sqlite-net,它会向您的解决方案添加两个文件和一些参考dll,而不管项目类型是UWP还是Android等。

enter image description here

之后,如果您编译并运行解决方案,将会出现异常:

无法加载DLL“sqlite3”:指定的模块找不到。 (HRESULT的异常: 0x8007007E)

这是因为它无法通过NUGET包管理器将sqlite3.dll添加到解决方案中。因此,您需要手动添加它。

要添加,请首先确定您的项目是32位还是64位,然后从https://www.sqlite.org/download.html下载相应的Windows Runtime预编译二进制文件,然后手动添加它们(复制并粘贴)。

现在您的解决方案将如下所示,并且可以无问题运行。 enter image description here


2
当我下载了最新的 SQLite提供程序 时,我遇到了同样的问题,我尝试了 这里 的一个解决方案,但它没有起作用,因此我下载了早期版本,现在它可以正常工作。

2

最近我遇到了这个问题 - 在将procmon附加到我的进程后,我发现最新的System.Data.SQLite库(为.NET4构建的库)依赖于MSVC 2010运行时,而服务器上没有安装。幸运的是,可以从Microsoft网站下载此运行时。


2

在 Xamarin.Forms 应用程序中的 UWP 项目中,我曾经遇到过完全相同的问题。 将 "SQLite for Universal Windows Platform" 的引用添加到 UWP 项目中可以解决这个问题。 enter image description here


在我的情况下,这个扩展没有出现,我必须安装它 => https://marketplace.visualstudio.com/items?itemName=SQLiteDevelopmentTeam.SQLiteforUniversalWindowsPlatform - Elias Platek
在安装SQLite的通用Windows平台版本(https://www.sqlite.org/download.html)后,它对我起作用了。 - ramya

1

特别是如果您已经更新到Visual Studio 2015 RTM并正在开发通用Windows应用程序,请尝试卸载SQLite for Universal App Platform扩展并重新安装(请参见http://sqlite.org/download.html)。


1
所有这些似乎都是针对特定情况的解决方案。对于我和本页上的@Marlon Ticao来说,应用程序无法找到DLL。
有两个解决方案。将其复制到路径中的目录(例如System32)中,或者将其复制到可执行文件所在的同一目录中。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接