Pregunta

¿Hay alguna forma de incluir el número de revisión del repositorio SVN en la cadena de versión de un ensamblado .NET?Algo así como Mayor.Minor.SVNRev

He visto mención de hacer esto con algo como CC.NET (aunque en realidad en ASP.NET), pero ¿hay alguna manera de hacerlo sin ningún software adicional?He hecho cosas similares en C/C++ antes de usar scripts de compilación por lotes, pero se logró leyendo el número de versión y luego haciendo que el script escribiera un archivo llamado "ver.h" cada vez con algo como:

#define MAJORVER 4
#define MINORVER 23
#define SOURCEVER 965

Luego usaríamos estas definiciones para generar la cadena de versión.

¿Es posible algo como esto para .NET?

¿Fue útil?

Solución

Eche un vistazo a SubWCRev - http://tortoisesvn.net/docs/release/TortoiseSVN_en/tsvn-subwcrev.html

Los números de versión del ensamblador suelen estar en ensambladorinfo.cs

Otros consejos

Aquí hay un ejemplo de C# para actualizar automáticamente la información de revisión en el ensamblado.Se basa en la respuesta de Will Dean, que no es muy elaborada.

Ejemplo :

  1. Copiar ensamblyinfo.cs a ensamblableinfotemplate.cs en la carpeta del proyecto Propiedades.
  2. Cambiar el Construir acción a Ninguno para AssemblyInfoTemplate.cs.
  3. Modifique la línea con AssemblyFileVersion para:

    [assembly: AssemblyFileVersion("1.0.0.$WCREV$")]

  4. Considere agregar:

    [assembly: AssemblyInformationalVersion("Build date: $WCNOW=%Y-%m-%d %H:%M:%S$; Revision date: $WCDATE=%Y-%m-%d %H:%M:%S$; Revision(s) in working copy: $WCRANGE$$WCMODS?; WARNING working copy had uncommitted modifications:$.")],

    que brindará detalles sobre el estado de revisión de la fuente a partir de la cual se construyó el ensamblaje.

  5. Agregue el siguiente evento previo a la compilación a las propiedades del archivo del proyecto:

    subwcrev "$(SolutionDir)." "$(ProjectDir)Properties\AssemblyInfoTemplate.cs" "$(ProjectDir)Properties\AssemblyInfo.cs" -f

  6. Considere agregar AssemblyInfo.cs a la lista de ignorados de svn.Los números y fechas de revisión sustituidos modificarán el archivo, lo que resultará en cambios y revisiones insignificantes y $WCMODS$ se evaluará como verdadero.Por supuesto, AssemblyInfo.cs debe incluirse en el proyecto.

En respuesta a las objeciones de Wim Coenen, observé que, a diferencia de lo sugerido por Darryl, la versión AssemblyFileVersion también no números de soporte superiores a 2^16.La construcción se completará, pero la propiedad Versión del archivo en el ensamblaje real será el módulo AssemblyFileVersion 65536.Por lo tanto, 1.0.0.65536 y 1.0.0.131072 producirán 1.0.0.0, etc.En este ejemplo, siempre aparece el número de revisión verdadero en la propiedad AssemblyInformationalVersion.Podría omitir el paso 3 si considera que se trata de un problema importante.

Editar:Alguna información adicional después de haber usado esta solución por un tiempo.

  1. Ahora usa AssemblyInfo.cst en lugar de AssemblyInfoTemplate.cs, porque automáticamente tendrá Construir acción opción Ninguno, y no abarrotará su lista de errores, pero perderá el resaltado de sintaxis.
  2. Agregué dos pruebas a mis archivos AssemblyInfo.cst:

    #if(!DEBUG)    
        $WCMODS?#error Working copy has uncommitted modifications, please commit all modifications before creating a release build.:$ 
    #endif 
    #if(!DEBUG)       
        $WCMIXED?#error Working copy has multiple revisions, please update to the latest revision before creating a release build.:$ 
    #endif
    

    Al utilizar esto, normalmente tendrá que realizar una actualización SVN completa, después de una confirmación y antes de poder realizar una versión de lanzamiento exitosa.De lo contrario, $WCMIXED será verdadero.Esto parece deberse al hecho de que los archivos confirmados vuelven a la revisión principal después de la confirmación, pero otros archivos no.

  3. He tenido algunas dudas sobre si el primer parámetro de subwcrev, "$(SolutionDir)", que establece el alcance para verificar la información de la versión svn, siempre funciona como se desea.Tal vez debería ser $(ProjectDir), si está satisfecho con que cada ensamblaje individual esté en una revisión consistente.

Suma Para responder al comentario de @tommylux.

SubWcRev se puede utilizar para cualquier archivo de su proyecto.Si desea mostrar información de revisión en una página web, puede usar esta plantilla VersionInfo:

public class VersionInfo
{       
    public const int RevisionNumber = $WCREV$;
    public const string BuildDate = "$WCNOW=%Y-%m-%d %H:%M:%S$";
    public const string RevisionDate = "$WCDATE=%Y-%m-%d %H:%M:%S$";
    public const string RevisionsInWorkingCopy = "$WCRANGE$";
    public const bool UncommitedModification = $WCMODS?true:false$;
}

Agregue un evento previo a la compilación como el de AssemblyInfo.cst y tendrá fácil acceso a toda la información relevante de SubVersion.

Es posible pero no deberías:los componentes de la cadena de versión ensamblada están limitados a números de 16 bits (máximo 65535).Los números de revisión de Subversion pueden fácilmente llegar a ser mayores que eso, por lo que en algún momento el compilador de repente se quejará.

Lea/hojee estos documentos:

Accediendo al repositorio de Subversion desde .NET usando DotSVN

Cómo:escribir una tarea

Inserte la versión SVN y el número de compilación en su archivo C# AssemblyInfo

Compilación de aplicaciones con tareas personalizadas para Microsoft Build Engine

La versión svn de MSBuildCommunityTasks mencionada en la tercera referencia no funcionaría con svn en Mac 10.5.6 y la compilación del proyecto VS2008 C# dentro de Parallels hosting Vista (es decir, en todos los sistemas operativos).

Escriba su propia tarea para recuperar la revisión del repositorio usando DotSVN:

using System;
using Microsoft.Build.Framework;
using Microsoft.Build.Utilities;
using DotSVN.Common;
using DotSVN.Common.Entities;
using DotSVN.Common.Util;
using DotSVN.Server.RepositoryAccess;

namespace GetSVNVersion
{
    public class GetRevision : Task
    {
        [Required]
        public string Repository { get; set; }
        [Output]
        public string Revision { get; set; }

        public override bool Execute()
        {
            ISVNRepository repo;
            bool connected = true;
            try
            {
                repo = SVNRepositoryFactory.Create(new SVNURL(Repository));
                repo.OpenRepository();
                Revision = repo.GetLatestRevision().ToString();
                Log.LogCommandLine(Repository + " is revision " + Revision);
                repo.CloseRepository();
            }
            catch(Exception e)
            {
                Log.LogError("Error retrieving revision number for " + Repository + ": " + e.Message);
                connected = false;
            }
            return connected;
        }
    }
}

De esta manera se permite que la ruta del repositorio sea "file:///Y:/repo" donde Y:es un directorio de Mac asignado a Vista.

Otra respuesta mencionó que el número de revisión SVN podría no ser una buena idea debido al límite en el tamaño del número.

El siguiente enlace proporciona no solo un número de revisión de SNV, sino también una plantilla de información de versión de fecha.

Agregar esto a un proyecto .NET es simple: es necesario realizar muy poco trabajo.

Aquí hay un proyecto de github que aborda estohttps://github.com/AndrewFreemantle/When-The-Version/downloads

La siguiente URL puede cargarse lentamente, pero es una explicación paso a paso de cómo hacer que esto funcione (fácil y breve de 3 o 4 pasos).

http://www.fatlemon.co.uk/2011/11/wtv-automatic-date-based-version-numbering-for-net-with-whentheversion/

svn info, le indica la versión en la que se encuentra, puede crear un evento "precompilado" en VS en su proyecto para generar el archivo asambleainfo.cs ejecutando svn info y analizando sus resultados con una aplicación de línea de comandos propia.

He hecho esto antes, pero rápidamente cambié a que ccnet lo pasara como una variable a nant.

Si desea actualizar el número de versión en un proyecto AssemblyInfo.cs, puede que le interese este artículo:

Proyecto de código:Utilice números de revisión de Subversion en sus proyectos de Visual Studio

Si habilita las palabras clave SVN, cada vez que ingrese al proyecto, Subversion escanea sus archivos en busca de ciertas "palabras clave" y las reemplaza con cierta información.

Por ejemplo, en la parte superior de mis archivos fuente, crearía un encabezado que contenga las siguientes palabras clave:

'$Autor:$
'$Identificación:$
'$Rev:$

Cuando reviso este archivo en Subversion, estas palabras clave se reemplazan con lo siguiente:

'$Autor:pablobetteridge$
'$Identificación:myfile.vb 145 2008-07-16 15:24:29Z paulbetteridge $
'$ Rev:145$

Puede utilizar un archivo de versión de ensamblaje compartido al que pueda hacer referencia en todos sus proyectos.

Uppercut Haz esto - http://ferventcoder.com/archive/2009/05/21/uppercut---automated-builds---versionbuilder.aspx

Esto le dará una idea de lo que puede hacer para obtener versiones en sus ensamblajes.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top