无法在移动设备上的通用 Windows 应用程序 运行 中加载 DLL sqlite3

Unable to load DLL sqlite3 in Universal Windows App running on Mobile

我正在开发 UWP。我正在使用 sqlite-net-pcl 库。将我的应用程序从 RC 升级到 RTM 后,出现运行时错误 - sqlite3.dll 找不到 - 如果它在移动模拟器或设备上运行。在我添加对 C++ 2013 Runtime Package 的引用并在本地计算机中 运行 它后,它完美地工作了。

异常消息:

Message "The type initializer for 'SQLitePCL.raw' threw an exception." string

内部异常消息:

{"Unable to load DLL 'sqlite3': The specified module could not be found. (Exception from HRESULT: 0x8007007E)"} System.Exception {System.DllNotFoundException}

当然,我无法向 'Sqlite for Universal App Platform' 添加引用,因为我收到以下错误

Severity Code Description Project File Line Error Payload contains two or more files with the same destination path 'sqlite3.dll'. Source files: C:\Program Files (x86)\Microsoft SDKs\UAP\v0.8.0.0\ExtensionSDKs\SQLite.UAP.2015.8.11.1\Redist\Debug\ARM\sqlite3.dll C:\Users\sMavrikis.nuget\packages\SQLitePCL.raw_basic[=14=].7.1\build\native\sqlite3_dynamic\winrt81\arm\sqlite3.dll TestApp1

添加对 'SQLite for Universal App Platform' 的引用 这将触发错误:

Payload contains two or more files with the same destination path 'sqlite3.dll'.

此错误是由于错误标记的两个位置中的 sqlite3.dll 版本不同所致。 只需复制

即可解决此错误

C:\Program Files (x86)\Microsoft SDKs\UAP\v0.8.0.0\ExtensionSDKs\SQLite.UAP.2015.8.11.1\Redist\Debug\ARM\sqlite3.dll

C:\Users\%USERNAME%\.nuget\packages\SQLitePCL.raw_basic[=12=].7.1\build\native\sqlite3_dynamic\winrt81\arm\sqlite3.dll

覆盖现有文件。

重建您的项目。现在应该可以编译了。

我收到了相同的错误消息。我从使用 SQLite-PCL 开始,它也需要 SQLite for Universal App Platform 作为参考。后来我换成了SQLite.Net-PCL。那是我收到这些错误的时候。在研究解决方案时,我找到了这个页面。它工作了一点。最终,我删除了通用应用程序平台对 SQLite 的引用,错误消失了。

晚回复,但现在有问题;对我来说解决这个问题的方法是对解决方案中的所有项目进行 Nuget 包更新,因为其中一个包仍在使用旧引用,并且一直在引用另一个过时的项目的 运行 项目.

如果您查看这两个相互冲突的位置,一个似乎来自更官方的 Microsoft UWP 扩展,而第二个来自 nuGet 包。

当我遇到这个错误时,我需要 nuGet 包的功能,所以我决定保留它并放弃其他参考。我右键单击解决方案资源管理器中的项目并转到添加-> 引用,然后取消选中对 SQLite 的引用。对我来说,似乎比将文件从一个位置复制到另一个位置更不容易出错。

我通过在编译器配置中选择 x64 或 arm 解决了类似的问题。

Error Payload contains two or more files with the same destination path 'e_sqlite3.dll'. Source files: C:\Users\xleon.nuget\packages\SQLitePCLRaw.lib.e_sqlite3.v140.1.0\runtimes\win10-arm\native\e_sqlite3.dll C:\Users\xleon.nuget\packages\sqlitepclraw.lib.e_sqlite3.v140.1.0\runtimes\win10-x86\native\e_sqlite3.dll

但这当然不允许您 运行 模拟器

右键单击 UWP 项目并选择“属性”。

并确保解决方案平台目标与项目平台目标匹配。

如果它们不同,您将收到有关将文件复制到具有相同名称(但目标平台不同)的相同目的地的构建错误。

我通过在 UWP .csproj 中加入一个包含 SQLite dll 的条件来设法解决差异

<SDKReference Include="SQLite.UWP.2015, Version=3.19.3" Condition="'$(Configuration)'=='Debug'">
  <Name>SQLite for Universal Windows Platform</Name>
</SDKReference>

我需要 运行 使用 UWP 版本进行调试,否则我的 XAMl 设计师会因 "Can't find SQLite.dll..."

而崩溃