Xamarin.iOS项目构建报错:无法解析System.ServiceModel.WSHttpBinding引用
解决Xamarin.iOS构建时System.ServiceModel.WSHttpBinding引用错误
我之前处理过类似的Xamarin.iOS构建问题,你的情况核心原因在于旧版ServiceStack和Xamarin.iOS对.NET Standard的依赖支持不匹配——Android能正常运行是因为它对旧.NET Framework组件的兼容层更宽松,但iOS的沙箱环境对这类依赖限制更严格。下面给你几个可行的解决方案,按优先级排序:
方案一:升级ServiceStack到兼容.NET Standard的版本
ServiceStack 3.9.71是非常老旧的版本(发布于2015年左右),根本没有适配.NET Standard 2.0,它依赖的是.NET Framework中的System.ServiceModel组件,而Xamarin.iOS的.NET Standard运行时并不包含WCF相关的WSHttpBinding类型。升级到支持.NET Standard的ServiceStack版本是最彻底的解决办法:
- 移除核心项目中所有旧版ServiceStack的引用(包括
ServiceStack、ServiceStack.Client等) - 通过NuGet安装
ServiceStack.Core和ServiceStack.Client(推荐v5.10.x及以上版本,完全兼容.NET Standard 2.0) - 检查代码中的API调用:v3到v5的ServiceStack有一些API变更,但基础的客户端调用逻辑变化不大,你可以根据官方的迁移说明调整代码
方案二:给iOS项目手动添加WCF相关NuGet包
如果暂时无法升级ServiceStack,可以尝试给iOS项目单独补充缺失的WCF依赖:
- 右键iOS项目 → 管理NuGet程序包
- 搜索并安装
System.ServiceModel.Http(选择4.5.x版本,和.NET Standard 2.0完全兼容) - 清理解决方案(删除bin/obj文件夹)后重新构建
注意:这个方法是临时 workaround,旧版ServiceStack和新版
System.ServiceModel.Http可能存在潜在兼容性问题,后续如果出现奇怪的运行时错误,还是建议回到方案一。
方案三:改用ServiceStack的轻量HTTP客户端
如果上面两种方法都不行,可以绕开WCF绑定,直接使用ServiceStack的原生JSON客户端调用服务,完全不需要依赖WSHttpBinding:
// 替换原来的WCF相关客户端代码 var client = new JsonServiceClient("https://你的Web服务地址"); var request = new YourServiceRequestDto { /* 填充请求参数 */ }; var response = await client.GetAsync<YourServiceResponseDto>(request);
这种方式更适配跨平台环境,而且代码更简洁,也避免了旧WCF组件的依赖问题。
额外排查步骤
- 检查核心项目的引用列表,确保没有直接引用
System.ServiceModel的旧版(比如3.0.0.0),所有依赖都通过NuGet管理 - 确认iOS项目的目标框架版本:至少选择Xamarin.iOS 12.0及以上,保证和.NET Standard 2.0的兼容性
- 清理并重新构建整个解决方案,有时候缓存的旧依赖会导致奇怪的引用错误
内容的提问来源于stack exchange,提问作者Santosh
相关产品推荐
相关产品推荐

