Xamarin iOS链接时遇System.ReadOnlyMemory引用解析错误求助
解决Xamarin iOS链接时MT2101错误(SignalR版本依赖冲突)
问题场景
链接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'.
应用在“不链接”模式下可正常运行,但必须使用“仅链接框架SDK”模式才能部署到App Store。尝试过--linkskip参数、添加Preserve特性、显式引用相关类型、清理重建等操作均无效,最终排查出核心原因:项目同时引用了Microsoft.AspNetCore.SignalR 1.1.0(依赖Microsoft.AspNetCore.SignalR.Common 1.1.0)和Microsoft.AspNetCore.SignalR.Client 5.0.8(依赖Microsoft.AspNetCore.SignalR.Common 5.0.8),两个版本的Common库存在破坏性变更,链接器处理时仅保留一个版本,导致引用缺失。
解决方案
1. 统一SignalR相关包版本(优先推荐)
版本不一致是问题根源,最稳妥的方式是将服务端和客户端包统一到同一版本:
- 若项目兼容,升级Microsoft.AspNetCore.SignalR到5.0.8版本,与客户端版本匹配;
- 若项目只能使用1.1.0版本的SignalR,降级Microsoft.AspNetCore.SignalR.Client到1.1.0版本。
操作步骤:
- 在NuGet包管理器中卸载所有Microsoft.AspNetCore.SignalR相关包;
- 重新安装同版本的
Microsoft.AspNetCore.SignalR和Microsoft.AspNetCore.SignalR.Client; - 清理项目的
obj/和bin/文件夹后重新构建。
2. 强制程序集版本绑定(兼容场景备选)
若确实无法统一版本,可通过程序集绑定重定向强制运行时使用指定版本的Microsoft.AspNetCore.SignalR.Common:
- 在项目的配置文件(如
App.config)中添加以下配置:<runtime> <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> <dependentAssembly> <assemblyIdentity name="Microsoft.AspNetCore.SignalR.Common" publicKeyToken="adb9793829ddae60" culture="neutral" /> <!-- 重定向到你希望使用的版本,示例为5.0.8.0 --> <bindingRedirect oldVersion="0.0.0.0-5.0.8.0" newVersion="5.0.8.0" /> </dependentAssembly> </assemblyBinding> </runtime> - 注意:此方式存在兼容性风险,不同版本的Common库可能有API差异,需完成全面测试后再部署。
3. 优化链接器策略(配合版本统一使用)
版本统一后若仍有链接问题,可调整链接器规则:
- 在Xamarin iOS项目的“Additional mtouch arguments”中添加:
--linkskip Microsoft.AspNetCore.SignalR.Common - 在
Application.Main所在的类文件中添加Preserve特性:[assembly: Preserve(typeof(Microsoft.AspNetCore.SignalR.Protocol.HandshakeProtocol), AllMembers = true)]
内容的提问来源于stack exchange,提问作者code65
相关产品推荐
相关产品推荐

