2011-01-20 8 views
8

Me gustaría poder ver un ensamblaje e identificar rápidamente de qué rama se construyó.TFS Build: incluya el nombre de la rama en el campo "build number" de los conjuntos

¿Cuál es la mejor forma de cofigurar TFS Build para incluir el nombre de la rama actual en el campo Número de compilación (o un campo más apropiado) de los ensamblajes que crea?

+2

Sugeriría usar el [AssemblyConfigurationAttribute] (http://msdn.microsoft.com/en-us/library/system.reflection.assemblyconfigurationattribute.aspx) ya que está destinado a ser utilizado para la configuración de compilación textual de forma libre información. También le sugiero que cambie a un patrón en el que tenga un archivo compartido [VersionInfo] (http://stackoverflow.com/questions/62353/what-are-the-best-practices-for-using-assembly-attributes) entre proyectos para que pueda actualizar esta información en un solo lugar. No sé nada de TFS, así que no puedo ayudarte con eso. –

+0

@chibacity La rama no es una configuración. AssemblyInformationalVersionAttribute parece ser un lugar más apropiado para almacenar esa información. Es un poco extraño que no haya un atributo de ensamblaje explícitamente para la rama. – mhenry1384

Respuesta

4

Tener un vistazo a la versión de tareas en http://msbuildtasks.tigris.org/

Se le permitirá actualizar los AssemblyInfo.cs en construcción.

Eso todavía deja el "cómo" para identificar la rama ...

Por el riesgo de tener un debate religioso en la versión de numeración puede dedicar una parte de la pieza a la major.minor.build.revision rama. Por ejemplo, major.minor simplemente sigue su número de versión 'exterior/comercial', build es el número de buildnumber TFS y la revisión 1 indica su rama principal, la revisión 2 indica una determinada rama. También puede usar uno de los otros atributos de versión de ensamblaje, como AssemblyInformationalAttribute para almacenar una identificación de rama en él.

No estoy actualizado como puede detectar la rama en la que se encuentra, pero en el peor de los casos, solo es cuestión de obtener el directorio actual y aplicar cierta lógica para inferir el nombre de la rama. La salida de una rama tf. El comando también debe darle el nombre de la sucursal para un espacio de trabajo actual, pero necesitará una tarea personalizada para extraer solo la primera línea.

No es una respuesta plug-and-play pero puede llevarte en la dirección correcta.

+0

Gran punto de partida, gracias. Me sorprende que esta no sea una pregunta más común con una solución simple. –

+0

Sé que esta es una respuesta anterior; solo comentando con fines de actualización. Al menos en TFS 2013 y TFS 2015, 'tf branch .' no parece funcionar. 'tf branch' requiere un argumento de origen y destino, y parece crear una rama con el nombre de destino desde el directorio de origen.[haga clic para obtener documentación] (https://msdn.microsoft.com/en-us/library/d73s8b27.aspx) –

0

La versión es fácil en términos de obtenerla y actualizar varios archivos AssemblyInfo.cs.

Organizaría su estructura TFS de forma similar a las convenciones de Subversion, así que tenga una carpeta de troncales, etiquetas y ramas.

Mediante la asignación de nombres coherente, puede asegurarse de que su archivo MSBuild específico siempre tenga un número determinado de directorios desde el tronco de un nombre de rama específico.

Tenga una tarea personalizada de MSBuild que le resulte útil (navegando por la jerarquía de carpetas TFS) y aliméntela en su propiedad que se usa para actualizar el AssemblyInformationalAttribute. Puede usar la tarea FileUpdate desde http://msbuildtasks.tigris.org/ para realizar una sustitución Regex en sus archivos AssemblyInfo.cs.

+1

Creo que se refiere a AssemblyInformationalVersionAttribute. – mhenry1384

Cuestiones relacionadas