ModernHttpClient не совместим с проектом веб-приложений - PullRequest
0 голосов
/ 08 января 2019

В настоящее время я использую Restclient для отправки запроса через веб-интерфейс для xamarin, он хорошо работает с Windows и IOS, но я не работаю для andriod, я искал и нашел пакет nuget, который поможет ModernHttpClient, поэтому он меняет мой код от var httpclient = new HttpClient(); до var httpClient = new HttpClient(new NativeMessageHandler());, но при установке его для веб-приложения появляется сообщение об ошибке, в котором говорится, что пакет не совместим с проектом. но он устанавливает нормально в Android, IOS и Windows. я попытался удалить его из веб-приложения, но я не работаю в коде, если он не появляется во всем проекте.

поэтому я хочу найти причину, по которой пакет не совместим с веб-приложением или решение запроса Restclient не работает на Android.

1 Ответ

0 голосов
/ 08 января 2019

К сожалению, страница продукта для modernhttpclient на nuget.org не перечисляет никаких зависимостей, но при изменении доменного имени URL-адреса вместо * nuget.org используется fuget.org. перечисляет monoandroid, monotouch, portable-net45 + winrt45 + wp8 + wpa81 и xamarin.ios10. Следовательно, это целевые платформы, которые поддерживает пакет.

Другой способ проверить, какие TFM (псевдонимы целевой структуры) поддерживает пакет, - найти / скачать nupkg, а затем открыть его в виде zip-файла или использовать NuGet Package Explorer для поиска подпапок в lib/.

Вы не сказали, какую целевую среду использует ваше веб-приложение, но именно здесь все становится очень сложным, и я не очень хорошо понимаю это. TFM .NET Framework совместимы с другими TFM .NET Framework более ранних версий. Точно так же .NET Core TFM совместимы с другими .NET Core TFM более ранних версий. .NET Standard - это совсем другое осложнение . NuGet также поддерживает резервную или альтернативную совместимость с TFM, чтобы приложения .NET Core могли использовать библиотеки, нацеленные на .NET Framework, но это лучшее предположение и может произойти сбой во время выполнения (возможно, даже не удастся скомпилировать, я не уверен, но восстановление будет успешным с предупреждением). Поскольку вы получаете не предупреждение, а сообщение об ошибке, он подсказывает мне, что portable-net45 не совместим с net45 и, следовательно, вероятно, не совместим с какой-либо целевой платформой, которую вы используете со своим веб-приложением (если только вы не приложение нацелено на net40 или более раннюю версию).

Сказав все это, когда я смотрел на пакет, чтобы увидеть, на какие платформы он нацелен, я увидел, что весь смысл пакета в том, чтобы использовать собственный HTTP-стек платформы, а не HTTP-стек Xamerin на мобильных платформах. Ваше веб-приложение не работает на мобильной платформе, оно работает на .NET Core или .NET Framework, поэтому вам не нужен пакет. Я предлагаю вам использовать #if, #else и #endif, чтобы использовать NativeMessageHandler только на Android и IOS, а затем использовать конструктор HTTPClient по умолчанию (или использовать HttpMessageHandler) на других платформах.

...