Xamarin.Forms PCL组件问题

5

我正在使用Xamarin.Forms和sqlite-pcl包开发一个多平台的PCL应用程序,如此示例所示。

警告 PCL库的NuGet网站在左侧包含错误的链接,当您进入“项目网站”时,它会指向SQLite-net网站...所以我甚至不知道正确的Sqlite-PCL链接是什么...

在今天早上之前,它运行得非常正常,当我尝试安装其他软件包时(请注意,一开始我没有触及sqlite软件包),突然间我的应用程序在第一次访问数据库时崩溃了,说:

System.IO.FileLoadException: '无法加载文件或程序集“SQLite-net,Version=1.4.118.0,Culture=neutral,PublicKeyToken=null”。所定位的程序集清单定义与程序集引用不匹配。(HRESULT 异常:0x80131040)'
好的,我开始在论坛上搜索,试图找出可能是问题来源的部分 - 什么都没帮助 - 卸载和重新安装包,重启,手动删除找到的所有对该dll的引用并重新编译、重新部署... 我实际上被卡住了,我尝试使用Fuslogvw但没有成功... 我对此非常绝望 - 有什么建议可以帮我找到问题的根源吗?
技术细节: - VS Community 2017 - 构建配置:Debug - Any CPU - UWP on locale maching - 还有其他相关数据吗?
好的,在经过几个小时的搜索后,感谢@yuri-s的帮助,我重新安装了SQLite.Net.Async-PCL包。我不得不更新一些using子句,但最终,我似乎已经解决了问题。
然而,我卡在了最后一个点上:我需要在这个特定的库中使用特定平台的程序集创建DB连接 - 但我找不到建议的方法here(最后一篇帖子)中的代码。但我无法弄清楚每个操作系统的依赖接口应该获取什么代码(SQLite.Net.Platform似乎不存在于该包中)。
总的来说,SQLite-PCL包非常令人困惑 - 我认为社区会从它们的明确区分中受益...!

抱歉英文不好。请检查这些其他软件包是否与您的sqlite-net版本有共享依赖关系。也许它已经更新了该依赖关系并且搞乱了一切。 - Diego Rafael Souza
1
今天我更新了NuGet包后也发生了同样的事情。你的回答解决了我的问题 - 谢谢。 - Joe Mayo
4个回答

4

安装sqlite-net-pcl 1.3.3版本(不是当前版本)

当前的版本1.4.118.0存在这个问题。


2
有关不同版本的PCL似乎存在相当多的混淆......
我成功地通过教程来使其工作。
要记住的关键点:
  1. 为所有项目安装SQLite.NET.Async-PCL v3.1.1(通过解决方案中的"管理NuGet程序包"仅安装一次)。
  2. 为所有项目安装SQLite.NET-PCL v3.1.1(需要通过NuGet控制台逐个安装),请注意:确保它安装在正确的项目上(否则,它会抱怨该程序包已经存在)。
  3. 对于UWP,还需要添加UWP的Visual Studio扩展,并通过引用->添加手动添加引用。
所以,所有这些,最终成功了 - 因此不匹配是出现在1和2的包之间(更新1意味着也应该更新2中的各个包)......
希望这能帮助任何对SQlite包感到困惑的人(并且,注意问题中的警告 - 在NuGet Library页面上链接到项目页面是不正确的!!!)

2

我在Github上报告了这个问题。

这个问题应该已经在1.5.166-beta版本中得到解决。


1.5.166-beta 仍未修复。 - hushyon
1
我尝试了1.5.166-beta版本,它可以在UWT上运行,但无法在Android上运行 :( - Adrian Hedley

0

问题已解决,之前使用 "sqlite-net-pcl -Version 1.4.118" 出现了同样的问题,由于 .net v4.5 版本无法降级,因此无法解决。

升级到 beta 版本 sqlite-net-pcl -Version 1.5.166-beta,问题得以解决。


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