【问题标题】:Unable to load DLL sqlite3 in Universal Windows App running on Mobile无法在移动设备上运行的通用 Windows 应用程序中加载 DLL sqlite3
【发布时间】:2015-10-29 07:42:49
【问题描述】:

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

异常消息:

消息“'SQLitePCL.raw' 的类型初始化程序抛出了一个 异常。”字符串

内部异常消息:

{"无法加载 DLL 'sqlite3': 指定的模块不能被 成立。 (来自 HRESULT 的异常:0x8007007E)“} System.Exception {System.DllNotFoundException}

当然,我无法为“通用应用平台的 Sqlite”添加参考,因为我收到以下错误

严重性代码描述项目文件行错误有效负载包含 具有相同目标路径“sqlite3.dll”的两个或多个文件。资源 文件:C:\Program Files (x86)\Microsoft SDKs\UAP\v0.8.0.0\ExtensionSDKs\SQLite.UAP.2015\3.8.11.1\Redist\Debug\ARM\sqlite3.dll C:\Users\sMavrikis.nuget\packages\SQLitePCL.raw_basic\0.7.1\build\native\sqlite3_dynamic\winrt81\arm\sqlite3.dll TestApp1

【问题讨论】:

    标签: sqlite sqlite-net uwp


    【解决方案1】:

    添加对“通用应用平台的 SQLite”的引用 这将触发错误:

    有效负载包含两个或多个具有相同目标路径“sqlite3.dll”的文件。

    出现此错误是因为错误标记的两个位置的 sqlite3.dll 版本不同。 只需复制即可解决此错误

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

    C:\Users\%USERNAME%\.nuget\packages\SQLitePCL.raw_basic\0.7.1\build\native\sqlite3_dynamic\winrt81\arm\sqlite3.dll

    覆盖现有文件。

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

    【讨论】:

    • 谢谢。这对我有帮助。我有不同的方法。可以在错误信息中看到。
    • 如上所述,您必须在您自己的错误中指出的文件夹之间进行复制(它们对我来说是不同的)。使我的应用程序编译的原因是从程序文件复制到包文件夹。另请注意,此解决方案并不总是有效(我尝试了两个不同的应用程序,但它只适用于其中一个)
    • 这为我解决了谢谢。那么这对其他导入项目的人来说不会是个问题吗?
    【解决方案2】:

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

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

    【讨论】:

    • 这个答案帮助我注意到我引用的是 Microsoft Visual C++ 2013 Runtime Package 而不是 Visual C++ 2015 Runtime for Universal Windows 包。修复引用为我解决了问题。
    【解决方案3】:

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

    【讨论】:

      【解决方案4】:

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

      【讨论】:

        【解决方案5】:

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

        错误负载包含两个或多个具有相同目标路径“e_sqlite3.dll”的文件。源文件: C:\Users\xleon.nuget\packages\SQLitePCLRaw.lib.e_sqlite3.v140\1.1.0\runtimes\win10-arm\native\e_sqlite3.dll C:\Users\xleon.nuget\packages\sqlitepclraw.lib.e_sqlite3.v140\1.1.0\runtimes\win10-x86\native\e_sqlite3.dll

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

        【讨论】:

          【解决方案6】:

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

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

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

          【讨论】:

            【解决方案7】:

            我设法通过在 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 设计器会因“找不到 SQLite.dll...”而崩溃

            【讨论】:

              猜你喜欢
              • 2018-09-06
              • 2017-05-11
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多