Добавление пакетов в проект .NET

Завершено

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

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

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

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

Определение потребности в пакете

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

  • Получение лучшего кода: спросите себя, имеете ли вы дело с задачей, например безопасностью, и пытаетесь реализовать проверку подлинности и авторизацию. Для защиты ваших данных и данных клиентов этот код очень важно написать правильно. Многие разработчики используют стандартные шаблоны и библиотеки. Эти библиотеки реализуют функции, которые вам, вероятно, всегда будут нужны, а проблемы будут исправляться по мере их возникновения. Используйте такие библиотеки, чтобы не создавать собственные. Скорее всего, вам не придется писать код самостоятельно, так как вам нужно рассмотреть так много пограничных вариантов.
  • Экономия времени: вы, вероятно, можете создавать большинство вещей самостоятельно, например служебные библиотеки или библиотеки компонентов пользовательского интерфейса, но требуется время. Даже при схожем результате тратить время на то, чтобы повторно писать уже существующий код, нерационально, если без этого можно обойтись.
  • Обслуживание: все библиотеки и приложения рано или поздно потребуют обслуживания. Обслуживание означает добавление новых функций, а также исправление ошибок. Хорошо ли использовать ваше время или время вашей команды для поддержания библиотеки или лучше позволить команде программного обеспечения с открытым исходным кодом справиться с ним?

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

Перед установкой библиотеки рекомендуется проверить ее зависимости. От результатов проверки будет зависеть то, следует ли использовать пакет. При выборе зависимости для проекта следует учитывать определенные факторы.

  • Размер: количество зависимостей может создать большой объем. Если у вас ограниченная пропускная способность или есть другие аппаратные ограничения, это может стать проблематичным.
  • Лицензирование. Необходимо убедиться, что лицензия, предоставленная библиотеке, охватывает предполагаемое использование, будь то коммерческое, личное или академическое.
  • Активное обслуживание: это может быть проблема, если пакет зависит от зависимости, которая устарела или не была обновлена в течение длительного времени.

Чтобы получить дополнительные сведения о пакете перед установкой, перейдите по адресу https://www.nuget.org/packages/<package name>. Этот URL-адрес позволяет получить подробную страницу пакета. Откройте раскрывающийся список Зависимости и посмотрите, от каких пакетов зависит его работа.

Количество указанных зависимостей может не показать всю картину. После загрузки пакета вы можете заметить, что у вас появилась зависимость, включающая десятки других пакетов. Почему так? У каждого пакета есть список зависимостей. Чтобы вы могли использовать тот или иной пакет, при выполнении команды dotnet add package <package name> все зависимости сканируются и скачиваются.

Установка пакета

Существует несколько способов устанавливать пакеты. В Visual Studio и Visual Studio для Mac имеется встроенная командная строка и графический пользовательский интерфейс для диспетчера пакетов. Вы можете вручную добавить ссылки на пакеты в файл проекта или установить их с помощью средства интерфейса командной строки (CLI), например Paket или .NET Core CLI.

Для этого модуля мы будем использовать встроенный интерфейс .NET Core CLI для установки пакетов. Вы можете добавить пакет в проект .NET, вызвав команду в терминале. Типичная команда установки выглядит следующим образом: dotnet add package <name of package> При выполнении команды add package программа командной строки подключается к глобальному реестру, извлекает пакет и сохраняет его в кэшированную папку, где его могут использовать все проекты.

После установки и сборки проекта ссылки добавляются в папки отладки или выпуска. Каталог проекта выглядит примерно так:

-| bin/
---| Debug/
------| net3.1
--------| <files included in the dependency>

Поиск пакета

Отдельные разработчики могут использовать глобальный реестр на сайте NuGet.org для поиска и скачивания пакетов, необходимых для их приложений. У компании может быть стратегия для подбора пакетов и места поиска.

Screenshot of NuGet.org showing a list of popular packages.

