2011-08-31 11 views
15

En este momento nuestros ensamblajes tienen un número de versión como 2.0.831.0. Según lo entiendo, esa es la versión principal, la versión secundaria, la fecha y el número de compilación. Si realizo un cambio y lo vuelvo a crear el mismo día, es 2.0.831.1, 2.0.831.2, etc.Hacer que TeamCity Version Match .NET Assembly Version

El formato del número de compilación de mi TeamCity es simplemente 2. {0} donde {0} es un número autoincrementado que simplemente va para siempre (2.195, 2.196 etc.).

¿Cómo hago que TeamCity se vea exactamente como la versión de ensamblaje? Queremos poder asociar el Registro de cambios con la versión de ensamblaje para que cualquiera pueda decir que la versión de ensamblaje 2.0.831.2 tenía estos cambios en estos archivos.

Información extra: Nuestro paso de compilación utiliza la opción "Visual Studio (sln)" en lugar de "MSBuild", si eso es lo que importa. Utilizamos Subversion para el control de fuente si eso es importante. Nuestra versión de TeamCity es 6.5.1 (compilación 17834).

+0

http://stackoverflow.com/questions/1041153/teamcity-labeling-vcs-subversion-with-an-artifacts-file-version – sylvanaar

Respuesta

21

Yo recomendaría adoptar el semantic versioning scheme{major}.{minor}.{patch} y anexar un 4º elemento para el número de compilación {major}.{minor}.{patch}.{build}. Esto es mucho más útil para incluir la fecha de compilación en el esquema de control de versiones.

TeamCity 6.5 (no ha especificado una versión) tiene una característica de compilación que se podría usar para parchar la versión en AssemblyInfo.cs durante la compilación. Consulte la documentación para AssemblyInfo Patcher.

AssemblyInfo patcher dialog (TeamCity documentation)

entonces se podría definir el formato de número de compilación de la manera que le gustaría tener en su montaje y utilizar el formato para la construcción en sí, como también para la función de aplicación de parches.

+0

Comenta sobre ccellar como respuesta porque no tengo suficiente reputación para comentar. El formato de la cadena de la versión es: major.minor [.build [.revision]] El número de compilación es el 3er elemento, no el 4to. Si AssemblyVersion no tiene este formato, la clase Version tendrá valores incorrectos en las propiedades Build y Revision. http://msdn.microsoft.com/en-us/library/system.version.aspx – jbtibor

+2

@jbtibor Buen punto que Microsoft tiene un esquema de número de versión diferente, pero yo diría que el esquema de ccellar tiene más sentido, y es el esquema que uso. Piénselo: el número de compilación siempre será único cuando se use el número de compilación de TeamCity, por lo que las compilaciones múltiples podrían tener la misma revisión, pero no es posible tener múltiples revisiones en la misma compilación, lo que parece implicar el esquema de MS. –

+0

Puede usar el atributo AssemblyInformationalVersionAttribute en AssemblyInfo.cs para especificar la versión de semver (este atributo le permitirá especificar cualquier cadena como versión). Este valor podría ser recogido y utilizado por el proceso de compilación. Me gusta la idea de que depende del desarrollador, antes de comprometer un cambio para decidir la información de la versión para lo que él/ella registra. –

6

Una solución es utilizar el MSBuild runner, escribir un script de MSBuild que lea la información de la versión del archivo AssemblyInfo, establecer la versión de compilación de TeamCity a ese valor mientras se ejecuta la compilación, luego incrementa el número de compilación de esa versión y escribe el valor en AssemblyInfo.

Esto no es particularmente trivial, ya que necesita comprender cómo escribir scripts personalizados de MSBuild, y es probable que necesite utilizar algunas de las tareas de la comunidad, etc. para leer/escribir la información de la versión.

También utilizamos el concepto de un archivo AssemblyInfo global, que todos nuestros ensamblajes hacen referencia (usando Agregar enlace en VS), y por lo tanto, solo necesitamos actualizar el archivo durante la compilación.

Existe un excelente artículo here, que describe la realización de tareas comunes de CI con MSBuild. Él está usando CruiseControl.NET, pero gran parte de él todavía se aplica. Sin embargo, si está ejecutando TeamCity 6.5, analizaría el uso exclusivo de sus funciones de compilación, ya que será mucho más fácil de mantener que un script de MSBuild personalizado.

+1

Todo esto tiene sentido. ¿Hay algún tutorial para lograr esto? Nunca he trabajado con MSBuild antes. ¿Tienes algún ejemplo específico? – Dzejms

+0

respuesta actualizada. – devdigital