Различия между 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
файл.