Версия пакета всегда 1.0.0 с пакетом dotnet
TL;DR: Где dotnet pack
вытягивает информацию о версии, когда создает пакет nuget для сборки?
У меня есть библиотека, которую я перешел из проекта .NET 4.6.1 в проект .NET Core с помощью project.json
. Для моего CI в течение этого периода (используя TFS 2015 vnext), я бы получил номер своей версии и заменил номер версии в файле project.json новой версией. Команда dotnet pack
выберет версию просто отлично и создаст новый пакет с обновленным номером версии.
На прошлой неделе я обновился с TFS 2015 до TFS 2017. Оказывается, project.json был заменен обновленным файлом .csproj. Я обновил свой CI. Во время моего CI - я обновляю свой файл /Properties/AssemblyInfo.cs
, заменяя тег AssemblyVersion
версией текущей сборки. Затем я создаю решение, которое строит просто отлично. Затем я упаковываю решение.
Однако, несмотря на то, что AssemblyVersion
и AssemblyFileVersion
установлены в AssemblyInfo.cs
на правильный номер сборки - dotnet pack
, все еще производятся файлы .nupkg, которые *.1.0.0.nupkg
.
Что мне не хватает?
Вот моя команда в пакете:
dotnet pack $projectFile -o $currentDirectory
Ответы
Ответ 1
Когда вы используете dotnet pack
, версия вытягивается из определения проекта (ранее project.json
, теперь *.csproj
), а не AssemblyInfo.cs
. Таким образом, ваш новый рабочий процесс будет очень похож на то, что было с project.json
.
Из project.json в csproj docs вы можете использовать свойства VersionPrefix
и VersionSuffix
.
До:
{
"version": "1.0.0-alpha-*"
}
Сейчас:
<PropertyGroup>
<VersionPrefix>1.0.0</VersionPrefix>
<VersionSuffix>alpha</VersionSuffix>
</PropertyGroup>
Вы также можете использовать одиночное свойство Version
, но документы предупреждают, что это "может отменять настройки версии во время упаковки".
<PropertyGroup>
<Version>1.0.0-alpha</Version>
</PropertyGroup>
Ответ 2
Еще лучше, укажите /p:Version=$(Build.BuildNumber)
(TFS/VSTS) в команде dotnet pack, и он построит его с указанной версией в пакете nuget.
Пример (не специфичный для TFS):
dotnet pack .\src\example\example.csproj -o c:\published\example -c Release /p:Version=1.2.3
Пример (специфичный для TFS) < - мы используем это для нашей упаковки TFS 2017 с помощью шага powershell script.
dotnet pack $(Build.SourcesDirectory)\src\example\example.csproj -o $(Build.ArtifactStagingDirectory)\Pack -c Release /p:Version=$(Build.BuildNumber)
Примечание. Он не обновляет ссылочные версии пакетов.