2008-10-06 11 views
13

Los atributos AssemblyVersion y AssemblyFileVersion son la forma integrada de manejar los números de versión para ensamblados .NET. Si bien el marco proporciona la capacidad de tener las partes menos significativas de un número de versión (compilación y revisión, en términos de Microsoft) determinadas automáticamente, creo que el método es bastante débil, y sin duda tiene muchas otras.¿Cuál es la mejor manera de usar los atributos de versiones de ensamblaje?

Así que me gustaría preguntar, ¿De qué manera se han determinado a hacer el mejor trabajo de tener números de versión que reflejan mejor la versión real de un proyecto? ¿Tiene un script de precompilación que establece parte de la versión a la fecha y hora, o la versión del repositorio para su copia de trabajo de un proyecto? ¿Simplemente usas la generación automática provista por el framework? ¿O algo mas? ¿Cuál es la mejor manera de administrar versiones de archivo/ensamblaje?

Respuesta

5

En mi proyecto actual, se utiliza el número de revisiones Subversion como la parte menos significativa (acumulación) del número de versión, y se utiliza una secuencia de comandos Nant para crear el proyecto AssemblyInfo archivo. Usamos el mismo número de versión para los atributos AssemblyVersion y AssemblyFileVersion. (Las otras tres partes son major.minor.point, donde major.minor se incrementará cada vez que haya un cambio en el esquema de la base de datos, y el punto se incrementará para cada versión.)

Comenzamos con el número de compilación simplemente incrementado, pero eso requería que el archivo de versión se registrara para cada compilación, y provocaba conflictos al fusionarse. Cuando resultó ser inviable, comenzamos a usar CruiseControl.NET para generar el número de compilación, pero eso dificultó la reproducción manual de compilaciones específicas. Finalmente, pasamos al esquema actual (revisión de Subversion).

Nota: Desafortunadamente con .NET, no es posible recrear perfectamente una compilación a partir de una revisión anterior, porque los compiladores .NET codifican la marca de tiempo actual en el archivo objeto al compilar. Cada vez que compila el mismo código, obtiene un archivo de objeto diferente.

+0

Con CruiseControl.NET usted tiene todas y cada una de las construcciones separadas que se hayan hecho, no hay razón para reconstruir una versión anterior. Si desea agregar parches a una versión anterior, debe dividir su código en control de fuente en esa versión específica. –

+1

Hay una diferencia entre sacar una compilación del almacenamiento y poder demostrar que ha capturado todas las piezas necesarias para compilar una versión determinada. Hay muchas variables ambientales que pueden afectar la creación de cualquier compilación. Mi estándar es que el proceso de pago sea lo más autónomo posible, de modo que pueda realizar un pago en una máquina nueva y crear el software desde cero. Esto es más difícil de lograr con .Net (a diferencia de Java), pero sigue siendo un objetivo digno. Eso significa que he llegado tan lejos como para registrar Java, Ant y todas las bibliotecas junto con mi código fuente. –

3

Nuestros scripts de construcción insertan el número del conjunto de cambios de TFS en la versión. De esa forma, sabemos exactamente qué comprobaciones hay en la compilación.

+0

¿Qué campo del número de versión? –

+0

Buena idea, pero probablemente explotará después de que changeet-id llegue a 0xfffe si solo lo confina a uno de los campos de versión, major, minor, build, revisión – GertGregers

2

Nos utilizar el control de versiones de la subversión y tienen actualizar los buildscripts la información de la versión de montaje, por lo confirmaciones fuente de control de versiones.

1

La AssemblyVersionAttribute es parte de la identidad de un ensamblado. Cambiar eso significa que es un ensamblaje diferente y que los programas vinculados a ese ensamblaje necesitan ser recompilados/vinculados o que se debe aplicar una política de versión. No encontramos esa apelación, por lo que elegimos aumentar solo AssemblyFileVersion para cada hotfix y solo cambiar AssemblyVersion para cada versión principal. Somos conscientes de que esta decisión nos trae de vuelta el infierno de win32 dll. Aumentamos AssemblyFileVersion para cada compilación y etiquetamos/etiquetamos el sistema de control de versiones con esa versión para saber de qué fuente proviene el binario.

+1

El archivo recompilador o de política solo es necesario si el ensamblado está en Strong Named. –

+0

Gracias por señalar eso. Es en nuestro caso. –

4

En un trabajo anterior, donde se utilizó la subversión, que tenía un guión Nant correr CCNet para extraer la versión del repositorio y usados ​​que a medida que el número final.

En este trabajo, nosotros utilizar VSS (obturador), así que no es realmente una opción, así que tenemos una política de actualización de forma manual, con las siguientes directrices:

  • Mayor: significativa (> 25%) cambios o adiciones en funcionalidad o interfaz.
  • Menor: pequeños cambios o adiciones en la funcionalidad o la interfaz.
  • Generar: pequeños cambios que rompen la interfaz.
  • Revisión: se corrige una compilación que no cambia la interfaz.

También guardamos el Conjunto & las versiones de archivo en sincronización. La versión de ensamblado se puede leer fácilmente mediante programación, mientras que la versión de archivo se puede mostrar como una columna en el modo Detalles en Windows Explorer.

2

Tendemos a incrustar la fecha de liberación (o compilación) en el conjunto. Por ejemplo, si se construye hoy, la versión sería "2008.10.06" (el script de construcción lo actualiza).

+0

Suena bien, pero si está haciendo compilaciones múltiples por día o manteniendo varias sucursales, puedo ver que se deshace rápidamente. –

+1

Absolutamente correcto. Incrustar un número de compilación o el momento de compilación puede ser una solución viable. –

+0

También puede usar la hora, vea http://stackoverflow.com/questions/971476/how-do-i-find-the-current-time-and-date-at-compilation-time-in-net- c-applicatio/971663 # 971663 – Cheeso

3

Tenemos nuestro servidor de compilación CruiseControl.NET incruste el número de lista de cambios obligatoria en el AssemblyFileVersion - esto nos permite rastrear el código fuente de cualquier ensamblado construido por el servidor de compilación. (Siempre construimos desde la sucursal principal)

Para los ensamblajes a los que los clientes harán referencia dejamos la constante AssemblyVersion a menos que haya cambios bruscos, en cuyo caso incrementamos la versión para asegurarnos de que el código del cliente se vuelva a construir contra el nueva versión.

9

Veo muchas publicaciones aquí sobre el uso del número de revisión de subversión como un componente de la versión de ensamblaje. Cuidado: los 4 números de versión disponibles en Windows (a.b.c.d) están limitados a 16 bits (máximo = 65535). El número de revisión de subversión puede superar fácilmente este límite, especialmente si aloja varios proyectos en el mismo repositorio.

+4

Sí, es mejor usar AssemblyInformationalVersion en su lugar. –

+0

Enlace a dicho atributo: http://msdn.microsoft.com/en-us/library/system.reflection.assemblyinformationalattribute.aspx –

+0

¿Puede explicar cómo esto ayuda? ¿Intenta analizar y solo advertir, en lugar de fallar si excede? Este es un verdadero problema/vergüenza. Tener svn revs en el número de versión es realmente útil, pero ahora tenemos más de 70,000 revisiones, por lo que se está cayendo constantemente. –

Cuestiones relacionadas