Autoincrementar el “Assembly Version” de nuestro proyecto.
A propósito de mi último post, mi encuentro con el equipo de tres desarrolladores propicio una discusión en torno a cómo controlar el número de versión de cada proyecto, después de discutir llano y largo lo oportuno de realizar estas tareas de una manera centralizada desde los gestores de “Control de Código” y dando por imposible entenderlo de otra forma, se me planteo el reto de cómo poder incrementar el número de versión del ensamblado del proyecto desde el propio código del proyecto de forma automática y en función a si se estaba haciendo un ‘debug’ o un ‘release’.
Evidentemente el siguiente código, muestra y demuestra que es posible aunque debo rehuir de cualquier otra interpretación para tales prácticas, pues creo que es evidente que salvo excepciones no pueden ser tomadas más que como un ejercicio “curioso”.
using System;
using System.Text.RegularExpressions;
using System.Windows.Forms;
namespace VersionString
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
SetNewVersion();
LblVersion.Text = Application.ProductVersion.ToString();
}
private void SetNewVersion()
{
try
{
string AssemblyFile = @"..\..\Properties\AssemblyInfo.cs";
string str = System.IO.File.ReadAllText(AssemblyFile);
Regex r = new Regex(@"\[assembly\: AssemblyVersion\(""(\d{1,})\.(\d{1,})\.(\d{1,})\.(\d{1,})""\)\]");
Match m = r.Match(str);
string rz = string.Format("[assembly: {4}(\"{0}.{1}.{2}.{3}\")]"
, m.Groups[1].Value
, m.Groups[2].Value
, m.Groups[3].Value
, Convert.ToString((Convert.ToInt16(m.Groups[4].Value))+1)
, "AssemblyVersion");
System.IO.File.WriteAllText(AssemblyFile, r.Replace(str, rz));
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
}
}
A falta de convencer al equipo para que se animen a utilizar algunos de los excelentes gestores de código para visual studio, aquí va mi dedicatoria… a demás con el código reclamo esa ronda de cervezas. J
PepLluis,