无法加载DLL文件 'sqlite3':找不到指定的模块

3

我在运行我的SQLite数据提供程序的测试时遇到了麻烦。

我查看了这里关于此问题的建议链接,但似乎都没有让我找到正确的解决路径。

我已经下载了Windows预编译二进制文件sqlite3.dll

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

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

failed test

有没有明确的方法可以使Windows开发环境(现在的主要目标)以及Android和IOS(将来需要)正常工作?

另外,如果有影响的话,这是我的Sqlite项目参考。

enter image description here


2
在我看来,汇编需要驻留在输出目录中,而不是“bin”目录中。 - Mike Perrenoud
你是否使用了“复制本地”(dll属性)的true? - Jhonatas Kleinkauff
将dll文件移动到bin\debug目录会产生一个新的错误System.BadImageFormatException: 尝试加载格式不正确的程序。(HRESULT异常: 0x8007000B)看起来与x86/x64有关。 - Chase Florell
https://dev59.com/9W445IYBdhLWcg3wq8Lp没有帮助吗? - Ken White
似乎我需要使用 Sqlite.Interop.dll 文件,并将其重命名为 sqlite3.dll。现在唯一的问题是,如果在不同的 x8x / x64 平台上运行构建,我会遇到问题。 - Chase Florell
显示剩余2条评论
4个回答

5

这对我来说很简单。我连接了一个预构建事件,检查机器的架构,并将相应的dll复制到输出二进制目录中。

现在我们团队中的任何人都可以简单地运行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" ".\")

3
当我添加以下库时,错误消失了:
  1. Microsoft Visual C++ 运行时包(V11.0)
  2. SQLite for Windows Runtime(V3.8.7.1)

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


0

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

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

0

无法将这个放进评论,所以这就是我得到的:enter image description here

另外,请查看类似的问题

最后,但并非最不重要的,您尝试添加对SQLite.Inetrop.dll的引用(在引用中)? References -> add -> just browse to where your SQLite is, select view all, and add a reference to the Interop.dll as well)


我的项目不能直接使用NuGet中的dll。我们正在使用不同版本的Mono.Data.Sqlite,而sqlite3.dll无法在项目中引用,因为它不是一个.NET的dll。 - Chase Florell
1
您不能使用引用->添加的方式添加SQLite.Interop.dll。这是因为SQLite.Interop.dll是非托管的,因此无效。 - sapbucket

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接