Тип или пространство имен Http не существует в пространстве имен Flurl

Начиная новый проект Portable Class Library, я добавил пакет Flurl.Http NuGet. , который, как и ожидалось, также отключил все свои зависимости.

Однако, когда я добавляю директиву using Flurl.Http и некоторый простой код, такой как

using System.Threading.Tasks;
using Flurl;
using Flurl.Http;

public class ClientRepository
{
    public async Task<string> Connect()
    {
        var result = await "http://example.com"
            .AppendPathSegment("/login")
            .PostUrlEncodedAsync(new { username = "you", password = "password" }).ReceiveJson();
        return result.token;
    }
}

Я получаю ошибку компиляции

Имя типа или пространства имен «Http» не существует в пространстве имен «Flurl» (вам не хватает ссылки на сборку?)

Странно, что intellisense без проблем распознает пространство имен .Http или методы расширения (PostUrlEncodedAsync)

Что я мог упустить из этого самого простого из проектов PCL?

Возможно, мой файл package.config был бы полезен, так что вот он:

<packages>
  <package id="Flurl" version="1.0.5" targetFramework="portable-net45+sl50+MonoAndroid10+xamarinios10+MonoTouch10" />
  <package id="Flurl.Http" version="0.4.1" targetFramework="portable-net45+sl50+MonoAndroid10+xamarinios10+MonoTouch10" />
  <package id="Microsoft.Bcl" version="1.1.9" targetFramework="portable-net45+sl50+MonoAndroid10+xamarinios10+MonoTouch10" />
  <package id="Microsoft.Bcl.Async" version="1.0.168" targetFramework="portable-net45+sl50+MonoAndroid10+xamarinios10+MonoTouch10" />
  <package id="Microsoft.Net.Http" version="2.2.22" targetFramework="portable-net45+sl50+MonoAndroid10+xamarinios10+MonoTouch10" />
  <package id="Newtonsoft.Json" version="6.0.3" targetFramework="portable-net45+sl50+MonoAndroid10+xamarinios10+MonoTouch10" />
  <package id="PCLStorage" version="0.9.6" targetFramework="portable-net45+sl50+MonoAndroid10+xamarinios10+MonoTouch10" />
</packages>

person Ralph Shillington    schedule 27.01.2015    source источник
comment
Я только что создал PCL, импортировал Flurl и скомпилировал без проблем. Однако мой package.config НЕ совпадает с вашим. Несмотря на то, что он имеет тот же идентификатор и версии, целевая структура — Portable-net45+win+wpa81+wp80, поэтому я предполагаю, что именно в этом и заключается ваша проблема. Возможно, вы захотите отредактировать свой вопрос, чтобы точно указать, какие типы проектов/IDE/расширения вы используете, поскольку у меня нет возможности выбрать эту платформу из коробки в VS Ultimate 2013 Update 4.   -  person rism    schedule 28.01.2015
comment
Я также должен добавить, что когда я добавлял Flurl в консольное приложение, он специально просил меня добавить ссылку на System.Net.Http. Теперь, когда я Google Mono System.Net.Http, я получаю множество результатов о несовместимости Mono и Xamarin с System.Net.Http. Новые сообщения предполагают, что это было исправлено, но это была проблема примерно в 2013 году, поэтому я начал искать проблемы. Будьте удивлены, если подробный режим в окне вывода не даст вам точной проблемы.   -  person rism    schedule 28.01.2015


Ответы (1)


Мне удалось воспроизвести, используя комбинацию целевых платформ, полученную из вашего packages.config (очень полезно). Похоже, проблема связана с Silverlight 5. В какой-то момент это работало; я подозреваю, что его поддержка была прекращена в одной из зависимых библиотек, хотя я еще не подтвердил это.

В любом случае, если вы можете обойтись без поддержки SL5 (а, возможно, и не можете), я подтвердил, что новый PCL, предназначенный для всех остальных, для которых задокументирована поддержка Flurl.Http, действительно строится с вашим кодом:

Поддержка Flurl.Http PCL

(Примечание: я столкнулся с проблемами, пытаясь изменить цели PCL в существующих проектах — вы можете избавить себя от некоторых головных болей, начав с чистого листа.)

Приносим извинения за неудобства. Я обновлю список поддерживаемых целей в документах. Я приветствую любые предложения / запросы на вытягивание, чтобы заставить его работать с SL5.

person Todd Menier    schedule 28.01.2015
comment
Просто примечание: я не мог отключить Silverlight5, если не выбрал Windows 8, но как только я это сделал, да, я смог его скомпилировать. Моя основная цель — Xamarin.iOS, хотя я также надеялся использовать Silverlight. Мне будет интересно услышать, можно ли с этим разобраться. - person Ralph Shillington; 28.01.2015