using System;
using System.IO;
using System.Text;
namespace SetAssemblyVersion
{
///
/// A small utility to stamp the version of our .net API assemblies
///
/// Original source: http://www.codeproject.com/Articles/31236/How-To-Update-Assembly-Version-Number-Automaticall
///
class AssemblyInfoUtil
{
private static int incParamNum = 0;
private static string fileName = "";
private static string versionStr = null;
private static bool isVB = false;
///
/// The main entry point for the application.
///
[STAThread]
static void Main(string[] args)
{
for (int i = 0; i < args.Length; i++)
{
if (args[i].StartsWith("-inc:"))
{
string s = args[i].Substring("-inc:".Length);
incParamNum = int.Parse(s);
}
else if (args[i].StartsWith("-set:"))
{
versionStr = args[i].Substring("-set:".Length);
}
else
fileName = args[i];
}
if (Path.GetExtension(fileName).ToLower() == ".vb")
isVB = true;
if (fileName == "")
{
System.Console.WriteLine("Usage: AssemblyInfoUtil [options]");
System.Console.WriteLine("Options: ");
System.Console.WriteLine(" -set: - set new version number (in NN.NN.NN.NN format)");
System.Console.WriteLine(" -inc: - increases the parameter with specified index (can be from 1 to 4)");
return;
}
if (!File.Exists(fileName))
{
System.Console.WriteLine("Error: Can not find file \"" + fileName + "\"");
return;
}
System.Console.Write("Processing \"" + fileName + "\"...");
StreamReader reader = new StreamReader(fileName);
StreamWriter writer = new StreamWriter(fileName + ".out");
String line;
while ((line = reader.ReadLine()) != null)
{
line = ProcessLine(line);
writer.WriteLine(line);
}
reader.Close();
writer.Close();
File.Delete(fileName);
File.Move(fileName + ".out", fileName);
System.Console.WriteLine("Done!");
}
private static string ProcessLine(string line)
{
if (isVB)
{
line = ProcessLinePart(line, "= 0)
{
spos += part.Length;
int epos = line.IndexOf('"', spos);
string oldVersion = line.Substring(spos, epos - spos);
string newVersion = "";
bool performChange = false;
if (incParamNum > 0)
{
string[] nums = oldVersion.Split('.');
if (nums.Length >= incParamNum && nums[incParamNum - 1] != "*")
{
Int64 val = Int64.Parse(nums[incParamNum - 1]);
val++;
nums[incParamNum - 1] = val.ToString();
newVersion = nums[0];
for (int i = 1; i < nums.Length; i++)
{
newVersion += "." + nums[i];
}
performChange = true;
}
}
else if (versionStr != null)
{
newVersion = versionStr;
performChange = true;
}
if (performChange)
{
StringBuilder str = new StringBuilder(line);
str.Remove(spos, epos - spos);
str.Insert(spos, newVersion);
line = str.ToString();
}
}
return line;
}
}
}