【问题标题】:Unable to load DLL 'sqlite3': The specified module could not be found无法加载 DLL 'sqlite3':找不到指定的模块
【发布时间】:2017-10-08 05:47:25
【问题描述】:

让我的测试针对我的 SQLite 数据提供程序运行,我有一段时间了。

我查看了建议的链接 here on stackoverflow,但似乎没有一个能让我走上正确的道路。

我已经下载了 Windows Precompiled Binaries for sqlite3.dll

我已将 sqlite3.dll 复制到我的 Sqlite\bin 目录和我的 Tests\bin 目录中

不幸的是,当我运行测试时,出现以下错误

是否有一种明确的方法可以在我的 Windows 开发环境(目前的主要目标)以及在 Android 和 IOS(不久的将来需要)中运行它?

另外,如果重要的话,这里是我的 Sqlite 项目参考。

【问题讨论】:

  • 在我看来,程序集需要驻留在输出目录中,而不是 bin 目录中。
  • 您正在使用“复制本地”(dll 属性)是吗?
  • 将 dll 移动到 bin\debug 目录会产生一个新错误 System.BadImageFormatException : An attempt was made to load a program with an incorrect format. (Exception from HRESULT: 0x8007000B) 看起来它与 x86/x64 相关
  • 看起来好像我需要使用Sqlite.Interop.dll 文件,并将其重命名为sqlite3.dll。现在我要遇到的唯一问题是构建是否在不同的平台 x8x / x64 上运行

标签: c# dll sqlite


【解决方案1】:

所以对我来说答案很简单。我连接了一个 Pre-Build 事件来检查机器的架构,并将适当的 dll 复制到输出 bin 目录中。

现在我们团队中的任何人都可以简单地运行REBUILD,并且可以使用正确的 dll 来针对 SQLite 运行。

if '$(PROCESSOR_ARCHITECTURE)'=='AMD64' (xcopy /y "$(ProjectDir)x64\sqlite3.dll" ".\") 
if '$(PROCESSOR_ARCHITECTURE)'=='x86' (xcopy /y "$(ProjectDir)x86\sqlite3.dll" ".\")
if '$(PROCESSOR_ARCHITEW6432)'=='AMD64' (xcopy /y "$(ProjectDir)x64\sqlite3.dll" ".\")

【讨论】:

    【解决方案2】:

    当我添加以下库时,错误消失了

    1. Microsoft Visual C++ 运行时包 (V11.0)
    2. 适用于 Windows 运行时的 SQLite (V3.8.7.1)

    【讨论】:

      【解决方案3】:

      无法将其放入 cmets,所以这是我得到的:

      另外,看看Similar problem

      最后但同样重要的是,您是否尝试添加对 SQLite.Iinetrop.dll 的引用(在引用中)? 引用 -> 添加 -> 只需浏览到您的 SQLite 所在的位置,选择查看全部,然后添加对 Interop.dll 的引用)

      【讨论】:

      • 我的项目不能直接从 nuget 使用 dll。我们使用的是不同版本的 Mono.Data.Sqlite,并且 sqlite3.dll 不能在项目中引用,因为它不是 .net dll。
      • 你不能用references->add添加SQLite.Interop.dll。这是因为 SQLite.Interop.dll 是非托管的,因此无效。
      【解决方案4】:

      我正在使用 VS2017 并通过添加以下任务来复制程序集解决了这个问题。

      <Target Name="Ensure SQLite assemblies copied" AfterTargets="Build" Condition=" '$(Platform)' == 'x64' ">
        <Copy SourceFiles="$(OutDir)x64\SQLite.Interop.dll" DestinationFolder="$(OutDir)" />
      </Target>
      

      【讨论】:

        猜你喜欢
        • 2016-07-31
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-07-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多