Obteniendo el número de revisión de copy de trabajo de SVN en VersionInfo.cs

Todos nuestros proyectos en nuestro SLN comparten un VersionInfo.cs que contiene el número de versión del proyecto

[assembly: AssemblyVersion("0.0.1.0")] [assembly: AssemblyFileVersion("0.0.1.0")] 

Quiero definir estáticamente las 3 primeras partes del número de versión y la última parte que quiero que sea la copy de trabajo de la revisión SVN.

El paso número uno es definir un evento de preconstrucción en VS que desencadena un script cmd, ¿hay alguna manera fácil de get la revisión de copy de trabajo desde cmd?

El paso número dos es insert ese número en el file VersionInfo.cs

Probablemente haya forms más elegantes de hacerlo, si tiene una en la tienda solo tenga en count que este es un proyecto de código abierto y no tenemos un server de compilation sofisticado ni nada de eso. El procedimiento de implementación es simplemente poner el proyecto en modo de lanzamiento y compilation: D

¿Hay alguna manera fácil de get la revisión de copy de trabajo desde cmd?

Hay un ejecutable llamado svnversion.exe que imprime en la salida estándar la revisión. Si se asegura de que esto esté en su PATH , podría llamar a esto.

Para insert ese número en el file VersionInfo.cs

Puede generar el file VesionInfo.cs completa o parcialmente desde un file por lotes:

 @echo off FOR /F %%A in ('svnversion') do SET SVN_REV=%%A echo [assembly: AssemblyVersion("0.0.1.%SVN_REV%")] > VersionInfo.cs echo [assembly: AssemblyFileVersion("0.0.1.%SVN_REV%")] >> VersionInfo.cs 

EDITAR:

Archivo de process por lotes actualizado para hacer frente a los numbers de revisión del formatting RR , NN:RR y NN:RRM donde NN es un número integer y RR es la revisión:

 @ECHO off FOR /F "tokens=1,2 delims=:M" %%A in ('svnversion') do SET PART_1=%%A&SET PART_2=%%B IF NOT DEFINED PART_2 ( SET SVN_REV=%PART_1% ) IF NOT DEFINED SVN_REV ( SET SVN_REV=%PART_2% ) ECHO [assembly: AssemblyVersion("0.0.1.%SVN_REV%")] > VersionInfo.cs ECHO [assembly: AssemblyFileVersion("0.0.1.%SVN_REV%")] >> VersionInfo.cs 
  • Si es VisualStudio, es Windows
  • Si es Windows, puede usar SubWCRev desde TortoiseSVN

    1. Escriba la plantilla de VersionInfo.cs en el repository en lugar del file final, reemplazando parte de los datos reemplazables por (apropiado) SubWCRev-keyword
    2. En cada process de compilation, ejecute SubWCRev, que escribe el file final con los datos reales de la plantilla y datos WC (el generador completo puede ser / iniciado / simplemente como svn export + subwcrev wc-path VersionInfo.cs.tpl VersionInfo.cs )

La solución de hmjd: s solo estaba a la mitad. Si escribe en el file cada vez que comstack todos los proyectos que necesita rebuild, incluso si nada ha cambiado, alteré el script para que solo escriba en el file si es un nuevo número de revisión.

 @ECHO off FOR /F "tokens=1,2 delims=:M" %%A in ('svnversion ../ -c') do SET PART_1=%%A&SET PART_2=%%B SET file=../VersionInfo.cs IF NOT DEFINED PART_2 ( SET SVN_REV=%PART_1% ) IF NOT DEFINED SVN_REV ( SET SVN_REV=%PART_2% ) set result=0 for /f "tokens=3" %%f in ('find /c /i ".%SVN_REV%." %file%') do set result=%%f IF %result% gtr 0 ( GOTO end ) ECHO using System.Reflection; > %file% ECHO [assembly: AssemblyVersion("0.1.%SVN_REV%.0")] >> %file% ECHO [assembly: AssemblyFileVersion("0.1.%SVN_REV%.0")] >> %file% :end 

Descargue MSBuild Community Task e instálelo.

Abra su label .csproj y al final (antes del cierre </project> )

Pegue el siguiente código (no cambie la label <Import> ):

 <Import Project="$(MSBuildExtensionsPath)\MSBuildCommunityTasks\MSBuild.Community.Tasks.Targets" /> 

Después de la label <Import> pegue lo siguiente:

  <Target Name="BeforeBuild"> <SvnVersion LocalPath="$(MSBuildProjectDirectory)" ToolPath="$(ProgramFiles)\TortoiseSVN\bin"> <Output TaskParameter="Revision" PropertyName="Revision" /> </SvnVersion> <FileUpdate Files="Properties\AssemblyInfo.cs" Regex="(\d+)\.(\d+)\.(\d+)\.(\d+)" ReplacementText="$1.$2.$3.$(Revision)" /> </Target> 

Observe Attribute ToolPath dentro de la label SvnVersion, allí debe identificar la location en la que se encuentra el file binary svnversion.exe .

Suponiendo que tiene instalado el software TortoiseSVN, la ruta de acceso es: C:\ProgramFiles\TortoiseSVN\bin\ También puede usar los binarys de VisualSVN (en este caso, el file binary se encuentra en C:\ProgramFiles\VisualSVN\bin\ )

Con esta modificación en su .csproj, en cada proyecto de construcción, MSBuild primero llamará a svnversion.exe (con el argumento, el directory de solución actual) y la versión de svn devolverá el número de revisión para ese repository. En la label FileUpdate, MSBuild searchá el patrón de expresiones regulares y luego lo replaceá con los valores actuales de Mayor, Menor y Comstackción ($ 1, $ 2 y $ 3 respectivamente) y actualizará la Revisión con el valor de Revisión variable

Puede intentar usar los sustitutos de palabra key para replace el número mientras se compromete. Ellos tienen esto como un ejemplo:

 $Rev$: Revision of last commit $Author$: Author of last commit $Date$: Date of last commit