为什么在将 SQLite Nuget 包添加到 LINQPad 时出现 DllNotFoundException?

Why am I getting DllNotFoundException when adding SQLite Nuget Package to LINQPad?

我已将 System.Data.SQLite.Core NuGet 包添加到我的 LINQPad 5 查询(高级版),然后尝试执行以下操作:

new SQLiteConnection(":memory:").Dump();

但我得到:

DllNotFoundException: Unable to load DLL 'SQLite.Interop.dll': The specified module could not be found. (Exception from HRESULT: 0x8007007E)

如何告诉 LINQPad 在哪里可以找到 SQLite 本机 DLL?

请注意我不想使用 IQ 驱动程序。

此库未以标准方式引用,因为它是本机的并且需要针对 X86 和 X64 的不同映像。

LINQPad 中的解决方法是找到以下文件夹:

%localappdata%\LINQPad\NuGet.FW46\System.Data.SQLite.Core\System.Data.SQLite.Core.1.0.99.0\build\net46

并将X86X64子文件夹复制到LINQPad.exe所在的文件夹中。

基于this comment in the LINQPad forum的另一种解决方案是执行以下操作:

  1. 复制 System.Data.SQLite.dll 文件(可能还有相应的 System.Data.SQLite.xml 文件)某处,例如在与 LINQPad 查询文件相同的目录中。
  2. 复制 x64x86 子目录,例如从目录 C:\Users\your-user-name-goes-here\AppData\Local\LINQPad\NuGet.FW46\System.Data.SQLite\System.Data.SQLite.Core.1.0.103\build\net46, 到您在步骤 [1] 中复制文件的同一目录。
  3. 将以下代码添加到您的 LINQPad 查询中:

    System.Environment.SetEnvironmentVariable(
        "PreLoadSQLite_BaseDirectory",
        @"C:\path\to\which\you\copied\the\files\and\directories\in\steps\one\and\two");
    

与 Joe Albahari(顺便提一下,LINQPad 的创建者!)提交的答案相比,此方法的优势在于,它可以很容易地包含在 Git 存储库中(如果您要存储因此,您的 LINQPad 查询)。