ModernHttpClient与Web Appication项目不兼容

时间:2019-01-07 23:45:06

标签: rest xamarin xamarin.android nuget

我目前正在使用Restclient通过xamarin的Web api发送请求,它在Windows和ios上都可以正常工作,但是我不适用于andriod,我搜索并找到了一个会帮助我的nuget包,名为ModernHttpClient,因此它更改了我的代码从var httpclient = new HttpClient();var httpClient = new HttpClient(new NativeMessageHandler());,但是当我为Web应用程序安装它时,我不断收到错误消息,指出软件包与项目不兼容。但它可以在android,ios和Windows中安装ok。我尝试从Web应用程序中卸载它,但除非代码出现在所有项目中,否则我不会在代码中工作。

所以我想找出该软件包与Web应用程序不兼容的原因,或针对Restclient请求无法在android上运行的解决方案不兼容的原因。

1 个答案:

答案 0 :(得分:1)

不幸的是,product page for modernhttpclient on nuget.org没有列出任何依赖关系,但是更改URL的域名以使用fuget.org instead of nuget.org列出了monoandroid,monotouch,Portable-net45 + winrt45 + wp8 + wpa81和xamarin。 ios10。因此,这些是程序包支持的目标框架。

检查软件包支持哪些TFM(目标框架别名)的另一种方法是查找/下载nupkg,然后将其作为zip文件打开,或使用NuGet Package Explorerlib/下查找子文件夹

您没有说Web应用程序使用的目标框架,但这是事情开始变得非常复杂的地方,我对此不太了解。 .NET Framework TFM与较低版本的其他.NET Framework TFM兼容。同样,.NET Core TFM与较低版本的其他.NET Core TFM兼容。 .NET Standard is a whole other complication。 NuGet还支持回退或替代TFM兼容性,以允许.NET Core应用程序使用针对.NET Framework的库,但这是一个最佳猜测,并且可能会在运行时失败(也许有可能无法编译,我不确定,但是恢复将成功并显示警告)。鉴于您没有得到警告,而是一个错误,它向我表明Portable-net45与net45不兼容,因此可能与您在Web应用程序中使用的任何目标框架都不兼容(除非您的Web应用定位到net40或更早版本。

说了这么多,当我查看程序包以了解它所针对的框架时,我看到了程序包的全部目的是使用平台本机HTTP堆栈,而不是移动平台上Xamerin的HTTP堆栈。您的Web应用程序不在移动平台上运行,而是在.NET Core或.NET Framework上运行,因此您不需要该软件包。建议您仅在Android和IOS上使用#if#else#endif来使用NativeMessageHandler,然后在其他平台上使用默认的HTTPClient构造函数(或使用HttpMessageHandler)。