C#sqlite无法加载sqlite3.dll

时间:2015-05-26 20:11:32

标签: c# sqlite nuget

我使用nuget来安装sqlite-netSystem.Data.SQLite (x86/x64)。我已重建并且已重新启动,但仍然出现以下错误:Unable to load DLL 'sqlite3': The specified module could not be found. (Exception from HRESULT: 0x8007007E)。这是触发它的行:

db = new SQLiteConnection("Data Source=C:\\Users\\xxxxxxx\\Desktop\\mydb.sqlite;Version=3;");

我错过了什么吗?这不应该起作用吗?

2 个答案:

答案 0 :(得分:2)

我认为这可能是您的应用程序与sqlite驱动程序之间的架构不匹配。

在此处{@ 3}下载与您的体系结构匹配的预编译二进制包,并将.dll放入bin \ Debug或bin \ Release文件夹中。我认为它可能是x86和x64之间的体系结构不匹配。

从文档中,您可以看到所需的部署结构:

<bin>\App.exe (optional, managed-only application executable assembly)
<bin>\App.dll (optional, managed-only application library assembly)
<bin>\System.Data.SQLite.dll (required, managed-only core assembly)
<bin>\System.Data.SQLite.Linq.dll (optional, managed-only LINQ assembly)
<bin>\System.Data.SQLite.EF6.dll (optional, managed-only EF6 assembly)
<bin>\x86\SQLite.Interop.dll (required, x86 native interop assembly)
<bin>\x64\SQLite.Interop.dll (required, x64 native interop assembly)

答案 1 :(得分:2)

您已经安装了两种不同的方式来与C#中的SQLite进行通信,这些方法并不完全兼容:本机“sqlite3.dll”程序集周围的瘦sqlite-net包装器和功能齐全的“System.Data.SQLite”。 SQLite的.NET数据提供程序。

sqlite-net只是将一些源文件添加到您的项目中(SQLite.cs和SQLiteAsync.cs)。在这些内容中,您将看到许多extern声明,如下所示:

[DllImport("sqlite3" , EntryPoint = "sqlite3_open_v2", CallingConvention=CallingConvention.Cdecl)]
public static extern Result Open ([MarshalAs(UnmanagedType.LPStr)] string filename, out IntPtr db, int flags, IntPtr zvfs);

sqlite-net假设输出目录中有一个名为“sqlite3.dll”的文件。尽管文件“System.Data.SQLite.dll”实际上是一个与“sqlite3.dll”兼容的混合程序集,但安装System.Data.SQLite程序包并不会提供此文件。

所以你有两个选择:

  1. http://www.sqlite.org/download.html

  2. 下载sqlite3.dll本机库
  3. 查找现在属于项目的sqlite-net源文件中的所有引用,并从

    更改它们
    [DllImport("sqlite3", ...
    

    [DllImport("System.Data.SQLite.dll", ...
    
  4. 选择两种方法之一(sqlite-net或System.Data.SQLite)并卸载其他软件包(两者都有利弊)可能是一个好主意。