Различия между Nuget-упаковкой csproj и nuspec

Недавно я начал упаковывать пакеты nuget из нескольких своих проектов. Сначала я начал с приложения Package Explorer. Это хороший инструмент, но он менее полезен, если вы делаете непрерывную интеграцию. Затем я рассмотрел указание файла шаблона nuspec и передачу изменяющихся данных, например номера версии, в качестве аргументов командной строки. Позже я подумал, как определить зависимости пакета nuget. Как оказалось, nuget.exe уже делает это на основе package.config, если вы указываете csproj. Кроме того, он извлекает соответствующие данные, такие как Автор, Версия, Авторское право, из информации о сборке. Чего мне не хватает сейчас, так это возможности указать licenseUrl в командной строке. Но я хотел, чтобы вопрос был более общим. И поэтому я спрашиваю:

Каков предпочтительный способ упаковки пакетов nuget?

4 ответа

Решение

Вот малоизвестный факт: вы можете объединить оба! Выберите целевой файл csproj и убедитесь, что в том же каталоге есть файл nuspec с тем же именем, что и файл csproj. NuGet объединит их во время создания пакета.

Короче говоря: цель <ProjectName>.csprojПри желании добавьте соответствующий токен <ProjectName>.nuspec файл, который будет использоваться в качестве метаданных NuGet.exe.

Это избавляет вас от управления расположением вывода, зависимостями, версией и другими вещами, которые могут быть получены из проекта.

С.csproj для Visual Studio 2017 вам не нужен файл.nuspec. Вы можете добавить значения непосредственно в ваш csproj, и он подберет их.

Щелкните правой кнопкой мыши по проекту в Visual Studio, измените xxxxx.csproj. Блокнот тоже работает нормально.

<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <Version>1.0.1</Version>
    <authors>Subtracts</authors>
    <TargetFrameworks>netstandard1.6;net452</TargetFrameworks>
    <AssemblyName>Checkout.net</AssemblyName>
    <PackageId>Checkout.net</PackageId>

...

</Project>

ps Поскольку у меня недостаточно репутации, чтобы комментировать, я оставляю ответ вместо комментария к ответу Ксавьера.:)

Для простых пакетов вы можете напрямую создавать пакеты .csproj или же .vbproj, Но для более продвинутых пакетов, особенно когда вам нужно добавить пользовательские файлы в ваш пакет, вам нужно использовать .nuspec, Я обычно начинаю с csproj и перехожу к nuspec по мере необходимости. Вы всегда можете получить nuspec с помощью команды nuget spec на csproj.

https://docs.nuget.org/create/creating-and-publishing-a-package

Вы можете указать любое из свойств, включая licenseUrl с использованием Properties параметр для nuget pack

nuget pack -properties licenseUrl=http://blah

С.NET Core по состоянию на февраль 2018 года вам потребуется .nuspec файл для больше, чем основные свойства файла спецификации.

Но dotnet pack Команда не будет использовать .nuspec файл, если вы не добавите <NuspecFile>relative path to nuspec</NuspecFile> к .csproj файл.

См. https://github.com/dotnet/cli/issues/2170

Другие вопросы по тегам