我目前正在使用 SQLite for Windows Forms,但在运行项目时它显示错误:
无法加载DLL“sqlite3”:找不到指定的模块。 (HRESULT 异常:0x8007007E)
我添加了
System.Data.SQLite.dll
的DLL,但它显示了相同的错误。请问有人可以帮助我给出关于这个问题的完美答案吗?预先感谢
这应该可以解决我的问题。 添加以下 DLL。
使用项目“添加现有项目”并选择 sqlite3.dll“作为链接”。单击“确定”。在项目中选择 DLL 并将“Copy Local”值设置为 True。
也许您还没有添加适合平台的版本? 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天,终于找到解决办法了。
截至 2018 年 3 月,如果您尝试通过 Nuget Package Manager 使用 sqlite-net,它会向您的解决方案添加两个文件和一些参考 dll,与 UWP 或 Android 等项目的类型无关。
之后,如果您编译并运行解决方案将失败并出现异常
无法加载DLL“sqlite3”:找不到指定的模块。 (HRESULT 异常:0x8007007E)
这是因为它无法加载sqlite3.dll,因为它没有通过NUGET包管理器添加到解决方案中。所以你需要手动添加它。
要添加,首先确定您的项目是 32 位还是 64 位,然后从 https://www.sqlite.org/download.html 下载相应的 Windows 运行时预编译二进制文件,然后手动添加它们(复制并粘贴)。
当我下载最新的 sqlite 提供程序时,我遇到了同样的问题,我尝试了这里的解决方案,但它不起作用,因此我下载了早期版本并且它工作正常。
最近遇到了这个问题 - 将
procmon
附加到我的进程后,我发现最新的 System.Data.SQLite 库(为 .NET4 构建的库)依赖于 MSVC 2010 运行时,而服务器没有这个安装了。幸运的是,这可以从 Microsoft 网站下载。
http://sqlite.org/download.html)。
有2种解决方案。 将其复制到您路径中的目录(例如 System32),或者您可以将其复制到可执行文件所在的同一目录中。
runtimes
文件夹,它应该包含用于各种目标的 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.");
}
}
}