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