Pregunta

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

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

Quiero staticly definir las 3 primeras partes de el número de versión y la última parte quiero ser la copia de trabajo SVN revisión.

El paso número uno es para definir un evento anterior a la compilación en el VS que desencadena una secuencia de comandos cmd, hay una manera fácil de llegar la copia de trabajo de revisión de cmd?

El paso número dos es para insertar ese número en el VersionInfo.cs archivo

Hay probablemente más elegantes maneras de hacer esto, si usted tiene uno en la tienda solo hay que tener en cuenta que este es un proyecto de fuente abierta y no tener una fantasía servidor de compilación ni nada de eso.La implementación del procedimiento se acaba de poner el proyecto en modo de lanzamiento y construir :D

¿Fue útil?

Solución 3

HMJD: S Solution fue solo la mitad de la mitad, si escribe al archivo cada vez que construyó todos los proyectos que se refieren a la versión de VersionFile deben reconstruir incluso si nada ha cambiado, modificé el script para escribir solo al archivo.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

Otros consejos

Hay una manera fácil de llegar la copia de trabajo de revisión de cmd?

Hay un ejecutable llamado svnversion.exe que se imprime en la salida estándar la revisión.Si usted asegurar que este está en su PATH puede llamar a este.

Para insertar ese número en el VersionInfo.cs archivo

Se podría generar la VesionInfo.cs archivo completo o parcialmente, a partir de un archivo 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:

Actualizado archivo de proceso por lotes para hacer frente con números de revisión del formato RR, NN:RR y NN:RRM donde NN es un número entero 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 de TORNISISVN

    1. Escribir plantilla de versionInfo.cs en el repositorio en lugar de un archivo final, hay una parte cambiante de los datos reemplazados por (apropiado) Subwcrev-Palabra clave
    2. En cada proceso de construcción, que escribe Subwcrev, que escribe el archivo final con datos reales de la plantilla y los datos de WC (el constructor completo puede ser / se iniciará como simplemente como svn export + subwcrev wc-path VersionInfo.cs.tpl VersionInfo.cs)

Descargar MSBuild Tareas De La Comunidad e instalarlo.

Abre tu .csproj y al final (antes de su cierre </project> tag)

Pegue el código siguiente (no cambiar el <Import> tag):

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

Después de la <Import> etiqueta pegue el 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>

Mira el Atributo La trayectoria de la herramienta dentro de SvnVersion etiqueta, allí es donde se debe identificar la ubicación donde en su máquina es la svnversion.exe archivo binario.

Asumiendo que usted tiene el TortoiseSVN software instalado, la Ruta de acceso es: C:\ProgramFiles\TortoiseSVN\bin\ También se podría utilizar el VisualSVN binarios (en este caso, el archivo binario se encuentra en C:\ProgramFiles\VisualSVN\bin\)

Con esta modificación en su .csproj, en cada proyecto de construir, el de MSBuild primero llame a la svnversion.exe (con argumento, la solución actual directorio) y el svnversion devolverá el número de revisión de ese repositorio.En el FileUpdate etiqueta, MSBuild voluntad de búsqueda de la expresión regular de patrón y, a continuación, reemplace con los valores actuales de Mayor, Menor y Construir ($1, $2 y $3, respectivamente) y la actualización de la Revisión con la variable valor de Revisión de

Podría intentar usar Sustitutas de palabras clave para reemplazar el número al cometer.Tienen esto como ejemplo:

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

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