Версия пакета всегда 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)

Примечание. Он не обновляет ссылочные версии пакетов.