NuGet
NuGet — система управления пакетами, в первую очередь предназначенная для упаковки и распространения программного обеспечения, созданного с использованием .NET и .NET Framework. Проект был инициирован Филом Хааком (англ. Phil Haack)[1] и первоначально представлен как проект фонда Outercurve Foundation под названием NuPack[2][3][4]. С момента появления в 2010 году NuGet превратилась в целую экосистему инструментов и сервисов, включающих бесплатное и открытое клиентское приложение, размещённые серверы пакетов и инструменты развёртывания программного обеспечения[5].
Что важно знать
| NuGet | |||
|---|---|---|---|
| Тип | система управления пакетами | ||
| Автор | Фил Хаак | ||
| Разработчики | Microsoft, .NET Foundation | ||
| Написана на | C# | ||
| Интерфейс | графический (в Visual Studio), командная строка (nuget.exe, dotnet CLI) | ||
| Движки | ASP.NET, SQL Azure, Azure Storage | ||
| Операционные системы | Windows, macOS, Linux | ||
| Языки интерфейса | английский, русский, испанский, немецкий, французский, японский и другие | ||
| Первый выпуск | 5 октября 2010 | ||
| Аппаратные платформы | .NET Framework, .NET, .NET Standard, UWP, Xamarin, C++ | ||
| Последняя версия | 6.13.1 (12 мая 2025) | ||
| Бета-версия | 6.12.0.83 (24 августа 2024) | ||
| Репозиторий | github.com/NuGet/Home | ||
| |||
| |||
| Состояние | активное | ||
| Лицензия | Apache License 2.0 | ||
| Сайт | nuget.org | ||
Обзор
Пакет NuGet представляет собой один ZIP-файл с расширением .nupkg (исторически также .nupack), содержащий скомпилированный код (сборки), другие необходимые файлы, а также XML-манифест (файл .nuspec) с метаданными пакета, такими как его идентификатор, версия и зависимости[6][7]. Разработчики могут создавать такие пакеты и публиковать их в общедоступных или частных репозиториях для обмена кодом[6].
Экосистема NuGet предоставляет инструменты для работы в операционных системах Windows, macOS и Linux[8]. Управление пакетами осуществляется как через графические интерфейсы, интегрированные в среды разработки (например, Visual Studio), так и с помощью утилит командной строки[6][8].
Поддерживаемые платформы
NuGet является основным механизмом для обмена кодом в экосистеме .NET и предназначен для широкого спектра программных платформ[9][10]. Это позволяет разработчикам создавать пакеты, которые могут использоваться в различных типах проектов. Основные поддерживаемые платформы включают:
- .NET Framework — исторически первая платформа, для которой был создан NuGet. Поддерживаются все версии, что обеспечивает доступ к большому количеству существующих библиотек[11].
- .NET (ранее .NET Core) — современная кроссплатформенная реализация, для которой NuGet является неотъемлемой частью управления зависимостями в приложениях для Windows, macOS и Linux[11].
- .NET Standard — спецификация API, обеспечивающая переносимость кода между различными реализациями .NET. Пакеты, нацеленные на .NET Standard, могут использоваться в проектах .NET Framework, .NET и Xamarin[11].
- UWP — используется для добавления библиотек в приложения для Windows 10 и Windows 11, работающие на ПК, планшетах, Xbox и HoloLens[12].
- Xamarin — позволяет подключать общие и платформенно-специфичные компоненты при разработке мобильных приложений для iOS и Android.
- C++ — NuGet также поддерживает управление зависимостями для нативных библиотек на C++ в проектах Visual Studio.
Для точного определения совместимости NuGet использует так называемые моникеры целевой платформы (англ. Target Framework Monikers, TFM), например, net48 для .NET Framework 4.8 или net8.0 для .NET 8[11]. Этот механизм позволяет авторам включать в один пакет сборки для нескольких платформ, а NuGet автоматически выбирает подходящую версию при установке в проект[13][14].
Архитектура и инструменты
Для взаимодействия с пакетами NuGet предоставляет несколько клиентских инструментов, которые можно разделить на инструменты с графическим интерфейсом (GUI) и интерфейсом командной строки (CLI). Выбор инструмента зависит от операционной системы, типа проекта и предпочтений разработчика.
Графические интерфейсы
- Диспетчер пакетов NuGet в Visual Studio: основной способ управления пакетами в среде Visual Studio для Windows. Он позволяет находить, устанавливать, обновлять и удалять пакеты через пользовательский интерфейс[15]. Аналогичные встроенные инструменты доступны и в Visual Studio for Mac.
- Расширения для редакторов кода: для Visual Studio Code существуют расширения, добавляющие графический интерфейс для управления пакетами[16].
- NuGet Package Explorer: отдельное приложение с открытым исходным кодом, которое позволяет просматривать и редактировать содержимое пакетов
.nupkg[17].
Интерфейсы командной строки
- dotnet CLI: современный кроссплатформенный инструмент, входящий в состав .NET SDK. Он работает в Windows, macOS и Linux и является основным способом управления пакетами для проектов .NET (ранее .NET Core) и .NET Standard[18].
- nuget.exe: оригинальная утилита командной строки для Windows, предоставляющая полный набор функций NuGet. В основном используется для проектов, нацеленных на .NET Framework, и в сценариях непрерывной интеграции[19]. Утилиту можно запускать на macOS и Linux с помощью Mono, однако этот способ имеет ограничения и официально не поддерживается[20].
- Консоль диспетчера пакетов: интегрированная в Visual Studio для Windows консоль, которая использует команды PowerShell для взаимодействия с NuGet[21].
Поддержка языков Клиентские инструменты NuGet, интегрированные в Visual Studio, локализованы, и их язык интерфейса соответствует языку среды разработки. Поддерживаемые языки включают английский, испанский, итальянский, китайский (упрощённый и традиционный), корейский, немецкий, польский, португальский (бразильский), русский, турецкий, французский, чешский и японский. В то же время официальный сайт-репозиторий nuget.org доступен только на английском языке[22].
Серверная часть экосистемы NuGet имеет два основных варианта реализации: публичный репозиторий nuget.org и решение для самостоятельного хостинга NuGet.Server[23].
Центральный публичный репозиторий nuget.org является основным и крупнейшим хранилищем пакетов. Его архитектура рассчитана на высокие нагрузки и построена на технологиях Microsoft Azure. Веб-приложение сайта написано на ASP.NET, для хранения метаданных пакетов и информации о пользователях используется SQL Azure, а сами файлы пакетов (.nupkg) размещаются в Azure Blob Storage[23]. Фоновые процессы, такие как индексация для поиска, также работают в среде Azure. Исходный код этого компонента доступен на GitHub[24].
Для компаний, которым требуется частное хранилище, предназначен NuGet.Server. Это легковесное решение, представляющее собой пакет, который добавляется в пустое веб-приложение ASP.NET. После развёртывания на сервере под управлением IIS оно начинает функционировать как репозиторий, предоставляя доступ к пакетам по протоколу OData (HTTP)[25].
Форматы файлов
NuGet использует несколько форматов файлов для создания, распространения и управления пакетами, а также для настройки собственного поведения.
Основные форматы пакетов и метаданных
.nupkg(NuGet Package) — основной формат для распространения кода. Представляет собой ZIP-архив, содержащий скомпилированный код (сборки), другие связанные файлы и манифест[26]. Содержимое архива организовано по определённым правилам для корректной работы с пакетом[27]..snupkg(Symbol Package) — пакет символов, который имеет ту же структуру, что и.nupkg, но содержит отладочные символы (файлы.pdb), позволяющие разработчикам отлаживать код пакета..nuspec(NuGet Specification) — XML-манифест, содержащий все метаданные о пакете: его идентификатор, версию, описание, авторов, зависимости и список включаемых файлов[28]. Этот файл является обязательной частью каждого пакета.nupkg, но может также использоваться отдельно для создания пакета с помощью утилитыnuget.exe[29].
Форматы управления зависимостями Способ управления зависимостями в проекте зависит от его типа и используемых инструментов. Существует два основных подхода:
- PackageReference — современный и рекомендуемый способ, при котором зависимости объявляются непосредственно в файле проекта (например,
.csproj) с помощью XML-элемента<PackageReference>[30]. Этот метод позволяет управлять только прямыми зависимостями, в то время как транзитивные (зависимости зависимостей) разрешаются автоматически в процессе восстановления[31]. packages.config— устаревший формат, представляющий собой отдельный XML-файл со списком всех пакетов, установленных в проекте, включая транзитивные[32]. Этот файл создаётся в корневом каталоге проекта при первой установке пакета и больше не находится в активной разработке.
Во время процесса восстановления пакетов для проектов, использующих PackageReference, NuGet создаёт файл project.assets.json в папке obj. Этот файл содержит полную схему зависимостей проекта и используется инструментами .NET для получения информации о пакетах и их связях[33][34].
Конфигурационные файлы
nuget.config— XML-файл, который используется для настройки поведения NuGet. В нём можно определять источники пакетов (репозитории), расположение глобальной папки для кэширования и другие параметры[35]. Конфигурационные файлы могут применяться на разных уровнях: для конкретного проекта, для пользователя или для всего компьютера[36].
Версии
Последняя стабильная версия NuGet — 6.13.1, выпущенная 12 мая 2025 года[37]. Новые версии инструментов NuGet, как правило, поставляются вместе с обновлениями Visual Studio[37].
Последней предварительной версией является 6.12.0.83, выпущенная 24 августа 2024 года. Данный выпуск классифицируется как бета-версия или preview-релиз[38]. Предварительные версии NuGet следуют правилам семантического версионирования и используют суффиксы для обозначения статуса, например, -alpha, -beta или -rc (англ. Release Candidate)[39]. Основным каналом распространения таких версий являются предварительные выпуски Visual Studio (англ. Preview Channel)[40], однако утилита командной строки nuget.exe также может быть доступна для отдельной загрузки[41]. Следует отличать предварительные версии самих инструментов NuGet от предварительных версий пакетов, которые разработчики могут публиковать в репозитории. Для установки последних используется опция «Включить предварительные выпуски» в диспетчере пакетов[42].
NuGet сейчас — это основной и наиболее развитый пакетный менеджер для экосистемы .NET, поддерживаемый Microsoft[43][44][45][46].


