#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:
Существуют каталоги, зависящие от платформы, такие как MonoAndroid и Xamarin.iOS10, а также каталоги PCL, такие как portable-net45 win8. Это предполагает, что вы должны установить его во все свои проекты.
Комментарии:
1. Спасибо, Мэтт. Хотелось бы, чтобы это было проще. Вероятно, авторы пакетов NuGet должны более четко указать это в описании.
2. Мэтт, я не думаю, что поиск каталогов lib в пакете является хорошим признаком. Я не уверен, но я думаю, что иногда авторы просто перекомпилируют код для разных целей, даже если PCL может быть достаточно.
3. Я думаю, что просмотр содержимого пакета NuGet для каталогов lib дает вам представление о том, какие платформы автор пакета решил поддерживать. Это в основном то, на что смотрит NuGet, чтобы узнать, можете ли вы использовать пакет NuGet в проекте. Если есть только списки PCL, то он также неявно поддерживает другие платформы, которые могут не иметь явного каталога lib. Обычно вы не перекомпилируете код для конкретной платформы, если у вас нет кода, специфичного для платформы.