.net - tutorial - visual svn




¿Cómo sincronizo el número de revisión SVN con mi sitio web ASP.NET? (5)

@ Globo Si está usando TortoiseSVN, puede usar el programa SubWCRev empaquetado. Consulta una copia de trabajo y le dice solo el número de revisión más alto. Es cierto que este parece ser un enfoque del lado del cliente para un problema del lado del servidor, pero dado que es un buen programa de línea de comandos, debería poder capturar su salida para usarla con bastante facilidad.

Stack Overflow tiene un número de versión de subversión en la parte inferior:

svn revision: 679

Quiero utilizar este tipo de versiones automáticas con mi .NET Web Site/Application , formularios Windows Forms, proyectos / soluciones WPD.

¿Cómo implemento esto?


Hacemos esto con xUnit.net para nuestras compilaciones automatizadas. Usamos CruiseControl.net (y estamos probando TeamCity). La tarea de MSBuild que ejecutamos para la integración continua cambia automáticamente el número de compilación para nosotros, por lo que el archivo ZIP de compilación resultante contiene un conjunto de DLL y EXE correctamente versionados.

Nuestro archivo MSBuild contiene una referencia de UsingTask para una DLL que realiza reemplazos de expresiones regulares: (puede usar esta DLL, ya que también está cubierta por la licencia MS-PL)

  <UsingTask
     AssemblyFile="3rdParty\CodePlex.MSBuildTasks.dll"
     TaskName="CodePlex.MSBuildTasks.RegexReplace"/>

A continuación, extraemos el número de compilación, que el sistema CI proporciona automáticamente. También puede hacer que su proveedor de control de origen proporcione el número de revisión de origen si lo desea, pero descubrimos que el número de compilación en el sistema de CI fue más útil, porque no solo puede ver los resultados de integración por el número de compilación de CI, que también proporciona un Vuelva a vincular a los conjuntos de cambios que se incluyeron en la compilación.

 <!-- Cascading attempts to find a build number -->

 <PropertyGroup Condition="'$(BuildNumber)' == ''">
   <BuildNumber>$(BUILD_NUMBER)</BuildNumber>
 </PropertyGroup>
 <PropertyGroup Condition="'$(BuildNumber)' == ''">
   <BuildNumber>$(ccnetlabel)</BuildNumber>
 </PropertyGroup>
 <PropertyGroup Condition="'$(BuildNumber)' == ''">
   <BuildNumber>0</BuildNumber>
 </PropertyGroup>

(Intentamos BUILD_NUMBER, que es de TeamCity, luego ccnetlabel, que es de CC.net, y si ninguno de los dos está presente, el valor predeterminado es 0, para que podamos probar el script de compilación automático).

A continuación, tenemos una tarea que establece el número de compilación en un archivo GlobalAssemblyInfo.cs que vinculamos a todos nuestros proyectos:

 <Target Name="SetVersionNumber">
   <RegexReplace
       Pattern='AssemblyVersion\("(\d+\.\d+\.\d+)\.\d+"\)'
       Replacement='AssemblyVersion("$1.$(BuildNumber)")'
       Files='GlobalAssemblyInfo.cs'/>
   <Exec Command="attrib -r xunit.installer\App.manifest"/>
 </Target>

Esto encuentra el atributo AssemblyVersion y reemplaza el número de versión abcd con abcBuildNumber. Por lo general, dejaremos la fuente registrada en el árbol con las tres primeras partes del número de constructor fijadas y la cuarta en cero (es decir, hoy es 1.0.2.0).

En su proceso de compilación, asegúrese de que la tarea SetVersionNumber precede a su tarea de compilación. Al final, utilizamos nuestra tarea Zip para comprimir los resultados de la compilación de modo que tengamos un historial de los binarios para cada compilación automatizada.


Parece que Jeff está usando CruiseControl.NET basado en algunas hojeando las transcripciones de podcast. Esto parece tener capacidades de implementación automatizadas desde el control de origen hasta la producción. ¿Podría ser aquí donde está ocurriendo la inserción?


Puede hacerlo agregando lo siguiente en cualquier parte de su código

$Id:$

Entonces, por ejemplo, @Jeff hizo:

<div id="svnrevision">svn revision: $Id:$</div>

y cuando se registró en el servidor reemplazó $ Id: $ con el número de revisión actual. También encontré esta referencia .

También hay $ Fecha: $ , $ Rev: $ , $ Revisión: $


$rev y otros similares son revisiones para los archivos individuales, por lo que no cambiarán a menos que el archivo cambie. El número en la página web es (muy probablemente, supongo aquí) el número de revisión svn para todo el proyecto. Eso es diferente a las revisiones de archivos, a lo que otros han estado apuntando.

En este caso, supongo que CCNET está obteniendo el número de revisión del proyecto y reescribiendo una parte de la página web con ese número. Cualquier solución de CI debería poder hacer esto, configurarlo yo mismo con CCNET y Teamcity (aunque no las páginas web, sino las versiones automáticas de las versiones de implementación / ensamblaje).

Para que pueda hacer esto, use una solución de CI que lo admita, o use su proceso de compilación (MSbuild / Nant) para almacenar esa versión y escribirla en los archivos antes de "implementarla".





versioning