Поделиться через


Поиск и оценка пакетов NuGet для проекта

При запуске проекта .NET или выявлении функциональной необходимости в приложении или службе часто можно установить существующие пакеты NuGet, чтобы сэкономить время и проблемы при создании собственных пакетов. Существующие пакеты могут поступать из nuget.org общедоступной коллекции или из частных источников, которые предоставляет ваша организация или другая сторона.

Поиск пакетов

Пакеты можно найти непосредственно на https://nuget.org/packages, в пользовательском интерфейсе диспетчера пакетов Visual Studio или в консоли диспетчера пакетов с nuget.org в качестве источника. Все пакеты из nuget.org регулярно сканируются для вирусов.

На странице nuget.org/packages указаны пакеты NuGet, и сначала перечислены самые популярные пакеты среди всех проектов .NET. Некоторые из этих пакетов могут быть полезны для ваших проектов.

Снимок экрана: сайт nuget.org/packages, в котором перечислены пакеты и сведения об обновлениях, скачиваниях и поддерживаемых платформах для каждого пакета.

Чтобы найти пакет, введите имя пакета или условия поиска в поле поиска в верхней части страницы. Для фильтрации поиска можно использовать расширенный синтаксис поиска .

Расширенная фильтрация и сортировка

В nuget.org/packages можно уточнить результаты поиска с помощью расширенных параметров фильтрации и сортировки.

Снимок экрана: nuget.org/packages с выделенными параметрами фильтра и списком сортировки. Параметры фильтрации, такие как платформа и тип пакета, видны.

Используйте фильтры Фреймворков, чтобы показать пакеты, предназначенные для конкретных фреймворков .NET. Дополнительные сведения см.в статье Целевые платформы в проектах в стиле SDK.

  • Если выбрать одно поколение платформы .NET, фильтр ограничивает результаты поиска пакетами, совместимыми с любыми отдельными целевыми платформами в этом поколении. Например, при выборе .NET возвращаются пакеты, совместимые с любой из современных платформ .NET, включая .NET 5.0 до .NET 10.0.

    Снимок экрана: фильтры платформы на nuget.org. В развернутой платформе .NET перечислены платформы из .NET 5.0 в .NET 10.0.

  • Если вы используете стрелки для расширения генерации фреймворка, на панели перечислены индивидуальные названия целевых фреймворков (TFM), по которым можно отфильтровать результаты. Например, выбор net5.0 возвращает пакеты, совместимые с платформой .NET 5.0.

  • По умолчанию пакеты фильтруются по расширенному списку вычисляемых совместимых платформ. Если вы хотите отфильтровать пакеты исключительно по фреймворкам, на которые они явно нацелены, снимите флажок «Включить совместимые платформы».

  • Объединение нескольких фильтров платформ показывает результаты поиска, соответствующие всем выбранным фильтрам. Другими словами, на странице перечислены пакеты, которые попадают на пересечение выбранных элементов. Рассмотрим пример.

    • Выбор netcoreapp3.1 и net45 показывает пакеты, ориентированные на .NET Core 3.1 и .NET Framework 4.5.
    • Выбор генерации фреймворка .NET Core и net45 возвращает пакеты, предназначенные для .NET Framework 4.5 и по крайней мере одной из целевых платформ .NET Core (.NET Core 1.0 до .NET Core 3.1).

    Кроме того, можно искать пакеты, соответствующие любому из фильтров платформы. Для этого перейдите в верхнюю часть параметров фильтра. Рядом с режимом фильтрации фреймворка выберите Любой.

    • При выборе netcoreapp3.1 и net5.0 отображаются пакеты, предназначенные для .NET Core 3.1 или .NET 5.0.
    • Выбор netcoreapp3.1 и создание платформы .NET возвращает пакеты, предназначенные для .NET Core 3.1 или любой из TFM .NET (.NET 5.0 до .NET 10.0).
  • Дополнительные сведения о том, как оценить поддерживаемые платформы пакета и его совместимость с проектом, см. в разделе "Определение поддерживаемых платформ" далее в этой статье.

