Click here to Skip to main content
11,411,128 members (63,709 online)
Click here to Skip to main content

Tagged as

Autoincrement Version in Visual Studio

, 12 May 2010 CPOL
Rate this:
Please Sign up or sign in to vote.
Autoincrement version in Visual Studio


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

Using the Code


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


  • 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.


vbinc -af34

Increments assembly and file build and revision numbers.

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

  • 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\
        private const string Pattern2 =
                    @"\[assembly\: AssemblyFileVersion\

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

        static void Main(string[] args)

                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.Copy(VersionFile, BackupFile);
                    File.WriteAllText(VersionFile, result);
            catch (Exception ex)
                Console.WriteLine("ERR: " + ex.Message);

        private static void forDebug()

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

            foreach (string arg in args)
                    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}", 

            Console.WriteLine("Autoincrement version in c# projects. by");
            Console.WriteLine("usage: vbinc -[af1234]|[-c]|[-h]");
            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("Example: vbinc -af34");
            Console.WriteLine("Increments assembly and file build and revision numbers.");



        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);


            return r.Replace(str, rz);

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


  • 12th May, 2010: Initial post


This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)


About the Author


Lithuania Lithuania
No Biography provided

Comments and Discussions

QuestionNo visible action taken Pinmemberbarriesargent23-May-14 7:41 
SuggestionPre-build Pinmemberkptkachenko6-Feb-14 20:41 
GeneralMy vote of 4 PinmemberAli Taghvajou19-Jan-13 20:04 
GeneralRe: My vote of 4 PinmemberAndy Neillans3-Jan-14 22:01 
QuestionError.. PinmemberYukiiii2-Aug-11 14:47 
AnswerRe: Error.. Pinmembervdasus3-Aug-11 0:11 
AnswerRe: Error.. PinmemberJoe Pizzi20-Sep-11 17:43 
GeneralRe: Error.. Pinmembervdasus20-Sep-11 22:14 
GeneralCant have it working... Pinmemberhenur22-Oct-10 22:45 
GeneralRe: Cant have it working... Pinmembervdasus25-Oct-10 8:14 
GeneralNice work PinmemberDonsw5-Jun-10 17:23 
Generalnew version releaseed :) Pinmembervdasus26-May-10 1:54 
GeneralRe: new version releaseed :) PinmemberRobin1-Jun-10 8:59 
GeneralRe: new version releaseed :) Pinmembervdasus1-Jun-10 9:31 
Link is not broken, i check it right now.

Second version is in another topic. Totally rewritten code to make utility not dependent from languages or vcs. With simple plugin subsystem you can make your own plugin and change versions in everywere where version can be found in files and by many ways Smile | :)

Link on topic: Autoincrement build version, using vcs (bazaar plugin included)[^]

Link to download source code:[^]

It's enough simple and very useful when you use Version Control System...

(Sorry for my english)
GeneralHas anyone tried this on a C++/CLI or C++/MFC Project PinmemberMicroImaging13-May-10 5:26 
GeneralRe: Has anyone tried this on a C++/CLI or C++/MFC Project Pinmembervdasus13-May-10 6:24 
GeneralRe: Has anyone tried this on a C++/CLI or C++/MFC Project Pinmembervdasus26-May-10 1:56 
GeneralLooks interesting Pinmembersupercat912-May-10 12:47 
GeneralRe: Looks interesting Pinmembervdasus12-May-10 22:33 
GeneralRe: Looks interesting Pinmembersupercat913-May-10 6:15 
GeneralRe: Looks interesting Pinmembervdasus13-May-10 6:22 
GeneralRe: Looks interesting Pinmembervdasus26-May-10 1:52 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.

| Advertise | Privacy | Terms of Use | Mobile
Web03 | 2.8.150414.5 | Last Updated 12 May 2010
Article Copyright 2010 by vdasus
Everything else Copyright © CodeProject, 1999-2015
Layout: fixed | fluid