Что такое формат файла NUPKG?
Файл .nupkg хранит стандартизированный пакет NuGet, используемый для распространения библиотек, инструментов или компонентов приложений .NET. По сути, .nupkg - это ZIP-архив, структурированный в соответствии с Open Packaging Conventions (OPC) - тем же семейством контейнеров, что и .docx. Он содержит скомпилированные сборки .dll, манифест метаданных .nuspec, дескриптор [Content_Types].xml и папки lib/, которые организуют сборки по моникерам целевых платформ (например, net8.0, netstandard2.0).
Что такое NuGet?
NuGet - это менеджер пакетов для платформы разработки Microsoft .NET, курируемый в настоящее время .NET Foundation. Он поставляется по умолчанию в составе Visual Studio начиная с версии Visual Studio 2012, а также доступен как отдельный интерфейс командной строки (CLI). NuGet поддерживает .NET Framework, .NET Standard и все современные выпуски .NET.
Как создаются файлы .nupkg?
Пакеты NuGet могут быть созданы из папки проекта с помощью команды dotnet pack (современный кроссплатформенный подход) или устаревшего CLI nuget pack. При использовании dotnet pack метаданные пакета считываются напрямую из файла проекта .csproj, поэтому отдельный манифест .nuspec больше не требуется, хотя его все еще можно предоставить для сложных сценариев. Результатом является архив .nupkg, готовый к распространению.
Как поделиться пакетом NuGet?
Самый популярный способ обмена файлами .nupkg - их публикация на веб-платформе nuget.org. После регистрации учетной записи пользователи загружают свой файл .nupkg и предоставляют краткое описание; каждый пакет проходит автоматическую проверку перед индексацией и предоставлением для скачивания. В корпоративных средах также распространены частные фиды, размещенные в Azure Artifacts, GitHub Packages или на собственных серверах. Сопутствующие пакеты символов .snupkg могут публиковаться вместе с .nupkg для обеспечения пошаговой отладки исходного кода.
Безопасность и защита
РИСК: MEDIUMФайл .nupkg - это данные, он не является напрямую исполняемым, но установка пакета запускает его код в вашей сборке и приложениях, поэтому риск цепочки поставок реален: вредоносные пакеты или пакеты с опечатками в названиях (тайпосквоттинг) на nuget.org использовались для доставки вредоносного ПО, а инструменты пакета, скрипты установки или цели MSBuild могут запускаться во время восстановления/сборки. Устанавливайте пакеты только от доверенных авторов, следите за опечатками в ID, отдавайте предпочтение пакетам с большим количеством загрузок и ссылками на исходный код, а также используйте подписанные пакеты и файлы блокировки. Простая проверка .nupkg путем распаковки безопасна - риск возникает при установке и сборке с его использованием.
Детали формата
в двух словахПрограммы, открывающие файлы NUPKG
Технические подробности
глубокая спецификация| Формат контейнера | ZIP (Open Packaging Conventions / OPC) - то же семейство контейнеров, что и .docx, .xlsx |
| Магические байты | `50 4B 03 04` («PK») - стандартный заголовок локального файла ZIP со смещением 0 |
| MIME-тип | `application/octet-stream` |
| Внутренний манифест | XML-файл `.nuspec` в корне пакета; объявляет Id, версию, авторов, зависимости и целевые платформы |
| Обязательная структура OPC | `[Content_Types].xml`, папка `_rels/` и как минимум один манифест `.nuspec` |
| Соглашение о путях сборок | Папки `lib/<TFM>/` - например, `lib/net8.0/`, `lib/netstandard2.0/` - по одной на каждый моникер целевой платформы |
| Инструменты сборки | `dotnet pack` (проекты в стиле SDK, кроссплатформенные) или `nuget pack` (устаревший CLI NuGet) |
| Публичный реестр | nuget.org - более 500 000 уникальных ID пакетов; пакеты проходят автоматическую проверку перед индексацией |
| Сопутствующий формат символов | `.snupkg` - отдельный архив, содержащий файлы символов `.pdb` для отладки на уровне исходного кода |
| Подпись пакета | Подписи сертификатов X.509 (автора и репозитория); клиенты проверяют подписи при установке |
| Поддержка целевых платформ | .NET Framework, .NET Standard, .NET 5-9 и более поздние версии; поддержка мультитаргетинга в одном `.nupkg` |
| Схема версионирования | Semantic Versioning 2.0 (SemVer 2.0); поддерживаются метки предварительных версий (например, `-alpha`, `-rc.1`) |
| Расположение кэша пакетов | `%USERPROFILE%\.nuget\packages\` в Windows; `~/.nuget/packages/` в Linux и macOS |
| Разрешение зависимостей | Полный транзитивный граф зависимостей разрешается при `dotnet restore`; возможен файл блокировки `packages.lock.json` для воспроизводимых сборок |
| Выпущен | 2010 (NuGet 1.0) |
| Открыть стандартное | Да · без роялти |
| Спецификация | learn.microsoft.com |
Конвертации NUPKG
Вопросы и ответы сообщества
спрошено пользователямиВопросов пока нет - станьте первым, кто спросит о файлах NUPKG.