【问题标题】:Build Problems with SQLite-WinRT WrapperSQLite-WinRT Wrapper 的构建问题
【发布时间】:2015-08-21 17:15:21
【问题描述】:

在添加 SQLite-WinRT 数据库包装器后,我无法为 ARM 目标构建应用程序。我可以用一个简单的测试应用程序重现这一点,如下所示:

(这是在 Visual Studio 2013 中完成的。)

  1. 创建一个空的 Windows 8.1 通用应用 (WinRT)
  2. 使用 下载 SQLite for Windows Phone 8.1SQLite for Windows Runtime (Windows 8.1)工具/扩展和更新。将它们添加到相应项目的引用中。
  3. 使用 NuGet,将 SQLite-WinRT 包添加到每个项目。
  4. 为 x86(本地机器或手机模拟器)构建 -> 没问题。
  5. 为 ARM(电话设备)构建 -> 构建错误如下所示(独立于调试或发布构建)。

正在构建的项目的处理器架构“ARM”与实现文件“C:\Users\jr\Documents\Visual Studio 2015\Projects\sqlite-”的处理器架构“x86”不匹配test\packages\Sqlite-Winrt.3.8.7.1\lib\wpa81\SQLiteWinRT.dll" 为 "C:\Users\jr\Documents\Visual Studio 2015\Projects\sqlite-test\packages\Sqlite-Winrt.3.8.7.1 \lib\wpa81\SQLiteWinRT.winmd”。这种不匹配可能会导致运行时失败。请考虑通过配置管理器更改项目的目标处理器架构,以便在您的项目和实现文件之间对齐处理器架构,或者选择一个 winmd 文件,该文件的实现文件的处理器架构与您的目标处理器架构相匹配项目。

我发布了一个小测试项目here(Windows Phone 8.1 空项目,添加 SQLite,通过 NuGet 添加 SQLite-WinRT)。

【问题讨论】:

  • 试试这个。转到您的 Bulid 配置管理器并将您的 windows 和 windows phon 的平台设置为 ARM。
  • 谢谢,但事实并非如此。当我说“为 ARM 构建”时,我实际上是指将平台目标设置为 ARM。
  • 同样的事情发生在我身上。一些我的项目的构建设置目标平台如何设置为任何出现此问题的 CPU,即使我的构建设置是 ARM
  • 我会为您的答案 +1,因为它是在具有相同症状的类似情况下的有效解决方案。不幸的是它不能解决我的问题,所以我让它保持打开状态。
  • @MuhammadSaifullah 我创建了一个小型测试项目(参见上面的链接)。如果您能发现我忽略、误解的配置错误……请指出,赏金是您的。

标签: sqlite windows-runtime windows-phone-8.1 winrt-xaml


【解决方案1】:

转到项目属性打开构建选项卡并将目标平台设置为 ARM

编辑 您已添加 WinRt sqlite。它是在 x86 上构建的,当您想在 ARM 进程架构上构建它时,它无法构建,您需要删除 WinRTSQlite dll,这样您的项目才能正常工作。这里是Code

希望对你有帮助

【讨论】:

  • 谢谢。但正如在 frenk91 的回答下已经讨论过的那样,消除问题的主题并不是解决方案。根据sqlwinrt.codeplex.com Windows phone 的项目页面,因此该 NuGet 包应该支持 ARM 目标。我完全同意:我似乎做错了什么,但这是什么?
  • 这个答案在早期版本中获得了两个“有用”的投票。当前的没有意义。
【解决方案2】:

解决 NuGet 包问题的一种方法是将 sqlite-winrt 源添加到您的手机或通用应用程序中。

  1. 如果尚未完成,请在工具 -> 扩展和更新中安装适用于 Windows Phone 8.1(以及通用 Windows 运行时 (Windows 8.1))的 SQLite
  2. 添加对各个项目的引用
  3. 为 sqlite-winrt 包装器下载 sources
  4. 将 SQLiteWinRTPhone81(RT)(和 SQLiteWinRT81,如果需要)文件夹复制到您的解决方案中
  5. 在 Visual Studio 中将项目添加到您的解决方案中(右键单击解决方案 -> 添加 -> 现有项目
  6. 添加对各个项目的引用
  7. 编辑 sqlite-winrt 项目的引用以指向正确版本的 SQLite(右键单击项目 -> Properties -> Common Porperties -> References):添加引用到您项目中的当前 SQLite 版本并删除旧参考
  8. 构建您的解决方案

【讨论】:

    【解决方案3】:

    我已经下载了你的项目,在参考资料中我发现你正在使用 SQLite-WinRT 和 sqlite for windows phone 8.1,你不需要两者。

    一旦您删除 SQLite-WinRT,您的项目就会开始编译。

    编辑:

    在通用应用程序中,您只需添加正确的引用,如果是手机项目,只需为 windows phone 8.1 添加 sqlite,而不是在 windows 8.1 应用程序上仅添加 SQLite-WinRT

    【讨论】:

    • SQLiteWinRT 是数据库包装器。如果我删除它,我必须自己写,我对此没有足够的信心。
    • 你不需要包装器,只需添加这个 nuget 包nuget.org/packages/sqlite-net/1.0.8
    • 那将是另一个包装器,也是一个可行的替代方案。我发现 sqlite-winrt 更适合我的目的。
    • 没有办法使用 sqlite-winrt,因为它不包含 ARM 的版本。我在我的任何项目中都使用过 sqlite-net,您可以在 github github.com/praeclarum/sqlite-net 上找到文档。
    • 更具体地说明我的选择(我现在实际上正在使用 sqlite.net):我在我的应用程序中使用了 sqite.net 不支持的数据类型。为了将它们转换为 SQLite 支持的类型,我需要修改 sqlite.net,这会导致新的问题。此外,考虑到针对不同平台的编码和可维护性,Android 和 iOS 上没有与 sqlite.net 类似的东西。
    猜你喜欢
    • 2020-12-08
    • 1970-01-01
    • 1970-01-01
    • 2020-12-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-12
    • 1970-01-01
    相关资源
    最近更新 更多