Используйте фильтр типа пакета для перечисления пакетов определенного типа:

  • Все типы — это значение по умолчанию и отображает все пакеты независимо от типа.
  • Фильтры зависимостей для обычных пакетов NuGet, которые можно установить в проекте.
  • Средство .NET фильтрует по пакетам средств .NET, которые содержат консольные приложения.
  • Фильтры шаблонов в шаблоны .NET , которые можно использовать для создания проектов с помощью команды dotnet new .
  • Сервер MCP фильтрует пакеты, реализующие серверы протокола MCP, которые можно использовать для подключения приложений ИИ к данным и системам.

По умолчанию NuGet перечисляет все версии пакетов, включая предварительные и бета-версии. В разделе "Параметры" снимите флажок "Включить предварительную версию ", чтобы получить список только стабильных версий пакета.

Чтобы применить изменения, нажмите кнопку "Применить". Чтобы вернуться к значениям по умолчанию, выберите Reset.

Используйте список Сортировать по в правом верхнем углу страницы, чтобы отсортировать список пакетов по нескольким критериям:

  • Релевантность — это значение по умолчанию и сортирует результаты в соответствии с внутренним алгоритмом оценки.
  • Загрузки сортирует результаты поиска по общему количеству загрузок, в порядке убывания.
  • Недавно обновленные сортируют результаты поиска по дате создания последней версии пакета в хронологическом порядке.

Синтаксис поиска

Запросы поиска пакетов, выполняемые в nuget.org, из интерфейса командной строки NuGet и из Visual Studio используют один и тот же синтаксис. Другие источники пакетов, такие как Azure Artifacts или репозиторий пакетов GitHub, могут использовать другой синтаксис или не поддерживать расширенную фильтрацию.

  • Вы можете выполнить поиск в пакете id, packageidversiontitletagsauthordescriptionsummary или в свойствах owner с помощью синтаксиса <property>:<term>.

  • Поиск применяется к ключевым словам и описаниям и не учитывает регистр. Например, следующие строки выполняют поиск по свойству id строки nuget.core:

    id:NuGet.Core
    ID:nuget.core
    Id:NUGET.CORE

  • id выполняет поиск по подстрокам свойства, но packageid и owner используют точные совпадения без учета регистра. Рассмотрим пример.

    PackageId:jquery выполняет поиск точного идентификатора jqueryпакета.
    Id:jquery выполняет поиск всех идентификаторов пакетов, содержащих строку jquery.

  • Одновременно можно найти несколько значений или свойств. Рассмотрим пример.

    id:jquery id:ui выполняет поиск нескольких терминов в свойстве id .
    id:jquery tags:validation выполняет поиск нескольких свойств.

  • Поиск игнорирует неподдерживаемые свойства, поэтому invalid:jquery ui такой же, как поиск ui, а invalid:jquery возвращает все пакеты.

Определение поддерживаемых платформ

NuGet устанавливает пакет в проект, только если поддерживаемые платформы .NET пакета включают целевые платформы проекта. Если пакет несовместим, NuGet выдает ошибку.

Существует несколько способов определить платформы, поддерживаемые пакетом:

  • Проверьте страницу поиска поддерживаемых платформ пакета, которые отображаются в виде значков под идентификатором пакета. Эти значки отображают самые низкие поддерживаемые версии платформы из поколений .NET, .NET Core, .NET Standard и .NET Framework. Пакет совместим с любой версией фреймворка, которая больше или равна показанной версии значка.

    Индикаторы темно-синего цвета представляют явно целевые платформы. Светло-голубые индикаторы представляют вычисляемую совместимую платформу.

    Выбор индикатора событий перенаправляет вас на страницу сведений о пакете на nuget.org. На этой странице на вкладке Frameworks отображается полный список поддерживаемых платформ.

    Снимок экрана: nuget.org/packages. Под двумя именами пакетов выделены строки индикаторов платформы, а подсказка о совместимости отображается.

  • Проверьте страницу пакета на nuget.org для поддерживаемых фреймворков. Они отображаются под идентификатором пакета и на вкладке Frameworks , но не все пакеты показывают поддерживаемые платформы.

    Снимок экрана страницы пакета nuget.org. Под именем выделены бэджи фреймворка. На вкладках Frameworks перечислены многочисленные версии .NET.

  • Скачайте пакет вручную с страницы пакета, перейдя в раздел "Сведения " и выбрав "Скачать пакет". Измените расширение файла скачаемого пакета из NUPKG на .zip, откройте папку .zip и проверьте ее папку lib . Существуют вложенные папки для каждого поддерживаемого фреймворка, название которых соответствует TFM. Дополнительные сведения см. в разделе "Целевые платформы". Если в библиотеке lib нет вложенных папок и есть только одна библиотека DLL, попробуйте установить пакет, чтобы обнаружить ее совместимость.

  • Попробуйте установить пакет в проект с помощью install-Package в консоли диспетчера пакетов Visual Studio. Если пакет несовместим, выходные данные консоли отображают поддерживаемые платформы пакета.

Пакеты предварительной подготовки

Многие авторы пакетов предоставляют предварительные версии и бета-версии, так как они продолжают улучшать и искать отзывы о последних редакциях. По умолчанию на сайте nuget.org в списке пакетов и результатах поиска отображаются пакеты предварительных версий.

Для поиска и составления списка только стабильных выпусков:

  • В nuget.org перейдите на панель расширенного поиска и снимите флажок "Включить предварительную версию ".
  • В пользовательском интерфейсе диспетчера пакетов NuGet Visual Studio снимите флажок "Включить предварительную версию " рядом с полем поиска.

Консоль диспетчера пакетов Visual Studio, Интерфейс командной строки NuGet и средства dotnet CLI по умолчанию не включают предварительные версии. Чтобы включить предварительные версии, выполните следующие действия.

  • В консоли диспетчера пакетов используйте переключатель -IncludePrerelease с командами Find-Package, Get-Package, Install-Package, Sync-Package и Update-Package. Дополнительные сведения см. в справочнике по PowerShell.

  • Для интерфейса командной строки NuGet используйте переключатель -prerelease с командами install, update, list, search и mirror. Для получения дополнительной информации см. справочник по интерфейсу командной строки NuGet.

  • Для dotnet CLI укажите предварительную версию с помощью аргумента -v. Для получения дополнительной информации см. dotnet package add.

Собственные пакеты C++

Проекты Visual Studio C++ могут использовать собственные пакеты NuGet C++. Установка этих пакетов включает команду контекстного меню «Управление пакетами NuGet», предоставляет целевой native фреймворк и обеспечивает интеграцию с Microsoft Build Engine (MSBuild).

Чтобы найти собственные пакеты в nuget.org/packages, выполните поиск с помощью tag:native. Такие пакеты обычно предоставляют файлы .targets и .props , которые NuGet автоматически импортирует при добавлении пакетов.

Оцените пакеты

Лучший способ оценить полезность пакета — это попробовать его. Когда вы используете пакет, вы зависите от него, поэтому необходимо убедиться, что он устойчивый и надежный. Однако установка пакета и непосредственное тестирование его занимает много времени. Вы можете узнать много о качестве пакета, используя сведения на странице пакета на nuget.org/packages.

  • Флажок "Зарезервированный префикс" означает, что владельцы пакетов подали заявку и получили префикс идентификатора зарезервированного пакета. В списке пакетов этот флажок можно найти рядом с идентификатором пакета. На странице пакета это указано под идентификатором. Чтобы соответствовать критериям резервирования префикса идентификатора, владельцам пакетов необходимо четко идентифицировать себя и свои пакеты.

    Снимок экрана: страница пакета nuget.org. Под именем пакета имеется синий флажок с меткой

  • В разделе "Загрузки" на боковом столбце страницы пакета отображаются общие, текущие версии и средние загрузки в день . Большие числа говорят о том, что пакет зарекомендовал себя среди множества разработчиков.

    Снимок экрана: раздел

    Рядом с скачиваемыми данными выберите "Полные статистики", чтобы перейти на страницу, в которую отображаются скачивание пакетов за последние шесть недель по номеру версии. Версии, которые используют больше разработчиков, обычно являются лучшим вариантом.

  • На вкладке "Использовано по " на странице пакета отображаются пять самых популярных пакетов nuget.org и репозиториев GitHub, которые зависят от этого пакета. Пакеты и репозитории, зависящие от этого пакета, называются зависимыми. Зависимые пакеты и репозитории можно рассматривать как одобрение этого пакета, так как они предпочитают доверять и зависеть от него.

    Снимок экрана: страница пакета. На вкладке

    Последняя стабильная версия зависимого пакета должна зависеть от любой версии этого пакета. Это определение гарантирует, что перечисленные зависимые пакеты являются обновленным отражением решений авторов пакетов о доверии и зависимости от пакета. В списке зависимых не отображаются предварительные зависимые, так как они еще не считаются целиком поддерживаемыми. В следующих примерах показано, какие пакеты могут быть перечислены в качестве зависимых.

    Версия зависимого пакета Зависимый пакет указан в списке зависимостей?
    v1.0.0
    Версия 1.1.0 (последняя стабильная версия) зависит от этого пакета.
    версия 1.2.0-предварительная версия
    True, последняя стабильная версия зависит от этого пакета
    Версия 1.0.0 зависит от этого пакета
    v1.1.0 (последняя стабильная версия)
    версия 1.2.0-предварительная версия
    False, последняя стабильная версия не зависит от этого пакета.
    Версия 1.0.0 зависит от этого пакета
    v1.1.0 (последняя стабильная версия)
    Версия 1.2.0-preview зависит от этого пакета
    False, последняя стабильная версия не зависит от этого пакета.

    Количество звезд для репозитория GitHub указывает на популярность пользователей GitHub. Дополнительные сведения о звезде GitHub и системе ранжирования репозитория см. в разделе "О звездах".

    Замечание

    Раздел "Использованный по " автоматически создается периодически, без проверки человека и исключительно для информационных целей.

  • На вкладке "Версии" на странице пакета отображаются версии, загрузки, дата последнего обновления и серьезные уязвимости версий пакетов. Установленная версия не должна иметь уязвимостей с высоким уровнем серьезности. Хорошо поддерживаемый пакет имеет последние обновления и длинную историю версий. У заброшенных пакетов мало обновлений, и они были давно.

    Снимок экрана: страница пакета. На вкладке

