kadu.sumit Ответов: 1

Как автоматически увеличить версию сборок в c#.net


Как автоматически Версировать сборки в C#.Net.

У меня есть следующее требование:
1.в моем решении у меня есть несколько библиотек DLL и EXE, которые строятся и развертываются.
2.я хотел бы версировать их все с одинаковыми номерами версий, и они должны увеличиваться автоматически, когда я строю свое решение в режиме выпуска, либо ручной сборки, либо автоматической сборки.


чего мне нужно добиться, так это того, что он должен автоматически увеличивать X. X.*.X, где * - номер сборки.

Пожалуйста, дайте мне знать, если кто-то сталкивался с этой ситуацией раньше и может помочь.

Спасибо

Что я уже пробовал:

Я пробовал ниже вещи, но никакой помощи:

1. модифицируйте файл AssemblyInfo.cs, указав '*' вместо нуля в номере версии, например "1.0.*"
2. Следующие шаги в этой статье, Правильный способ Версирования сборок[^]

1 Ответов

Рейтинг:
7

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