AppVeyor has support for setting the version of a binary during a build. However - this deals with the classic ASP.Net world of AssemblyInfo
. I didn't find any reference to support for doing the same with dot net core. Remember, dot net core relies upon a <Version>
or a <VersionPrefix>
setting in the .csproj
file. Personally, <Version>
is my jam.
However, coming up with your own bit of powershell that stamps the version during the build is a doddle; here we go:
Param($projectFile, $buildNum)
$content = [IO.File]::ReadAllText($projectFile)
$regex = new-object System.Text.RegularExpressions.Regex ('()([\d]+.[\d]+.[\d]+)(.[\d]+)(<\/Version>)',
[System.Text.RegularExpressions.RegexOptions]::MultiLine)
$version = $null
$match = $regex.Match($content)
if($match.Success) {
# from "1.0.0.0 " this will extract "1.0.0"
$version = $match.groups[2].value
}
# suffix build number onto $version. eg "1.0.0.15"
$version = "$version.$buildNum"
# update "1.0.0.0 " to "$version "
$content = $regex.Replace($content, '${1}' + $version + '${4}')
# update csproj file
[IO.File]::WriteAllText($projectFile, $content)
# update AppVeyor build
Update-AppveyorBuild -Version $version
You can invoke this script as part of the build process in AppVeyor by adding something like this to your appveyor.yml
.
before_build:
- ps: .\ModifyVersion.ps1 $env:APPVEYOR_BUILD_FOLDER\src\Proverb.Web\Proverb.Web.csproj $env:APPVEYOR_BUILD_NUMBER
It will keep the first 3 parts of the version in your .csproj
(eg "1.0.0") and suffix on the build number supplied by AppVeyor.