¿Mejores prácticas para la nomenclatura y el control de versiones de ensamblados?


Estoy buscando algunas buenas prácticas para nombrar ensamblados y versionarlos. ¿Con qué frecuencia incrementa las versiones mayor o menor?

En algunos casos, he visto lanzamientos que van directamente de la versión 1.0 a la 3.0. En otros casos, parece estar atascado en la versión 1.0.2.xxxx.

Esto será para un ensamblado compartido utilizado en varios proyectos en toda la empresa. Esperando algunas buenas entradas.

Author: starblue, 2008-10-14

4 answers

Alguna buena información de este artículo en el blog de Suzanne Cook en MSDN (publicado el 30-05-2003):

Cuándo cambiar las Versiones de Archivo/Ensamblaje

En primer lugar, las versiones de archivo y las versiones de ensamblaje no tienen por qué coincidir el uno con el otro. Recomiendo que las versiones de los archivos cambien con cada construir. Pero, no cambie las versiones de ensamblaje con cada compilación simplemente que se puede decir la diferencia entre dos versiones de la misma archivo; usa la versión del archivo para eso. Decidir cuándo cambiar de asamblea versions toma un poco de discusión sobre los tipos de compilaciones a considerar: envío y no envío.

Construcciones que no son de Envío
En general, recomiendo mantener las versiones de ensamblaje que no son de envío igual entre las compilaciones de envío. Este evita problemas de carga de montaje fuertemente nombrados debido a la versión desajustes. Algunas personas prefieren usar la política del editor para redirigir nuevo versiones de ensamblaje para cada compilación. Recomiendo en contra de eso para sin embargo, las compilaciones que no son de envío: no evitan toda la carga problema. Por ejemplo, si un socio x copia tu app, es posible que no saber instalar la directiva del editor. Entonces, su aplicación se romperá para ellos, a pesar de que funciona muy bien en su máquina.

Pero, si hay casos donde diferentes aplicaciones en el mismo necesidad de la máquina de atar a diversas versiones de su asamblea, I recomendar dar a esos construye diferentes versiones de ensamblaje para que el correct one for cada aplicación se puede utilizar sin tener que usar Carga de/etc.

Construcciones de Envío
En cuanto a si es una buena idea cambiar esa versión para las compilaciones de envío, depende de cómo desea que el enlace trabajar para los usuarios finales. ¿Quieres que estas construcciones estén lado a lado o ¿en el lugar? Hay muchos cambios entre las dos versiones? Son ellos ¿vas a romper algunos clientes? ¿Te importa que los rompa (o no quieres forzar a los usuarios a usar tus actualizaciones importantes)? Si sí, usted debería considerar incrementar la versión del ensamblado. Pero, de nuevo, considere que hacer eso demasiadas veces puede ensuciar el disco del usuario con ensamblajes obsoletos.

Cuando Cambia Las Versiones De Ensamblaje
Para cambiar las versiones hardcoded a la nueva, recomiendo configurar una variable a la versión en un archivo de cabecera y reemplazar el hardcoding en las fuentes con el variable. Luego, ejecute un preprocesador durante la compilación para versión correcta. Me recomendar cambiar las versiones inmediatamente después del envío, no justo antes, por lo que hay más tiempo para atrapar errores debido a la cambio.

 24
Author: Gulzar Nazim,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-09-02 13:03:34

Una forma de definir el control de versiones es dar significado semántico a cada porción:

  • Pase de N. x a N + 1.0 cuando la compatibilidad se rompa con la nueva relase
  • Pase de N. M a N. M+1 cuando se agreguen nuevas características que no rompan la compatibilidad
  • Vaya de N. M. X a N. M. X + 1 cuando se agreguen correcciones de errores

Lo anterior es solo un ejemplo you te gustaría definir las reglas que tengan sentido para ti. Pero es muy agradable para los usuarios saber rápidamente si se esperan incompatibilidades con solo mirar la versión.

Ah, y no olvides publicar las reglas que se te ocurran para que la gente sepa qué esperar.

 21
Author: andy,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-10-14 02:36:32

El versionado semántico tiene un conjunto de directrices y reglas sobre cómo aplicar esto (y cuándo). Muy simple de seguir y simplemente funciona.

Http://semver.org/

 8
Author: Bil Simser,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-08-18 22:35:16

Lo primero que recomendaría es familiarizarse con las diferencias entre la versión Ensamblada y la versión del archivo. Desafortunadamente,. NET tiende a tratarlos como lo mismo cuando se trata de los archivos AssemblyInfo, ya que generalmente solo pone AssemblyVersion y permite que el FileVersion tenga el mismo valor por defecto.

Ya que dijiste que este es un ensamblado compartido, asumo que quieres decir que se comparte a nivel binario (no incluyendo el proyecto en las diversas soluciones). Si ese es el caso que desea ser muy deliberado acerca de cambiar la versión del ensamblado, ya que es lo que.NET utiliza para nombrar el ensamblado (para permitirle ponerlo en el GAC) y también constituye el "nombre completo del ensamblado". Cuando la versión de ensamblado cambia, puede tener cambios de interrupción para las aplicaciones que la usan sin agregar entradas de redirección de ensamblado en la aplicación.archivo de configuración.

En cuanto a los nombres, creo que depende de cuáles son las reglas de nomenclatura de su empresa (si las hay) y el propósito de la biblioteca. Para exmaple, si esta biblioteca proporciona funcionalidad" core " (o nivel de sistema) que no es específica para ningún producto o línea de negocio en particular, podría nombrarla como:

CompanyName.Framework.Core 

Si es parte de una biblioteca más grande, o simplemente

CompanyName.Shared
CompanyName.Core
CompanyName.Framework

En cuanto a cuándo incrementar los números de versión, sigue siendo bastante subjetivo y depende de lo que consideres que representa cada porción del número de compilación. El esquema predeterminado de Microsoft es Major.Menor.Construir.Revisión, pero eso no significa que no se te ocurren tus propias definiciones. Lo más importante es ser consistente en su estrategia y asegurarse de que las definiciones y reglas tengan sentido en todos sus productos.

En casi todos los esquemas de versiones que he visto las dos primeras porciones son Mayores.Menor. El número de versión mayor generalmente aumenta cuando hay cambios grandes y / o cambios de ruptura, mientras que el número de versión menor generalmente aumenta para indicar que algo cambió lo que hizo no fue una ruptura cambio. Los otros dos números son considerablemente más subjetivos y pueden ser el " build "(que a menudo es un valor de fecha serie o un número de actualización secuencial que cambia cada día) y el" revision " o número de parche. También los he visto invertidos (dando Mayor.Menor.Revision.Build) donde build es un número que aumenta secuencialmente desde un sistema de build automatizado.

Tenga en cuenta que las versiones mayor y menor del ensamblado se utilizan como el número de versión de la biblioteca de tipos cuando el ensamblado se exporta.

Finalmente, eche un vistazo a algunos de estos recursos para obtener más información:

Http://msdn.microsoft.com/en-us/library/51ket42z.aspx

Http://msdn.microsoft.com/en-us/library/system.reflection.assemblyversionattribute.aspx

Http://blogs.msdn.com/suzcook/archive/2003/05/29/57148.aspx

 6
Author: Scott Dorman,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-10-14 13:27:05