В боковом столбце страницы пакета разделы " и "Владельцы " содержат другие информационные ссылки:

Снимок экрана: боковой столбец страницы пакета со ссылками для владельцев, веб-сайта проекта, исходного репозитория и выделенной лицензии.

  • Выберите веб-сайт Project, если он доступен, чтобы узнать, какие параметры поддержки предоставляет автор. Проект с выделенным сайтом обычно хорошо поддерживается.

  • Выберите исходный репозиторий, чтобы перейти к репозиторию исходного кода Git для пакета. Многие авторы поддерживают свои пакеты в репозиториях с открытым исходным кодом, поэтому пользователи могут напрямую вносить исправления ошибок и улучшения функций. Журнал вкладов пакета является хорошим показателем того, сколько разработчиков активно участвует.

  • Выберите <тип лицензии>, чтобы получить сведения о лицензии пакета. Если пакет не указывает условия лицензии, обратитесь к владельцу пакета.

  • Выберите любого из владельцев пакетов в разделе "Владельцы" , чтобы получить сведения о других пакетах, которые они опубликовали. Владельцы с несколькими пакетами, вероятнее всего, будут продолжать поддерживать свою работу. Рядом с владельцами выберите "Связаться с владельцами", чтобы обратиться непосредственно к разработчикам пакетов.

Получение сведений о лицензии

Некоторые клиенты NuGet и веб-каналы NuGet не могут отображать сведения о лицензировании. Для обеспечения обратной совместимости в таких случаях URL-адрес лицензии указывает на этот документ.

Если выбор URL-адреса лицензии для пакета перенаправляет вас на эту страницу, это означает, что пакет содержит файл лицензии. Кроме того, одно или оба из следующих утверждений являются истиной:

  • Вы подключены к потоку данных, который не умеет интерпретировать и отображать сведения о лицензии для клиента.
  • Вы используете клиент, который не знает, как интерпретировать и читать сведения о лицензии, которые предоставляет веб-канал.

Чтобы прочитать сведения в файле лицензии внутри пакета, выполните следующие действия.

  1. Скачайте пакет вручную и распакуйте его содержимое в папку.
  2. Откройте nuspec-файл в корне папки.
  3. <license> Проверьте тег, например<license type="file">license\license.txt</license>, чтобы определить файл лицензии и вложенную папку. В этом случае файл лицензии называется license.txt. Она находится в подпапке с именем license.
  4. Перейдите в указанную вложенную папку и откройте файл лицензии.

Сведения о MSBuild, эквивалентном настройке лицензии в nuspec-файле , см. в разделе "Упаковка выражения лицензии" или файла лицензии.