UpdateVersion.cs 2.70 KiB
// Run this from the working directory where the solution or project to build is located.
using System.Text.RegularExpressions;
var dirPath = "/home/buildagent";
var filePath = dirPath + "/version";
var startingVer = new Version(1,4,1, 0);
var updateVersion = Args[0];
// Get current version
WriteLine($"Preparing version file at {filePath}");
Directory.CreateDirectory(dirPath);
File.Open(filePath, FileMode.OpenOrCreate).Dispose();
var text = File.ReadAllText(filePath);
WriteLine($"Version string: {text}");
if (String.IsNullOrEmpty(text))
    WriteLine($"Version string is empty. Restoring default: {startingVer}");
    text = startingVer.ToString();
    File.WriteAllText(filePath, text);
var version = new Version(text);
int major = version.Major;
int minor = version.Minor;
int build = version.Build;
int snapshot = version.Revision == -1 ? 0 : version.Revision;
bool prereleaseBuild = false;
// Increment version if needed 
switch (updateVersion)
    case "major":
        WriteLine($"Updating Major version {major} -> {++major}");
        minor = 0;
        build = 0;
        snapshot = 0;
        break;
    case "minor":
        WriteLine($"Updating Minor version {minor} -> {++minor}");
        build = 0;
        snapshot = 0;
        break;
    case "build":
        if (snapshot == 0)
            WriteLine($"Updating Build version {build} -> {++build}");
        snapshot = 0;
        break;
    case "dev":
        if (snapshot == 0)
            WriteLine($"Updating Build version {build} -> {++build}");
        WriteLine($"Updating snapshot version {snapshot} -> {++snapshot}");
        prereleaseBuild = true;
        break;
// Update version 
var updatedVersion = new Version(major, minor, build, snapshot);
WriteLine($"Writing new version to file: {updatedVersion}");
File.WriteAllText(filePath, updatedVersion.ToString());
Props["version"] = updatedVersion.ToString(3);
// Find and backup .csproj files
var projects = Utils.ScanProjects("./", new List<string>());
Utils.CleanupBackupsFor(projects);
Utils.BackupProjects(projects);
7172737475767778798081828384
// Replace version info in .csproj files WriteLine($"Replacing versions in .csproj files"); var allRegex = new Regex(@"(<[a-zA-Z0-9]*Version>)(.*)(<\/[a-zA-Z0-9]*Version>)"); var packageRegex = new Regex(@"(<PackageVersion>)(.*)(<\/PackageVersion>)"); var prereleaseSuffix = prereleaseBuild ? $"-dev.{updatedVersion.Revision}" : ""; foreach (var project in projects) { var fileContent = File.ReadAllText(project); var modifiedContent = allRegex.Replace(fileContent, $"${{1}}{updatedVersion}${{3}}"); modifiedContent = packageRegex.Replace(modifiedContent, $"${{1}}{updatedVersion.ToString(3)}{prereleaseSuffix}${{3}}"); File.WriteAllText(project, modifiedContent); }