Обеспечение того, что azure конвейерная сборка dll и пакет nuget содержат ту же информацию, что и версия csproj - PullRequest
0 голосов
/ 20 января 2020

Я делаю репост с конкретным c вопросом , поскольку я понимаю, что сценарий powershell требуется в дополнение к azure -pipelines.yml .

Как бы мне добиться того же вывода / форматирования с использованием azure конвейеров, чтобы обеспечить следующее управление версиями в выходном файле (и соответствие информации пакета nuget для https://www.nuget.org/packages/MediatR/).

dll properties

Я понимаю, что это будет скрипт PowerShell, я проверил на MediatR и вижу https://github.com/jbogard/MediatR/blob/master/Build.ps1, но не вижу, как я применил бы это к azure шаг конвейера.

В итоге префикс verisn должен использоваться <VersionPrefix>1.0.1</VersionPrefix> (или какой бы то ни было версией) из моего csproj и применяться к свойству версии файла как в двоичном dll, так и в пакете nuget .

Я также хотел бы установить для версии продукта dll значение c build-datetime (или строку коммита, которая использовалась в случае MediatR).

Я специально ищу скрипт (powershell и связанный yaml, чтобы связать строки сценариев версии) и связанные с ними шаги, оцените большой вопрос, однако я не могу найти какие-либо конкретные ответы в Google или Stackorerflow - ссылка на учебник была бы идеальной.

Указатели приветствуются.

1 Ответ

1 голос
/ 20 января 2020

В итоге префикс 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

и затем установил формат номера сборки конвейера: $(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.

Надеюсь, это поможет, и если я что-то неправильно пойму, не стесняйтесь меня поправлять :)

...