首页 > 解决方案 > ModernHttpClient 与 Web Appication 项目不兼容

问题描述

我目前正在使用Restclient通过web api为xamarin发送请求,它适用于windows和ios但我不适用于andriod,我搜索并找到了一个有用的nuget包,称为ModernHttpClient,所以它将我的代码从var httpclient = new HttpClient();改为var httpClient = new HttpClient(new NativeMessageHandler());当我为 Web 应用程序安装它时,我不断收到一条错误消息,指出该包与项目不兼容。但它可以在 android、ios 和 windows 中安装。我尝试从 Web 应用程序中卸载它,但除非它出现在所有项目中,否则我不能在代码中工作。

所以我想找出包与 web appication 不兼容的原因或 Restclient 请求在 android 上不起作用的解决方案。

标签: restxamarinxamarin.androidnuget

解决方案


不幸的是,nuget.org 上modernhttpclient 的产品页面没有列出任何依赖项,但是将 URL 的域名更改为使用fuget.org 而不是 nuget.org列出了 monoandroid、monotouch、portable-net45+winrt45+wp8+wpa81、和 xamarin.ios10。因此,这些是包支持的目标框架。

检查包支持的 TFM(目标框架名字对象)的另一种方法是查找/下载 nupkg,然后将其作为 zip 文件打开,或者使用NuGet 包资源管理器查找lib/.

您没有说您的 Web 应用程序正在使用什么目标框架,但这是事情开始变得非常复杂的地方,我不太了解它。.NET Framework TFM 与其他较低版本的 .NET Framework TFM 兼容。同样,.NET Core TFM 与其他较低版本的 .NET Core TFM 兼容。.NET Standard 是另一个复杂的问题. NuGet 还支持回退或备用 TFM 兼容性,以允许 .NET Core 应用程序使用面向 .NET Framework 的库,但这是最好的猜测,并且可能在运行时失败(甚至可能无法编译,我不确定,但是恢复将成功并出现警告)。鉴于您没有收到警告,而是出现错误,它向我表明,portable-net45 与 net45 不兼容,因此可能与您在 Web 应用程序中使用的任何目标框架都不兼容(除非您的 Web应用程序的目标是 net40 或更早)。

说了这么多,当我查看包以查看它针对哪些框架时,我看到包的全部意义在于使用平台原生 HTTP 堆栈,而不是 Xamerin 在移动平台上的 HTTP 堆栈。您的 Web 应用程序不是在移动平台上运行,而是在 .NET Core 或 .NET Framework 上运行,因此您不需要该包。我建议你使用#if, #elseand#endif只在 Android 和 IOS 上使用 NativeMessageHandler,然后在其他平台上使用默认的 HTTPClient 构造函数(或使用 HttpMessageHandler)。


推荐阅读