2008-08-01 16 views
82

desbordamiento de pila tiene un número de versión a la subversión en la parte inferior:¿Cómo sincronizo el número de revisión SVN con mi sitio web ASP.NET?

SVN revisión: 679

quiero usar tales versionado automático con mis .NET Web Site/Application, Windows Forms, proyectos WPD/soluciones.

¿Cómo implemento esto?

+0

[http://stackoverflow.com/questions/29802/how-do-you-do-version-a-web-application#30168][1] [1]: http://stackoverflow.com/questions/29802/how-do-you-do-version-a-web-application#30168 – Azhar

+0

@Balloon Si está utilizando TortoiseSVN, puede usar el paquete [SubWCRev] (http: //tortoisesvn.net/docs/release/TortoiseSVN_en/tsvn-subwcrev.html) programa. Consulta una copia de trabajo y le indica el número de revisión más alto. Es cierto que esto 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. – nickf

+0

Si no está utilizando TortoiseSVN para SubWCRev como dije [aquí] (http://stackoverflow.com/questions/163/how-do-i-sync-the-svn-revision-number-with-my-aspnet -web-site # 65747), puede usar [svnversion] (http://svnbook.red-bean.com/en/1.5/svn-book.html#svn.ref.svnversion) que hace lo mismo. – nickf

Respuesta

29

Parece que Jeff está utilizando 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?

+2

Si no está usando CruiseControl.Net, entonces vea mi respuesta (¡enchufe desvergonzado!) - http://stackoverflow.com/questions/163/how-do-i-sync-the-svn-revision-number-with -my-aspnet-web-site # 374153 ; o) – Andrew

+0

El enlace está roto @saint_groceon –

24

Puede hacerlo añadiendo lo siguiente en cualquier parte de su código

$Id:$ 

Así, por ejemplo @ Jeff hizo:

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

y en caso de control en el servidor reemplazado $ Id: $ con el número de revisión actual. Yo también found this reference.

También hay $ Fecha: $, $ Rev: $, $ Revision: $

+5

¿Esto no solo insertará el número de revisión del último cambio en ese archivo en particular? Intenté configurar un repositorio de dos archivos y cambié uno, e intenté exportar y pagar, y el otro archivo permaneció en 1 en ambos casos. –

+0

lassevk es correcto, esto solo cambia cuando el archivo cambia. –

+0

Usando VisualSVN y TortoiseSVN, al agregar $ Id: $, la página se convirtió en "$ Id: $". Puede ser útil anotar en qué servidor/cliente funciona esta respuesta. – Travis

9

$rev y otros similares son revisiones de los archivos individuales, por lo que no se modificarán a menos que el archivo cambie. El número en la página web (lo más probable es que asuma aquí) es el número de revisión de svn para todo el proyecto. Eso es diferente a las revisiones de archivos, que otros han estado señalando.

En este caso supongo que CCNET está extrayendo 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 ser capaz de hacer esto, configúrelo yo mismo con CCNET y Teamcity (aunque no páginas web, sino versiones automáticas de versiones de implementación/ensamblaje).

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

26

Hacemos esto con xUnit.net para nuestras compilaciones automáticas. Usamos CruiseControl.net (y estamos probando TeamCity). La tarea 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 EXEs correctamente versionados.

Nuestra MSBuild file contiene una referencia UsingTask para un DLL que hace reemplazos de expresiones regulares: (le invitamos a utilizar este archivo DLL, ya que está cubierto por la licencia de MS-PL así)

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

A continuación, extraemos el número de compilación, que es provisto automáticamente por el sistema de CI. También podría hacer que su proveedor de control de origen proporcione el número de revisión de origen si lo desea, pero descubrimos que el # de compilación en el sistema de IC era más útil, porque no solo puede ver los resultados de integración por el número de compilación CI, sino que también proporciona un enlace de regreso al conjunto 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> 

(Tratamos BUILD_NUMBER, que es de TeamCity, entonces ccnetlabel, que es de CC.net, y si no está presente, omitimos a 0, por lo que podemos probar el script de creación automatizado manualmente.)

Luego, tenemos una tarea que establece el número de compilación en un archivo GlobalAssemblyInfo.cs de que enlace en 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> 

este hallazgo el atributo AssemblyVersion, y reemplaza el número de versión con ABCD abcBuildNumber. Por lo general, dejaremos la fuente seleccionada en el árbol con las tres primeras partes del número de constructor corregidas, y la cuarta en cero (es decir, hoy es 1.0.2.0).

En el 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 compilación para que tengamos un historial de los archivos binarios para cada compilación automatizada.

10

@Balloon Si está utilizando TortoiseSVN, puede usar el programa SubWCRev empaquetado. Consulta una copia de trabajo y le indica el número de revisión más alto. Es cierto que esto 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.

5

Para añadir a la respuesta de @ BradWilson: "Además, puede pedir a su proveedor de control de código fuente para proporcionar el número de versiones de código si quieres"

Para conectar Subversion y MSBuild: MSBuild Community Tasks Project

17

Si Estoy usando ASP.Net MVC (como lo hace StackOverflow), he escrito un easy to follow 3-step guide on how to automatically get and display the latest SVN revision. ¡La guía se inspiró al pensar sobre esta misma pregunta! : O)

+0

Suena genial, ¡Link roto! –

+0

¡Reparado! gracias por dejarme saber: o) – Andrew

+1

Esta fue una gran solución para nosotros para automatizar la visualización de un control basado en nuestras revisiones SVN. Una ventaja es que no requiere una llamada a su servidor SVN. –

Cuestiones relacionadas