Как я узнаю, требуют ли проекты платформы также пакета NuGet

#nuget #nuget-package

#nuget #nuget-package

Вопрос:

В моем решении у меня есть проект PCL и два других проекта, каждый для разных платформ.

Иногда пакет NuGet, используемый в PCL, также требует его установки в проект платформы, иначе во время выполнения произойдет сбой.

Когда я устанавливаю пакет NuGet, как это сделать, если также требуется установить его в проекты платформы?

Например, мне неясно, требует ли Microsoft.Net.Http также установки в Xamarin Android project или нет. Это всего лишь пример.

Или я не знаю, требует ли SQLite.Net-PCL его установки и в проектах платформы.

Ответ №1:

Что вы можете сделать:

  • Прочитайте документацию, предоставленную автором пакета NuGet. Либо с веб-сайта проекта, либо в описании пакета NuGet.
  • Используйте свою любимую поисковую систему для получения примеров использования этого пакета NuGet.
  • Если существует несколько пакетов NuGet, которые названы в честь платформы, это дает вам представление о том, что пакет PCL NuGet может не работать в проекте, зависящем от платформы.
  • Загляните в пакет NuGet, используя что-то вроде NuGet Package Explorer, доступного в Windows. Если пакет NuGet содержит каталоги lib, зависящие от платформы, а также каталог PCL, его необходимо будет установить в проект, зависящий от платформы.
  • Запустите свое приложение и посмотрите, работает ли оно.

В качестве примера возьмем Microsoft.Net.Http. В документации на самом деле явно не указано. Если вы поищете в Интернете, вы можете найти одно или два сообщения в блоге, в которых упоминается, что вы должны установить его в свой проект, специфичный для вашей платформы.

Если вы заглянете внутрь пакета Microsoft.Net.Http NuGet, вы увидите, что в нем есть несколько каталогов lib:

Каталоги библиотек Microsoft.Net.Http NuGet

Существуют каталоги, зависящие от платформы, такие как MonoAndroid и Xamarin.iOS10, а также каталоги PCL, такие как portable-net45 win8. Это предполагает, что вы должны установить его во все свои проекты.

Комментарии:

1. Спасибо, Мэтт. Хотелось бы, чтобы это было проще. Вероятно, авторы пакетов NuGet должны более четко указать это в описании.

2. Мэтт, я не думаю, что поиск каталогов lib в пакете является хорошим признаком. Я не уверен, но я думаю, что иногда авторы просто перекомпилируют код для разных целей, даже если PCL может быть достаточно.

3. Я думаю, что просмотр содержимого пакета NuGet для каталогов lib дает вам представление о том, какие платформы автор пакета решил поддерживать. Это в основном то, на что смотрит NuGet, чтобы узнать, можете ли вы использовать пакет NuGet в проекте. Если есть только списки PCL, то он также неявно поддерживает другие платформы, которые могут не иметь явного каталога lib. Обычно вы не перекомпилируете код для конкретной платформы, если у вас нет кода, специфичного для платформы.