Как создать пакет Nuget вручную (без Nuget.exe или Nuget Explorer)? - PullRequest
7 голосов
/ 10 марта 2012

Я искал описания файлов, которые входят в пакет Nuget (.nupkg), но мне еще предстоит найти исчерпывающее руководство, в большинстве случаев предполагается, что вы должны использовать Nuget Explorer или Nuget.exe - но хорошо, давайте просто скажем, что я упрямый.

Использование Nuget Explorer для создания пакета создает каталог с файлами, которые я хотел бы создать с помощью сценария или другого инструмента (кроме Nuget.exe). Итак, учитывая этот простой макет каталога, сгенерированный Nuget Explorer, я ищу определение файла .psmdcp, файла .rels, файла [Content_Types.xml] и, конечно, файла ProjectX.nuspec.

Я могу найти или вывести некоторые детали для [Content_Typex.xml] и файла .nuspec. Я попытался создать пакет только с lib / dir, его содержимым и файлом nuspec, но, видимо, этого недостаточно, и я получаю Package does not contain a manifest - что, как я подозреваю, означает, что только .nuspec не является полным манифест.

lib/
  ProjectX.dll
  ProjectX.pdb
package/
  package/services/metadata/core-properties/____hash____.psmdcp
_rel/
  .rels
[Content_Types.xml]
ProjectX.nuspec

Нет ли руководства по созданию .nupkg вручную? Неужели это действительно сложный процесс?

Ответы [ 2 ]

3 голосов
/ 10 марта 2012

Я написал сообщение в блоге о том, как вы можете использовать NuGet XSD: http://www.xavierdecoster.com/post/2012/03/08/Hidden-gem-the-NuGet-package-manifest-XSD.aspx

Кроме того, взгляните на соглашения пакета NuGet в документации: http://docs.nuget.org/docs/creating-packages/creating-and-publishing-a-package#Package_Conventions

Если вам нужны более подробные практические занятия, есть также книга Pro NuGet, в которой подробно рассматриваются различные сценарии: http://www.amazon.com/NuGet-Professional-Apress-Maarten-Balliauw/dp/1430241918

1 голос
/ 02 августа 2018

.nuspec определяет свойства вашего пакета (метаданные), а также список файлов, включаемых в пакет. Существует множество описаний этого, поэтому биты, которые необходимо решить, это файлы, которые добавляются инструментами:

.nupkg файлы соответствуют открытой упаковке. Как вы уже поняли, это действительно файл .zip с некоторыми предопределенными файлами. Каталог _rels содержит отношения между «частями». Подумайте о документе Word, содержащем изображения и таблицы электронных таблиц Excel, чтобы получить представление о «частях».

Пакеты в основном содержат только одну часть; сам пакет (но, вероятно, может содержать подпакеты для модулей). Файл _rels / .rels определяет отношения для основного пакета верхнего уровня. У отношения есть ID, URL, который описывает тип отношения и цель, которая является файлом, который имеет эту связь с пакетом. Большинство пакетов имеет отношение к файлу .nuspec, который имеет вид «manifest», и к файлу .psmdcp, который имеет вид «core-properties». Идентификаторы этих отношений должны быть уникальными только внутри пакета, поэтому они могут быть просто строками, такими как «R1», «R2», но по какой-то причине они являются «R» + 16 первых байтов GUID в choco.

Свойства ядра, по-видимому, в основном перефразируют файл манифеста, одетый в теги Dublin Core вместо nuspec; Я предполагаю, что теоретически другие программы могли бы представить пакет, основанный на них (если вы вставите его в документ Word!). Вероятно, psmdcp - это аббревиатура «Метаданные пакета служб Dublin Core Properties». Проверяя NuGet.Core / NuGet.Packaging / PackageCreation / Authoring / PackageBuilder.cs, мы видим, что имя файла представляет собой просто GUID с форматом «N» (только цифры). Свойство lastModifiedBy является информацией о версии самой сборки choco; Я полагаю, что вы действительно можете поместить что-нибудь туда, если создадите файлы самостоятельно.

[Content Types.xml] определяет формат файла расширений в форме типов MIME. В основном это котельная плита.

Итак, в заключение: на основе .nuspec вы можете сгенерировать все остальные отсутствующие файлы и собрать .nupkg самостоятельно, даже в скрипте Powershell.

...