using System; using System.IO; using System.Text.RegularExpressions; namespace IncrementAssemblyVersion { class Program { private const int MaxBuildVersion = 999; private static string AssemblyVersionPattern = "\\[(?:\\s+)?assembly(?:\\s+)?:(?:\\s+)?AssemblyVersion(?:\\s+)?\\(\"(?:\\s +)?(\\d+).(\\d+).(\\d+).(\\d+)\"(?:\\s+)?\\)(?:\\s+)?\\]"; static int Main(string[] args) { if (args == null || args.Length == 0) { Console.WriteLine("Syntax: IncrementAssemblyVersion.exe [root path of you solution]"); return 1; } string applicationRootPath = args[0]; // @"D:\Desktop\IncrementAssemblyVersion\IncrementAssemblyVersion\"; string pathAssemblyInfo = Path.Combine(applicationRootPath, @"Properties\", "AssemblyInfo.cs"); Console.WriteLine("----------------------------------------------------"); Console.WriteLine("------------- IncrementAssemblyVersion -------------"); Console.WriteLine("----------------------------------------------------"); Console.WriteLine("Path to solution: '" + applicationRootPath + "'"); Console.WriteLine("File path: '" + pathAssemblyInfo + "'"); FileInfo info = new FileInfo(pathAssemblyInfo); if (info.Exists) { bool removedReadOnlyFlag = false; if (info.IsReadOnly) { Console.WriteLine("Remove ReadOnly Flag"); removedReadOnlyFlag = true; File.SetAttributes(info.FullName, File.GetAttributes(info.FullName) & ~FileAttributes.ReadOnly); } string[] lines = File.ReadAllLines(info.FullName); for (int i = 0; i MaxBuildVersion) { minor++; build = 0; } Console.WriteLine($" to {major}.{minor}.{build}.{revision}"); string newLineContent = $"[assembly: AssemblyVersion(\"{major}.{minor}.{build}.{revision}\")]"; lines[i] = lines[i].Replace(assemblyVersionMatch.Value, newLineContent); } } Console.WriteLine("Save file"); File.WriteAllLines(pathAssemblyInfo, lines); if (removedReadOnlyFlag) { Console.WriteLine("Set ReadOnly flag"); File.SetAttributes(pathAssemblyInfo, File.GetAttributes(pathAssemblyInfo) | FileAttributes.ReadOnly); } return 0; } else { Console.WriteLine($"Cannot find the assembly info file '{pathAssemblyInfo}'"); return 1; } } } }