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

问题描述 投票:0回答:15

我目前正在使用 SQLite for Windows Forms,但在运行项目时它显示错误:

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

我添加了

System.Data.SQLite.dll
的DLL,但它显示了相同的错误。请问有人可以帮助我给出关于这个问题的完美答案吗?预先感谢

sqlite
15个回答
25
投票

这应该可以解决我的问题。 添加以下 DLL。

  • Microsoft Visual C++ 运行时包
  • 适用于 Windows 运行时的 SQLite

enter image description here


13
投票

使用项目“添加现有项目”并选择 sqlite3.dll“作为链接”。单击“确定”。在项目中选择 DLL 并将“Copy Local”值设置为 True。


12
投票

也许您还没有添加适合平台的版本? SQLite 随一个 X86(32 位)程序集和一个 X64(64 位)程序集一起分发。

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

但是,第二次查看错误消息时,我不确定是否就是这样。您是否对 SQLite 进行本机调用?在这种情况下,您可能必须将 dll 重命名为 sqlite3.dll。

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


3
投票

就我而言,我正在开发一个 UWP 项目。我必须添加对 Visual C++ 2015 Runtime for Universal Windows Platform Apps 的引用,错误就消失了。可以将其添加到参考管理器中的通用 Windows > 扩展下。详细的解决方案可以在这里找到


3
投票

苦苦挣扎3天,终于找到解决办法了。

截至 2018 年 3 月,如果您尝试通过 Nuget Package Manager 使用 sqlite-net,它会向您的解决方案添加两个文件和一些参考 dll,与 UWP 或 Android 等项目的类型无关。

enter image description here

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

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

这是因为它无法加载sqlite3.dll,因为它没有通过NUGET包管理器添加到解决方案中。所以你需要手动添加它。

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

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


2
投票

当我下载最新的 sqlite 提供程序时,我遇到了同样的问题,我尝试了这里的解决方案,但它不起作用,因此我下载了早期版本并且它工作正常。


2
投票

最近遇到了这个问题 - 将

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


2
投票
我在 Xamarin.Forms 应用程序中的 UWP 项目中遇到了完全相同的问题。 在 UWP 项目中添加对“SQLite for Universal Windows Platform”的引用解决了该问题。

enter image description here


1
投票
将sqlite3.dll复制到System32文件夹中。这对我有用。也谢谢!


1
投票
我正在使用 PCL 和 Droid 项目构建本机 Windows Phone 8.1 应用程序。我遇到了同样的错误,我将引用放在正确版本的 sqlite3.dll (wpa81) 中,并且一切正常。


1
投票
特别是如果您已更新到 Visual Studio 2015 RTM 并正在开发通用 Windows 应用程序,请尝试卸载 SQLite for Universal App Platform 扩展并重新安装(请参阅

http://sqlite.org/download.html)。


1
投票
所有这些似乎都是针对某些情况的解决方案。 对于我以及本页上的 @Marlon Ticao 来说,应用程序就是找不到 DLL。

有2种解决方案。 将其复制到您路径中的目录(例如 System32),或者您可以将其复制到可执行文件所在的同一目录中。


0
投票
我在使用第三方构建的 sqlite3.dll 时遇到了这个确切的问题 - 该应用程序无法启动。我使用dependency walker发现这个sqlite3.dll对msvcr110.dll有依赖。 一旦我包含了这个文件,一切都很好。


0
投票
不要忘记在 .NET(核心)项目中部署已发布的

runtimes

 文件夹,它应该包含用于各种目标的 DLL。


0
投票
我正在 AutoCAD 中运行代码。假定 DLL 的位置与运行代码相关,在本例中为 ACAD.EXE。我通过在 AutoCAD 加载 DLL 时加载 DLL 解决了这个问题。

public void Initialize() { try { var dllFolder = Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().CodeBase); dllFolder = dllFolder.Substring(6); var dllFullPath = Path.Combine(dllFolder, @"e_sqlite3.dll"); SQLiteLoader.LoadSQLite(dllFullPath); } catch (Exception ex) { WriteMessage(ex.Message); } } public static class SQLiteLoader { [DllImport("kernel32.dll", SetLastError = true)] private static extern IntPtr LoadLibrary(string path); public static void LoadSQLite(string pathToSqliteDll) { IntPtr handle = LoadLibrary(pathToSqliteDll); if (handle == IntPtr.Zero) { throw new Exception("Could not load SQLite runtime from specified path."); } } }
    
© www.soinside.com 2019 - 2024. All rights reserved.