Click here to Skip to main content
65,938 articles
CodeProject is changing. Read more.
Articles
(untagged)

Autoincrement Version in Visual Studio

0.00/5 (No votes)
12 May 2010 1  
Autoincrement version in Visual Studio

Introduction

This is a small application with source code provided. It helps organize version auto increment in C# projects.

Using the Code

Usage:

vbinc -[af1234]|[-c]|[-h]

Options:

  • a Increment assembly version
  • f Increment file version
  • 1 Increment +1.x.x.x (Increments major version)
  • 2 Increment x.+1.x.x (Increments minor version)
  • 3 Increment x.x.+1.x (Increments build)
  • 4 Increment x.x.x.+1 (Increments revision)
  • c Just show current version
  • h this help screen.

Example:

vbinc -af34

Increments assembly and file build and revision numbers.

C# has version format like [major version].[minor].[build].[revision]

Installation:
  • Put vbinc.exe to the root of solution
  • Put lines
if  $(ConfigurationName) == Debug $(ProjectDir)vbinc.exe -af4
if  $(ConfigurationName) == Release $(ProjectDir)vbinc.exe -af34

or if your path contains a space character, try enclosing the $(ProjectDir) in quotes

if  $(ConfigurationName) == Debug "$(ProjectDir)"vbinc.exe -af4
if  $(ConfigurationName) == Release "$(ProjectDir)"vbinc.exe -af34

to Pre-Build event command line of each project.

From now, every Debug build will increment [revision] of assembly and file before build of project.

And every Release build will increment [build] and [revision] of assembly and file.

using System;
using System.Diagnostics;
using System.IO;
using System.Text.RegularExpressions;

namespace vbinc
{
    class Program
    {
        private static int _incMajor = 0;
        private static int _incMinor = 0;
        private static int _incRevno = 0;
        private static int _incBuild = 0;

        private static bool _bshow;
        private static bool _bassemply;
        private static bool _bfile;

        private const string Pattern1 = 
                    @"\[assembly\: AssemblyVersion\
			(""(\d{1,})\.(\d{1,})\.(\d{1,})\.(\d{1,})""\)\]";
        private const string Pattern2 =
                    @"\[assembly\: AssemblyFileVersion\
			(""(\d{1,})\.(\d{1,})\.(\d{1,})\.(\d{1,})""\)\]";

        private const string VersionFile = @"..\..\Properties\AssemblyInfo.cs";
        private const string BackupFile = @"..\..\Properties\AssemblyInfo.~cs";

        static void Main(string[] args)
        {
            try
            {
                if(!ParseCmdLine(args))
                {
                    ShowUsage();
                    return;
                };

                string str = File.ReadAllText(VersionFile);
                string result;                

                if (_bassemply || _bshow) result = GetResult
			(Pattern1, str, "AssemblyVersion");
                else result = str;
                if (_bfile || _bshow) result = GetResult
			(Pattern2, result, "AssemblyFileVersion");

                if (!_bshow)
                {
                    File.Delete(BackupFile);
                    File.Copy(VersionFile, BackupFile);
                    File.WriteAllText(VersionFile, result);
                }
                forDebug();
            }
            catch (Exception ex)
            {
                Console.WriteLine("ERR: " + ex.Message);
            }
        }

        [Conditional("DEBUG")]
        private static void forDebug()
        {
            Console.ReadKey();
        }

        public static bool ParseCmdLine(string[] args)
        {
            if (args.Length == 0) return false;
            string astr;

            foreach (string arg in args)
            {
                if(arg.StartsWith("-"))
                {
                    astr = arg.ToLower();
                    if (astr.Contains("a")) _bassemply = true;
                    if (astr.Contains("f")) _bfile = true;
                    if (astr.Contains("1")) _incMajor = 1;
                    if (astr.Contains("2")) _incMinor = 1;
                    if (astr.Contains("3")) _incBuild = 1;
                    if (astr.Contains("4")) _incRevno = 1;
                    if (astr.Contains("c")) _bshow = true;
                }

                if (arg.ToLower().StartsWith("-h")) return false;

                if (_bshow)
                {
                    _incMajor = 0;
                    _incMinor = 0;
                    _incBuild = 0;
                    _incRevno = 0;
                }
            }
            return true;
        }

        public static void ShowUsage()
        {
            Console.WriteLine("vbinc v{0}", 
		Process.GetCurrentProcess().MainModule.FileVersionInfo.FileVersion);

            Console.WriteLine("Autoincrement version in c# projects. by vdasus.com");
            Console.WriteLine("");
            Console.WriteLine("usage: vbinc -[af1234]|[-c]|[-h]");
            Console.WriteLine("Options");
            Console.WriteLine("\t-a Increment assembly version");
            Console.WriteLine("\t-f Increment file version");
            Console.WriteLine("\t-1 Increment +1.x.x.x");
            Console.WriteLine("\t-2 Increment x.+1.x.x");
            Console.WriteLine("\t-3 Increment x.x.+1.x");
            Console.WriteLine("\t-4 Increment x.x.x.+1");
            Console.WriteLine("\t-c Just show current version");
            Console.WriteLine("\t-h this help screen.");
            Console.WriteLine("");
            Console.WriteLine("Example: vbinc -af34");
            Console.WriteLine("Increments assembly and file build and revision numbers.");

            Console.WriteLine("");

            Environment.Exit(0);
        }

        private static string GetResult(string pattern, string str, string app)
        {
            Regex r = new Regex(pattern);
            Match m = r.Match(str);

            string rz = string.Format("[assembly: {4}(\"{0}.{1}.{2}.{3}\")]"
                , GetInc(m.Groups[1].Value, _incMajor)
                , GetInc(m.Groups[2].Value, _incMinor)
                , GetInc(m.Groups[3].Value, _incBuild)
                , GetInc(m.Groups[4].Value, _incRevno)
                , app);

            Console.WriteLine(rz);

            return r.Replace(str, rz);
        }

        private static int GetInc(string aVer, int adoInc)
        {
            return Convert.ToInt32(aVer) + adoInc;
        }
    }
}  

History

  • 12th May, 2010: Initial post

License

This article has no explicit license attached to it but may contain usage terms in the article text or the download files themselves. If in doubt please contact the author via the discussion board below.

A list of licenses authors might use can be found here