2010-01-08 8 views
20

Quiero ajustar el resultado de mi configuración de compilación TeamCity de mi biblioteca de clases para que los archivos dll producidos tengan el siguiente número de versión: 3.5.0.x, donde x es el número de revisión de subversión que TeamCity ha recogido.Hacer que TeamCity integre el número de compilación de Subversion en la versión de ensamblaje

He encontrado que puedo usar la variable de entorno BUILD_NUMBER para obtener x, pero desafortunadamente no entiendo qué más tengo que hacer.

Los "tutoriales" Encuentro todos dicen "Usted acaba de añadir esto a la secuencia de comandos", pero que no dicen lo que guión, y "esto" se refiere generalmente a la tarea AssemblyInfo de la Comunidad Extensiones MSBuild.

¿Necesito crear una secuencia de comandos de MSBuild personalizada de alguna manera para usar esto? ¿Es el "script" lo mismo que el archivo de solución o el archivo de proyecto C#?

No sé mucho sobre el proceso de MSBuild, excepto que puedo pasar un archivo de solución directamente a MSBuild, pero lo que necesito agregar a "la secuencia de comandos" es XML, y el archivo de solución definitivamente no lo hace parece XML.

Entonces, ¿alguien me puede indicar una guía paso a paso sobre cómo hacer que esto funcione?


Esto es lo que terminó con:

  1. Instalar la edición MSBuild Community Tasks
  2. el archivo .csproj de mi biblioteca de clases base, y cambiar la parte inferior para que se lea:

    <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" /> 
    <Import Project="$(MSBuildExtensionsPath)\MSBuildCommunityTasks\MSBuild.Community.Tasks.Targets" /> 
    <Target Name="BeforeBuild"> 
        <AssemblyInfo Condition=" '$(BUILD_NUMBER)' != '' " 
         CodeLanguage="CS" 
         OutputFile="$(MSBuildProjectDirectory)\..\GlobalInfo.cs" 
         AssemblyVersion="3.5.0.0" 
         AssemblyFileVersion="$(BUILD_NUMBER)" /> 
    </Target> 
    <Target Name="AfterBuild"> 
    

  3. Cambie todos mis archivos AssemblyInfo.cs para que no especifique AssemblyVersion o AssemblyFileVersion (en retrospectiva, investigaré la vuelta de AssemblyVersion)

  4. Agregué un enlace a GlobalInfo ahora global que está ubicado justo fuera de todo el proyecto
  5. Asegúrese de que este archivo está construida una vez, así que tengo un archivo por defecto en el control de la fuente

esto ahora se actualizará GlobalInfo.cs sólo si se establece la variable de entorno BUILD_NUMBER, la cual es cuando construyo a través de TeamCity.

Opté por mantener AssemblyVersion constante, para que las referencias sigan funcionando, y solo actualizo AssemblyFileVersion, para poder ver de qué compilación es una DLL.

Respuesta

18

El archivo CSPROJ es efectivamente un archivo MSBuild.

Descargue el proyecto de clase relevante en VS.NET, edítelo y elimine el comentario del objetivo BeforeBuild. Agregue la tarea MSBuild FileUpdate desde MSBuild Community Extensions.

En su archivo MSBuild, puede recuperar BUILD_NUMBER de TeamCity utilizando la variable de entorno $(build_vcs_number_1). Tenga en cuenta que es posible que desee crear una Configuración adicional para la condición de "Producción" que verifica, ya que esto obviamente no funcionará cuando genere localmente.

Simplemente utilícelo como entrada para la propiedad ReplacementText de la tarea FileUpdate.

Tenga en cuenta que si los números de sus revisiones superan la marca 65535 (UInt16), no puede usarlo en el atributo AssemblyVersion.

Lo que sugiero que use en su lugar, es AssemblyInformationalVersion, que es solo una cadena que no tiene esa limitación. A menos, por supuesto, que esté seguro de que no alcanzará este límite superior de revisión, pero parece una forma poco fiable de hacerlo.

Alternativamente, puede idear una forma (a.b.c.d sea su número de versión) de usar revision div 1000 para c y revisión mod 1000 para d.

12

En TeamCity 6.5 esto es MUY FÁCIL para lograr usar AssemblyInfo patcher.

  • Vaya a la configuración de compilación paso 3 "Pasos de compilación";
  • Haga clic en "Agregar característica de compilación";
  • Elija el tipo de característica "Patcher de AssemblyInfo";
  • Indique lo que desea como versión. Yo uso: %system.build.number%
+1

Desafortunadamente, su parche no [actualmente] (http://confluence.jetbrains.net/display/TCD65/AssemblyInfo+Patcher) permiten a uno especificar distintos valores de '' AssemblyFileVersion' AssemblyVersion' y . – ladenedge

+1

Su sugerencia es muy útil en escenarios donde la principal preocupación es poder rastrear el número de compilación: ¡gracias! – faester

+1

Hombre Estaba a punto de hacer un montón de código repetitivo scheiss solo para obtener esto en mi código. ¡Me salvaste 2 o 3 días de trabajo! –

Cuestiones relacionadas