В итоге префикс verisn должен использоваться 1.0.1 (или любой другой версией) из моего csproj и применяться к свойству версии файла как в двоичном dll, так и в пакете nuget.
Я также хотел бы установить для версии продукта dll значение c build-datetime (или строку коммита, которая использовалась в случае MediatR).
Помимо направления PowerShell , мы можем рассматривать свойство msbuild как другое направление.
Это мой test.csproj
:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>netstandard2.0</TargetFramework>
<!--Add other properties here.-->
</PropertyGroup>
<PropertyGroup> <!--Custom Property Group for CI/CD-->
<MyVersionPrefix>1.0.1</MyVersionPrefix>
<MyVersionSuffix>0</MyVersionSuffix>
<BuildDateTime>0</BuildDateTime>
<AssemblyVersion>$(MyVersionPrefix).$(MyVersionSuffix)</AssemblyVersion> <!--File Version-->
<Version>$(MyVersionPrefix).$(BuildDateTime)</Version> <!--Product Version-->
<PackageVersion>$(MyVersionPrefix).$(MyVersionSuffix)</PackageVersion> <!--Nuget Package Version-->
<Copyright>Just for test.</Copyright>
</PropertyGroup>
</Project>
У меня есть одна группа свойств для определения свойств, таких как File Version, Product Version and Package Version.
Вместо использования <VersionPrefix>1.0.1</VersionPrefix>
, я использую пользовательский <MyVersionPrefix>1.0.1</MyVersionPrefix>
.
Это может хорошо работать для восстановления, построения в локальной разработке. Если вам также необходимо упаковать проект локально, вы можете прокомментировать (используя <---->
) эту группу свойств.
Чтобы настроить этот проект с помощью CI / CD:
Мое мнение - переопределить свойства, определенные в xx.csproj
. Для меня я создал одну Suffix
конвейерную переменную:
![enter image description here](https://i.stack.imgur.com/4vFOJ.png)
и затем установил формат номера сборки конвейера: $(date:yyyyMMdd)$(rev:r)
.
Затем я задаю dotnet build task
и dotnet pack task
следующим образом:
- task: DotNetCoreCLI@2
displayName: "Build Solution"
inputs:
command: build
projects: '**/*.csproj'
arguments: '--configuration $(BuildConfiguration) -p:MyVersionSuffix=$(Suffix) -p:BuildDateTime=$(Build.BuildNumber)'
- task: DotNetCoreCLI@2
displayName: 'dotnet pack'
inputs:
command: pack
nobuild: true
buildProperties: 'MyVersionSuffix=$(Suffix)'
Таким образом, я могу передать значения $(Suffix)
и $(Build.BuildNumber)
из конвейера сборки в команду msbuild. Я могу управлять file version, product version, nuget package version
переменными конвейера. (О соответствующем свойстве файла, продукта, версии пакета см. Файл моего проекта выше.)
Если установить переменную Suffix 19
, то после сборки и пакета я могу получить пакет Nuget, версия пакета которого это 1.0.1.19
. В котором сборка имеет ту же версию файла 1.0.1.19
и версию продукта, как 1.0.1.202001208
. Если вам не нужна одна увеличивающаяся версия продукта, вы можете указать нужное значение в задаче сборки: -p:BuildDateTime=AnyValueYouWant
.
Надеюсь, это поможет, и если я что-то неправильно пойму, не стесняйтесь меня поправлять :)