Mehdi Gholam
У меня есть следующее BuildVersion.cs
который является связанный файл в папке решения проектов :
using System.Reflection;
// build number = 368
// build version = 3.3.14
[assembly: AssemblyVersion("3.0.0.0")]
[assembly: AssemblyFileVersion("3.3.14.368")]
Следующей строкой в одном из проектов предварительно создать событие :
"$(SolutionDir)tools\buildversion.exe" "$(SolutionDir)buildversion.cs"
Номер сборки будет увеличиваться при каждой сборке, номера версий вы можете изменить вручную, когда это необходимо,
AssemblyVersion
и
AssemblyFileVersion
они отличаются друг от друга, поэтому, если вы используете GAC, он будет перезаписан для неразрушающих изменений, но вы все равно получите версию файла, если будете просматривать его в Проводнике.
И инкремент делается с помощью следующего кода, который компилируется в exe-файл :
using System;
using System.IO;
using System.Windows.Forms;
using System.Text.RegularExpressions;
namespace pp
{
public class pp
{
public static void Main(string[] args)
{
if(args.Length<1) return;
string filename = args[0];
string buildversion = "";
int buildnum = 0;
StreamReader sr = new StreamReader(filename);
string s = sr.ReadToEnd();
sr.Close();
string buildnumregex = @"\s*//\s*build\s*number\s*=\s*(?<num>\w*)";
string buildverregex = @"\s*//\s*build\s*version\s*=\s*(?<vers>[\w.]*)";
Regex mr = new Regex(
buildnumregex,
RegexOptions.IgnoreCase | RegexOptions.IgnorePatternWhitespace
);
Match m = mr.Match(s);
string ss= m.Groups["num"].Value;
if(ss !="")
{
buildnum = int.Parse(ss);
buildnum++;
s=mr.Replace(s,"\r\n// build number = "+buildnum.ToString());
}
mr = new Regex(
buildverregex,
RegexOptions.IgnoreCase | RegexOptions.IgnorePatternWhitespace
);
m = mr.Match(s);
ss =m.Groups["vers"].Value;
if(ss !="") buildversion = ss;
string currbuild = buildversion+"."+buildnum.ToString();
mr = new Regex(
@"AssemblyFileVersion\s*\(""(?<ver>[\w.]*"")",
RegexOptions.IgnoreCase | RegexOptions.IgnorePatternWhitespace
);
m=mr.Match(s);
s=mr.Replace(s,"AssemblyFileVersion(\""+ currbuild + "\"");
//MessageBox.Show(s);
StreamWriter sw = new StreamWriter(args[0]);
sw.Write(s);
sw.Close();
}
}
}