Versión de revisión SVN en .NET Assembly sin CC.NET

¿Hay alguna forma de include el número de revisión del repository 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 file 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 numbers de versión de ensamblaje generalmente están en assemblyinfo.cs

Aquí y C # ejemplo para actualizar la información de revisión en el set de forma automática. Se basa en la respuesta de Will Dean, que no es muy elaborada.

Ejemplo:

  1. Copie AssemblyInfo.cs en AssemblyInfoTemplate.cs en las properties de la carpeta del proyecto.
  2. Cambie la acción de compilation a Ninguno para AssemblyInfoTemplate.cs.
  3. Modifique la línea con AssemblyFileVersion para:

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

  4. 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.

  5. Agregue el siguiente evento de precompilation a las properties del file de proyecto:

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

  6. Considere agregar AssemblyInfo.cs a la list de ignorar svn. Los numbers de revisión sustituidos y las dates modificarán el file, 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 numbers superiores a 2 ^ 16. La compilation se completará, pero la versión de file de propiedad en el ensamblado real será AssemblyFileVersion module 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 time.

  1. Ahora usa AssemblyInfo.cst en lugar de AssemblyInfoTemplate.cs, ya que automáticamente tendrá la opción de Acción de compilation Ninguna , y no saturará su list de errores, pero perderá el resaltado de syntax.
  2. He agregado dos testings a mis files 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 compilation de lanzamiento exitosa. De lo contrario, $ WCMIXED será verdadero. Esto parece ser causado por el hecho de que los files comprometidos están en la revisión principal después de la confirmación, pero otros files no.

  3. He tenido algunas dudas sobre si el primer parámetro para subwcrev, "$ (SolutionDir)", que establece el scope 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 file 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 precompilation como el de AssemblyInfo.cst y tendrá fácil acceso a toda la información relevante de SubVersion.

Es posible pero no debe: los componentes de la cadena de versión del ensamblaje están limitados a numbers de 16 bits (max 65535). Los numbers de revisión de Subversion pueden ser fácilmente más grandes, por lo que en algún momento el comstackdor se va a quejar de repente.

Lea / revise estos documentos:

Accediendo al repository de Subversion desde .NET usando DotSVN

Cómo escribir una tarea

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

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

La versión svnversion de MSBuildCommunityTasks mencionada en la tercera reference 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 repository 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 { [Requinetworking] 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 forma, permite que la ruta del repository sea "file: /// Y: / repo", donde Y: es un directory de Mac mapeado en Vista.

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 date.

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)

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

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 parsing sus resultados con una aplicación de línea de command 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 los numbers de revisión de Subversion en sus proyectos de Visual Studio

Si habilita las Palabras key de SVN, cada vez que ingrese el proyecto, Subversion escanea sus files en busca de ciertas "palabras key" y reemplaza las palabras key con cierta información.

Por ejemplo, en la parte superior de mis files fuente crearía un encabezado que contiene las siguientes palabras key:

'$ Autor: $
'$ Id: $
'$ Rev: $

Cuando verifico este file en Subversion, estas palabras key se reemplazan con lo siguiente:

'$ Autor: paulbetteridge $
'$ Id: mifile.vb 145 2008-07-16 15: 24: 29Z paulbetteridge $
'$ Rev: 145 $

Puede usar un file compartido de Versión de ensamblaje al que puede hacer reference 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 get versiones en sus ensamblajes.