Можно ли получить версию nuspec формы 1.2.3.4 + Commit при использовании цели пакета msbuild? - PullRequest
0 голосов
/ 01 января 2019

У нас есть два способа создания пакета nuget:

  1. С явным файлом nuspec.
  2. Использование свойств msbuild nuspec.

Яисследуя вторую возможность.Демонстрационный проект находится на github - https://github.com/MarkKharitonov/MSBuildPackNuspecVersionDemo.git

При запуске build.ps1 выводятся следующие строки:

Building ...
Packing ...
Dll Product Version = 1.2.3.4+8d50ec0
Nuspec Version = 1.2.3.4

Интересно, возможно ли, чтобы версия Nuspec включала в себя коммит, как в DllВерсия продукта.

Важными файлами являются:

Directory.Build.props :

<Project>
  <PropertyGroup>
    <SourceControlInformationFeatureSupported>true</SourceControlInformationFeatureSupported>

    <Version>1.2.3.4</Version>
    <RepositoryType>git</RepositoryType>
    <RepositoryBranch>master</RepositoryBranch>
  </PropertyGroup>
  <Target Name="InitializeSourceControlInformation" />
</Project>

и build.ps1 :

$ErrorActionPreference = "Stop"
$LocateMSBuild = $true
if (Get-Command msbuild -ErrorAction SilentlyContinue)
{
    $MSBuildVersion = [Version](msbuild /nologo /version)
    $LocateMSBuild = $MSBuildVersion.Major -lt 15
    if (!$LocateMSBuild)
    {
        $MSBuild = "msbuild"
    }
}

if ($LocateMSBuild)
{
    $MSBuildHome = @("Enterprise", "Professional", "BuildTools", "Community") |ForEach-Object {
        "C:\Program Files (x86)\Microsoft Visual Studio\2017\$_\MSBuild\15.0"
    } |Where-Object { Test-Path "$_\bin\msbuild.exe" } | Select-Object -First 1

    if (!$MSBuildHome)
    {
        throw "Failed to locate msbuild 15"
    }

    $MSBuild = "$MSBuildHome\bin\msbuild.exe"
}

$Properties = @{
    SourceRevisionId = $(git rev-parse --short HEAD)
    RepositoryUrl = $(git remote get-url origin)
}

$MSBuildProperties = $Properties.GetEnumerator() | Where-Object { 
    $_.Value
} | ForEach-Object { 
    "/p:{0}={1}" -f $_.Key,$_.Value 
}

Write-Host "Building ..."
&$MSBuild /restore /v:q /nologo /nr:false $MSBuildProperties
if ($LastExitCode)
{
    exit $LastExitCode
}

Write-Host "Packing ..."
Remove-Item src\bin\Debug\*nupkg -ErrorAction SilentlyContinue
&$MSBuild /v:q /nologo /nr:false $MSBuildProperties /t:pack
if ($LastExitCode)
{
    exit $LastExitCode
}

$Dll = "src\bin\Debug\netstandard2\PackVersionTest.dll"
$VersionInfo = (Get-Item $Dll).VersionInfo
"Dll Product Version = $($VersionInfo.ProductVersion)"

$Nuspec = "src\obj\Debug\PackVersionTest.1.2.3.4.nuspec"
$Pattern = '.*<version>(.+)</version>'
$NuspecVersion = (Select-String -path $Nuspec -Pattern $Pattern) -replace $Pattern,'$1'
"Nuspec Version = $NuspecVersion"

1 Ответ

0 голосов
/ 03 января 2019

Я считаю, что изменение <Version>1.2.3.4</Version> на <Version>1.2.3.4+$(SourceRevisionId)</Version> должно сделать это, так как скрипт сборки передает хэш git commit как свойство msbuild с именем SourceRevisionId.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...