Ответ
NuGet — это стандартный и основной менеджер пакетов для экосистемы .NET. Он интегрирован в Visual Studio и .NET CLI, предоставляя централизованный механизм для управления зависимостями проекта (сторонними библиотеками, инструментами, шаблонами).
Основные функции NuGet:
- Установка пакетов: Загрузка библиотек из репозиториев (публичный nuget.org или приватные) и добавление их в проект.
- Управление зависимостями: Автоматическое разрешение и установка всех зависимостей пакета (транзитивные зависимости).
- Управление версиями: Позволяет указывать конкретные версии, диапазоны версий или использовать плавающие версии (например,
6.0.*). - Восстановление пакетов: Команда
restoreзагружает все зависимости, указанные в файлах проекта, что является ключевым шагом в CI/CD пайплайнах.
Как это работает на практике:
При добавлении пакета (например, Newtonsoft.Json) NuGet:
- Находит пакет в настроенных источниках.
- Скачивает его (
.nupkgфайл, который является ZIP-архивом с DLL, XML-документацией и метаданными). - Добавляет ссылку на пакет в файл проекта (
.csproj). - Пакеты обычно скачиваются в папку
~/.nuget/packages(глобальный кэш) и ссылаются оттуда.
Способы использования:
1. Через графический интерфейс Visual Studio:
Правый клик на проект -> "Управление пакетами NuGet..." -> Поиск -> Установка.
2. Через Консоль диспетчера пакетов (Package Manager Console) в VS:
# Установка конкретной версии
Install-Package Newtonsoft.Json -Version 13.0.3
# Обновление пакета до последней версии
Update-Package Newtonsoft.Json
3. Через .NET CLI (предпочтительно для скриптов и CI/CD):
# Добавление пакета в проект
dotnet add package Newtonsoft.Json
# Восстановление всех зависимостей
dotnet restore
# Устаревшие пакеты можно удалить
dotnet remove package Old.Package
4. Прямое редактирование файла .csproj:
<Project Sdk="Microsoft.NET.Sdk">
<ItemGroup>
<PackageReference Include="Newtonsoft.Json" Version="13.0.3" />
<PackageReference Include="Serilog" Version="3.1.1" />
</ItemGroup>
</Project>
Ключевые файлы:
.csproj— содержит список зависимостей (<PackageReference>).nuget.config— файл конфигурации, определяющий источники пакетов, кэши и другие настройки.
Альтернативы/Дополнения: Для управления зависимостями на уровне решения (например, для согласованного обновления версий во многих проектах) используются инструменты вроде Central Package Management (CPM) или NuGet's Directory.Build.props.
Ответ 18+ 🔞
А, ну вот, NuGet, блядь! Это же наш главный поставщик халявы для .NET-разработчика, если по-простому. Представь себе этакий цифровой супермаркет, куда все вывалили свои библиотеки, и ты просто ходишь и набираешь в корзину, что тебе надо, вместо того чтобы вручную искать по всему интернету и копировать DLL-ки в папку bin.
Короче, что он делает, этот ваш NuGet:
- Тащит пакеты на проект: Ищет по репозиториям (в основном, конечно, на nuget.org) нужную библиотеку, скачивает её и прикручивает к твоему решению. Всё, как в сказке — щёлк пальцами, и у тебя уже стоит Newtonsoft.Json для разбора JSON, который ты сам писать, блядь, полгода будешь.
- Разруливает зависимости автоматом: Это самое охуенное. Скачал ты один пакет, а он, сука, сам тянет за собой ещё пять других, без которых не работает. NuGet это всё сам найдёт и установит, тебе даже думать не надо. Транзитивные зависимости, ёпта!
- Версиями жонглирует: Хочешь последнюю версию — пожалуйста. Хочешь конкретную, потому что новая всё ломает — без проблем. Можно даже написать
6.0.*, и он будет ставить последнюю минорную версию, что очень удобно. - Восстанавливает всё к хуям: Команда
restore— святое дело. Скачал проект с гита, а там только ссылки на пакеты. Запустилdotnet restore, и он пошёл всё качать, как будто так и надо. Без этого в CI/CD пайплайне — просто пиздец и ничего не соберётся.
Как это выглядит изнутри, когда ты, допустим, ставишь пакет:
- NuGet лезет в свои закрома, находит этот
nupkg(который, по сути, просто zip-архив с DLL, документацией и прочей хуйней). - Скачивает его к себе в глобальный кэш (обычно где-то в
C:UsersТвойЮзер.nugetpackages), чтобы второй раз не тянуть из интернета. - Прописывает ссылку в твой
.csprojфайл, и всё — библиотека как родная.
Способы пользоваться этой магией:
1. Через Visual Studio, как баба через кассу:
Кликаешь правой кнопкой по проекту → «Управление пакетами NuGet...» → ищешь, что надо → жмёшь «Установить». Всё, делов-то.
2. Через консольку в студии (Package Manager Console):
# Ставим конкретную версию, чтоб не поймать сюрприз
Install-Package Newtonsoft.Json -Version 13.0.3
# Или говорим: "дай самую новую, я жить рискую"
Update-Package Newtonsoft.Json
3. Через .NET CLI (это для крутых пацанов и скриптов):
# Добавил пакет — и пошёл пить чай
dotnet add package Newtonsoft.Json
# Восстановил зависимости после клонирования
dotnet restore
# Выкинул ненужный хлам
dotnet remove package Old.Package
4. Ручками, прям в .csproj (для тех, кто не ищет лёгких путей):
<Project Sdk="Microsoft.NET.Sdk">
<ItemGroup>
<PackageReference Include="Newtonsoft.Json" Version="13.0.3" />
<PackageReference Include="Serilog" Version="3.1.1" />
</ItemGroup>
</Project>
Где что лежит:
.csproj— тут вся твоя коллекция зависимостей, список<PackageReference>.nuget.config— это как настройки доставки. Тут пишешь, откуда таскать пакеты (официальный NuGet, свой приватный артефакторий) и прочие плюшки.
Ну и напоследок: если проектов дохуя и в каждом надо версии синхронизировать, чтобы не было, что в одном Serilog 2.0, а в другом Serilog 3.1, то есть приёмчики вроде Central Package Management (CPM) или через Directory.Build.props. Это чтобы не бегать, как угорелый, по всем файлам и не править версии вручную, а то ошибешься — и потом полдня ищешь, почему всё ебнулось.