【问题标题】:Why am I getting "Unable to load DLL 'sqlite3'" in my WPF app?为什么我的 WPF 应用程序中出现“无法加载 DLL 'sqlite3'”?
【发布时间】:2016-10-10 15:42:01
【问题描述】:

我将我认为必要的 SQLite(和 sqlite-net)包添加到我的应用程序中。但是,在运行它时,我得到了一个例外:

System.DllNotFoundException 未被用户代码处理 H结果=-2146233052 消息=无法加载 DLL 'sqlite3':找不到指定的模块。 (来自

的例外

我安装了以下 SQLite 包:

缺少什么?

更新

我尝试了 ajawad987 的建议,但仍然得到相同的运行时错误,即使我有这个:

...还有这个:

更新 2

这个运行时异常发生的地方(在 SQLite.cs 中)对我来说似乎很奇怪:

如果银光 || USE_CSHARP_SQLITE

        var r = SQLite3.Open (databasePath, out handle, (int)openFlags, IntPtr.Zero);

其他

        // open using the byte[]
        // in the case where the path may include Unicode
        // force open to using UTF-8 using sqlite3_open_v2
        var databasePathAsBytes = GetNullTerminatedUtf8 (DatabasePath);
        var r = SQLite3.Open (databasePathAsBytes, out handle, (int) openFlags, IntPtr.Zero);

endif

但我 am 使用 C#,那么为什么失败的行甚至还在运行呢? (它在“else”块中失败)?

【问题讨论】:

    标签: wpf sqlite visual-studio-2013 nugetgallery runtime-packages


    【解决方案1】:

    您的项目构建是否设置为Any CPU?对于 SQLite3,您需要将其设置为 x86x64x86 路由将在设备之间产生更多的兼容性,所以我推荐这个选项,除非你做一些特定的 64 位工作。

    编辑:您还需要从Sqlite's main site 手动下载实际的 Sqlite DLL。您想要的文件名为sqlite-dll-win32-x86-3080702.zip。从该 ZIP 中提取 DLL 并将其作为 内容文件 添加到您的项目中。将属性工具窗口中的复制到输出目录选项设置为始终复制,然后重建。还要确保您的项目设置为上述 x86 选项。

    这应该希望可以解决问题...自从我在 .NET 应用程序中使用 Sqlite 以来已经有一段时间了。

    旁注:您下载的 Nuget 包实际上只包含真正的 Sqlite DLL 周围的 C# 包装器库。

    【讨论】:

    • 我设置了 Project > Properties > Build to Platform target: = "x86" 但仍然得到同样的运行时错误
    • 您的项目引用中是否有对 sqlite3.dll 的引用?如果没有,您需要手动将其添加到您的项目中。我不认为 N​​uGet 包默认添加这个特定的库,只是它周围的包装 C# 库。您可以从以下位置下载它;查找名为“sqlite-dll-win32-x86-3080702.zip”的下载:sqlite.org/download.html 我将使用此附加信息更新我的上述答案。希望这会有所帮助。
    • 那行得通;万分感谢!不过,我必须说,这不是一种非常用户友好的做事方式。
    • 如果您仍然需要手动添加 DLL,您知道使用扩展有什么意义吗?
    • @SoManyGoblins 该扩展提供了用于使用 Sqlite 数据库引擎的 ADO.NET 提供程序。它还提供了一个 LINQ 提供程序,用于使用 Sqlite 数据库引擎。
    【解决方案2】:

    我在 Windows 商店应用程序上遇到了同样的问题,我按照本教程解决了这个问题: http://www.c-sharpcorner.com/UploadFile/d351ba/working-with-sqlite-in-windows-store-apps/

    无需手动下载dll。重要的一步是第五步:

    5.添加对项目的引用。

    右键单击解决方案下的对项目的引用,选择添加引用。这将打开项目的参考管理器。

    在参考管理器中单击 Windows 版本。我的应用程序面向 Windows 8.1,因此我选择了“Windows 8.1”。从列表中选择扩展,如前面的屏幕截图所示。现在您将获得适用于您的项目的 SDK 列表。从屏幕上可以看出,SQLite for Windows Runtime (Windows 8.1) 可在 NuGet Package Installer 的 SQLite 安装后列表中找到。

    现在检查/勾选两个选项 Microsoft Visual C++ 2013 Runtime Package for Windows 8.1 和 SQLite for Windows Runtime (Windows 8.1),如屏幕截图所示。然后点击“确定”。

    检查是否添加了引用。您可以看到添加了引用,但在这些添加的引用上显示了感叹号。如果您现在构建应用程序,您肯定会收到一些警告消息以及错误消息,并且构建失败并显示一些消息,如下所示。这是因为我们安装的 SQLite 不支持“Any CPU”处理器架构。

    现在将目标平台从“任何 CPU”更改为您的 CPU 架构。就我而言,CPU 架构是 x64。下面指定了检查 CPU 架构的过程。

    不确定这是否适用于 WPF 应用程序,但它适用于 Windows 商店应用程序。点击上面的链接查看详细信息和截图。

    希望这会帮助一些人;-)

    【讨论】:

      【解决方案3】:

      在我的情况下,我只需将项目构建设置为 x86x64 AND 将目标框架设置为 4。它没有使用更高的框架。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-09-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-10-13
        • 2015-04-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多