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,

2 pensamientos en “Autoincrementar el “Assembly Version” de nuestro proyecto.”

  1. Aunque no comprendo del todo la finalidad de este código, ni algunas referencias en el mensaje, y a riesgo de comentar algo ya conocido, simplemente decir, por si fuera de ayuda a ese equipo:

    – El propio VS tiene la opción de auto-incrementar alguna parte del número de versión si se pone, si no recuerdo mal, un asterisco (*) como valor.

    – Este método anterior es bastante limitado y está lleno de problemas, cuando se trabaja en un entorno un poco limitado, hay un add-in para VS genial llamado Build Version Increment repleto de opciones para modificar de forma automática el número de versión.

    – Para servidores de integración continua hay bastantes métodos externos (ya sea a través de MSBuild, NAnt, etc) para personalizar el número de versión.

    En mi experiencia personal, el tipo de versionado que mejor resultado me ha dado a la hora de identificar versiones y problemas han sido independientemente como partes finales usar un formato «año+día año».»hora+minutos», o «número de revisión/de build al que pertenece el código actual».

  2. Hector,
    Mas que explicacion, la finalidad de cuando me preguntaron si se podia conseguir, es demostrar que se puede aunque como bien dices existen multitud de soluciones para llevar a cabo esta tarea. Tomalo como un ejercicio donde se demuestra como puedes controlar el numero de Version, Compilacion y Revision bajo los criterios que consideres adecuados.

    Saludos,
    PepLluis,

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *