Xamarin iOS“链接时无法解析引用'System.ReadOnlyMemory'”

zd287kbt  于 2022-12-20  发布在  iOS
关注(0)|答案(1)|浏览(248)

链接我的Xamarin iOS应用程序时,我收到以下错误:

MTOUCH : error MT2101: Can't resolve the reference 'System.ReadOnlyMemory`1<System.Byte> Microsoft.AspNetCore.SignalR.Protocol.HandshakeProtocol::SuccessHandshakeData', referenced from the method 'System.Void Microsoft.AspNetCore.SignalR.HubConnectionContext/<WriteHandshakeResponseAsync>d__50::MoveNext()' in 'Microsoft.AspNetCore.SignalR.Common, Version=1.1.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60'.

根据微软的documentation,System.ReadOnlyMemory位于System.Runtime.dll中,因此我尝试将--linkskip System.Runtime添加到“附加mtouch参数”中,并将[assembly: Preserve(typeof(System.ReadOnlyMemory<Byte>), AllMembers = true)]添加到Application. Main中,但都没有任何效果。
我还尝试在Application.Main中添加引用System.ReadOnlyMemory<Byte>的代码。
我试过清理、删除所有obj/和bin/文件夹,然后重新构建。
如果我使用“不链接”,应用程序编译和工作正常,但我必须使用“仅链接框架SDK”才能部署到AppStore。
编辑:我相信我最初误读了错误消息。我现在看到引用错误是针对Microsoft.AspNetCore.SignalR.Protocol.HandshakeProtocol(这是一个System.ReadOnlyMemory类型的字段)。所以我尝试添加--linkskip Microsoft.AspNetCore.SignalR.Protocol[assembly: Preserve(typeof(Microsoft.AspNetCore.SignalR.Protocol.HandshakeProtocol), AllMembers = true)],但两者都没有任何效果。

编辑2:我想我已经将问题缩小到以下几点:

该项目包含对Microsoft.AspNetCore.SignalR和Microsoft. AspNetCore. SignalR.客户端的引用。
唯一可用于Microsoft.AspNetCore.SignalR的程序包是1.1.0版,其中包含对Microsoft.AspNetCore.SignalR.Common 1.1.0的引用。
该项目引用了Microsoft.AspNetCore.SignalR.客户端5.0.8,其中包括对Microsoft.AspNetCore.SignalR.通用5.0.8的引用。
显然,在1.1.0和5.0.8之间,Microsoft.AspNetCore.SignalR.Common有一个突破性的变化。
我 * 假设 * MTOUCH只保留一个版本的库,因此这就产生了我看到的问题。
我在探索我的选择。

juud5qan

juud5qan1#

这确实是Microsoft. AspNetCore. SignalR. Common的两个版本之间的冲突。我只能假设当不链接时两个版本都包括在内,但当链接时只包括最新的版本。
在我的例子中,我能够将冲突的引用移动到移动的应用程序不使用的另一个程序集,这样就解决了问题。
感谢Jason和ToolmakerSteve的评论,让我走上了解决方案的道路!

相关问题