Control de versiones y actualización de files de AssemblyInfo

Estoy manteniendo una aplicación del código C (en su mayoría) usando la subversión. Me pregunto cuál es la mejor práctica para cuándo y dónde actualizar los files AssemblyInfo.cs para reflejar el número de versión del producto a medida que se envía.

Supongamos que tengo una troncal y algunas twigs de mantenimiento para versiones anteriores y tags para labelr cada versión cuando sucede.

Si actualizo los files AssemblyInfo en la twig o el tronco antes del labeldo (este es mi enfoque actual), significa que puedo mirar el logging de esa twig para ver cuándo ocurrieron los lanzamientos, lo cual es bastante útil, pero me da conflictos de fusión falsos cuando fusionándose entre twigs. Por ejemplo, decir que realizo una corrección de errores en la twig de la versión 4 que actualiza la versión 4.7 a 4.8; cuando trato de combinar esa corrección en la twig de la versión 5, AssemblyInfo está obligada a entrar en conflicto.

También consideré actualizar los files AssemblyInfo en la label misma. esto evita el problema de conflicto de combinación, pero significa que no puede ver las versiones cuando se analiza el historial de trunk o una twig de mantenimiento, y también parece violar el principio de que una label debe ser de solo lectura.

Por lo que veo, a algunas personas les gusta actualizar los files AssemblyInfo sobre la marcha durante el process de compilation, y no almacenarlos en SVN en absoluto. Aunque a primera vista parece una buena idea automatizar la numeración de las versiones, creo que me sentiría mucho más cómodo si los files AssemblyInfo se registran inmediatamente antes de realizar la construcción, de modo que haya una correlación directa entre el número de versión en el ensamble y la fuente de donde vino.

Simplemente compartiendo experiencia: hago esto en el server de compilation solo de manera automatizada. Lo configuré una vez y ya no lo toqué, aparte de boost poco la versión mayor y menor. Aquí hay un resumen:

  • AssemblyInfo.cs se compromete a controlar la fuente
  • AssemblyInfo.cs no es cambiado manualmente por los desarrolladores
  • El server de compilation recoge el origen de cualquier cambio en el control de origen
  • El server de compilation cambia AssemblyInfo automáticamente
  • El server de compilation produce artefactos con la versión correcta
  • Cuando etiqueto / ramifico, creo una label con la versión de compilation de Build Server

Los serveres de construcción modernos tendrán características que automatizarán todo el process de cambio de este file, por ejemplo, vea el parche AssemblyInfo en TeamCity

La estrategia de versión que uso es:

major.minor.build_number.svn_revision_number 

Donde major y minor se codifican manualmente como parameters de configuration en el server de compilation. build_number se incrementa automáticamente por el server de compilation. svn_revision_number se toma del número de confirmación svn.