Пакеты могут находиться в различных местах. Одни источники общедоступны, а другие могут быть ограничены и доступны только сотрудникам определенной компании. Вот некоторые места, где могут находиться пакеты:

  • Реестры. Примером может быть глобальный реестр, например реестр NuGet.org. Можно создавать свои собственные реестры, которые могут быть как частными, так и общедоступными. Такие службы, как GitHub и Azure DevOps, предоставляют частные реестры.
  • Файлы. Пакет можно установить из локальной папки. Установка из пакета распространена при попытке разработать собственные библиотеки .NET и хотите протестировать пакет локально или по какой-то причине не хотите использовать реестр.

Diagram that illustrates the relationship between package creators, package hosts, and package consumers.

Реестр NuGet и инструмент dotnet

При выполнении команды dotnet add package <name of dependency> .NET переходит в глобальный реестр, который называется реестром NuGet.org, и ищет код для скачивания. Он расположен в https://nuget.org. Вы также можете просмотреть эту страницу для пакетов, если вы посещаете его с помощью браузера. У каждого пакета есть отдельный веб-сайт.

Screenshot of the landing page for a NuGet package.

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

Screenshot of information and metrics on a NuGet package.

Команды .NET

Вы уже знаете, как устанавливать зависимости с помощью .NET Core CLI. Но это далеко не все, на что она способна.

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

Категории помогают запомнить назначение различных команд.

  • Управление зависимостями. Команды в этой категории охватывают установку, удаление, очистку после установки пакетов и обновления пакетов.
  • Запуск программ: средство .NET Core помогает управлять потоками в разработке приложений. Примеры потоков приложения включают проведение тестов, сборку кода или запуск команд миграции для обновления проектов.
  • Создание и публикация пакетов. Некоторые команды помогут вам выполнить такие задачи, как создание сжатого пакета и отправка пакета в реестр.

Чтобы получить полный список команд, введите в окне терминала команду dotnet --help.

Установка пакета

Используйте команду dotnet add package <dependency name> для установки обычной зависимости, которая предназначена для использования как часть вашего приложения.

Примечание.

Некоторые пакеты можно устанавливать глобально. Такие пакеты не предназначены для импорта в проект. В связи с этим многие глобальные пакеты представляют собой средства CLI или шаблоны. Эти глобальные средства можно установить из репозитория пакетов. Для установки средств используйте команду dotnet tool install <name of package>. Для установки шаблонов используйте команду dotnet new -i <name of package>.

После установки

Установленные пакеты перечислены в разделе dependencies файла CSPROJ. Чтобы узнать, какие именно пакеты находятся в папке, введите команду dotnet list package.

Project 'DotNetDependencies' has the following package references
   [net8.0]:
   Top-level Package      Requested   Resolved
   > Humanizer            2.7.9       2.7.9

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

dotnet list package --include-transitive

Включение транзитивных пакетов позволяет просмотреть зависимости вместе со всеми установленными пакетами. При выполнении dotnet list package --include-transitiveвы можете получить следующие выходные данные:

Project 'DotNetDependencies' has the following package references
   [net8.0]:
   Top-level Package      Requested   Resolved
   > Humanizer            2.7.9       2.7.9

   Transitive Package               Resolved
   > Humanizer.Core                 2.7.9
   > Humanizer.Core.af              2.7.9
   > Humanizer.Core.ar              2.7.9
   > Humanizer.Core.bg              2.7.9
   > Humanizer.Core.bn-BD           2.7.9
   > Humanizer.Core.cs              2.7.9
   ...

Восстановить зависимости

При создании или клонировании проекта включенные зависимости не загружаются или не устанавливаются до сборки проекта. Вы можете вручную восстановить зависимости, а также средства для конкретных проектов, указанные в файле проекта, выполнив команду dotnet restore. В большинстве случаев использовать эту команду явно не требуется. При необходимости восстановление NuGet выполняется неявно при использовании таких команд, как new, build и run.

Очистка зависимостей

Рано или поздно вы, скорее всего, понимаете, что вам больше не нужен пакет, или вы можете понять, что установленный пакет не является нужным. Например, вы нашли пакет, который может ускорить решение задачи. Какой бы ни была причина, зависимости, которые больше не используются, следует удалять. Это требуется для сохранения порядка. Кроме того, зависимости занимают место.

Чтобы удалить пакет из проекта, используйте remove команду, например: dotnet remove package <name of dependency> Эта команда удаляет пакет из CSPROJ-файла проекта.