.net - tortoise - svn repository
Versión de revisión SVN en.NET Assembly sin CC.NET (8)
¿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 Major.Minor.SVNRev
He visto mención de hacer esto con algo como CC.NET (aunque en ASP.NET en realidad), pero ¿hay alguna forma de hacerlo sin ningún software adicional? He hecho cosas similares en C / C ++ antes de usar scripts de creación de lotes, pero esto se logró leyendo el número de versión, y luego el script escribió un archivo llamado "ver.h" cada vez con algo en el sentido de:
#define MAJORVER 4
#define MINORVER 23
#define SOURCEVER 965
Entonces usaríamos estas definiciones para generar la cadena de versión.
¿Es posible algo así para .NET?
Eche un vistazo a SubWCRev - http://tortoisesvn.net/docs/release/TortoiseSVN_en/tsvn-subwcrev.html
Los números de versión de ensamblaje generalmente están en assemblyinfo.cs
svn info, le dice la versión en la que se encuentra, puede hacer un evento "pre-build" en VS en su proyecto para generar el assemblyinfo.cs ejecutando svn info y analizando sus resultados con una aplicación de línea de comando desarrollada desde su casa.
He hecho esto antes, pero cambié rápidamente a simplemente tener ccnet pasarlo como una variable para nant.
Si desea actualizar el número de versión en un proyecto AssemblyInfo.cs, puede estar interesado en este artículo:
CodeProject: use números de revisión de Subversion en sus proyectos de Visual Studio
Si habilita las Palabras clave de SVN, cada vez que ingrese el proyecto, Subversion escanea sus archivos en busca de ciertas "palabras clave" y reemplaza las palabras clave con cierta información.
Por ejemplo, en la parte superior de mis archivos fuente crearía un encabezado que contiene las siguientes palabras clave:
''$ Autor: $
''$ Id: $
''$ Rev: $Cuando verifico este archivo en Subversion, estas palabras clave se reemplazan con lo siguiente:
''$ Autor: paulbetteridge $
''$ Id: miarchivo.vb 145 2008-07-16 15: 24: 29Z paulbetteridge $
''$ Rev: 145 $
Es posible, pero no debe: los componentes de la cadena de versión del ensamblaje están limitados a números de 16 bits (max 65535). Los números de revisión de Subversion pueden ser fácilmente más grandes, por lo que en algún momento el compilador se va a quejar de repente.
Lea / revise estos documentos:
Accediendo al repositorio de Subversion desde .NET usando DotSVN
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 svnversion de MSBuildCommunityTasks mencionada en la tercera referencia no funcionaría con svn en Mac 10.5.6 y VS2008 C # project build dentro de Parallels que aloja Vista (es decir, en todo el sistema operativo).
Escribe tu 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, permite que la ruta del repositorio sea "file: /// Y: / repo", donde Y: es un directorio de Mac mapeado en Vista.
Puede usar un archivo compartido de Versión de ensamblaje al que puede hacer referencia en todos sus proyectos.
UppercuT hace 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.
Otra respuesta mencionó que el número de revisión de 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: se necesita muy poco trabajo.
Aquí hay un proyecto de Github que trata este https://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 (pasos simples y cortos de 3 o 4 pasos)
Aquí y C # ejemplo para actualizar la información de revisión en el conjunto de forma automática. Se basa en la respuesta de Will Dean, que no es muy elaborada.
Ejemplo:
- Copie AssemblyInfo.cs en AssemblyInfoTemplate.cs en las propiedades de la carpeta del proyecto.
- Cambie la acción de compilación a Ninguno para AssemblyInfoTemplate.cs.
Modifique la línea con AssemblyFileVersion para:
[assembly: AssemblyFileVersion("1.0.0.$WCREV$")]
Considera 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 proporcionará detalles sobre el estado de revisión de la fuente desde la que se creó el ensamblado.
Agregue el siguiente evento de precompilación a las propiedades del archivo de proyecto:
subwcrev "$(SolutionDir)." "$(ProjectDir)Properties/AssemblyInfoTemplate.cs" "$(ProjectDir)Properties/AssemblyInfo.cs" -f
Considere agregar AssemblyInfo.cs a la lista de ignorar svn. Los números de revisión sustituidos y las fechas modificarán el archivo, lo que da como resultado cambios y revisiones insignificantes y $ WCMODS $ se evaluará como verdadero. AssemblyInfo.cs debe, por supuesto, estar incluido en el proyecto.
En respuesta a las objeciones de Wim Coenen, noté que, en contraste con lo sugerido por Darryl, AssemblyFileVersion tampoco admite números superiores a 2 ^ 16. La compilación se completará, pero la versión de archivo de propiedad en el ensamblado real será AssemblyFileVersion módulo 65536. Por lo tanto, 1.0.0.65536 así como 1.0.0.131072 arrojarán 1.0.0.0, etc. En este ejemplo, siempre existe el verdadero número de revisión en la propiedad AssemblyInformationalVersion. Puede omitir el paso 3 si considera que es un problema importante.
Editar: alguna información adicional después de haber usado esta solución por un tiempo.
- Ahora usa AssemblyInfo.cst en lugar de AssemblyInfoTemplate.cs, ya que automáticamente tendrá la opción de Acción de compilación Ninguna , y no saturará su lista de errores, pero perderá el resaltado de sintaxis.
He agregado 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 usar esto, normalmente tendrá que realizar una actualización SVN completa, después de una confirmación y antes de que pueda hacer una compilación de lanzamiento exitosa. De lo contrario, $ WCMIXED será verdadero. Esto parece ser causado por el hecho de que los archivos comprometidos están en la revisión principal después de la confirmación, pero otros archivos no.
- He tenido algunas dudas sobre si el primer parámetro para subwcrev, "$ (SolutionDir)", que establece el alcance para verificar la información de la versión svn, siempre funciona como se desee. Tal vez, debería ser $ (ProjectDir), si está satisfecho si cada ensamblaje individual está en una revisión consistente.
Adición Para responder el comentario de @tommylux.
SubWcRev se puede usar para cualquier archivo en 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 de precompilación como el de AssemblyInfo.cst y tendrá fácil acceso a toda la información relevante de SubVersion.