2009-02-13 7 views
13

Me pregunto si existe una forma de sincronizar los números de compilación (20080213.1) sin usar BuildNumberOverrideTarget donde tendría que generar mi propio número de compilación. Básicamente, quiero usar el generador de número de builds tfs predeterminado/incorporado, pero quiero acceder a él para alinear mis versiones de ensamblaje con él. ¿Se puede hacer esto y es una forma sensata de hacerlo de esta manera?Alineación de números de versión de ensamblaje con TFS Buildnumber

Respuesta

8

Sí, puedes. En algún momento, posiblemente en AfterGet, puede usar BuildNumber y crear una tarea personalizada para actualizar los archivos AssemblyInfo.cs en su código fuente.

Hemos enganchado en AfterGet y causó nuestro objetivo de ser dependientes:

<Target Name="AfterGet" DependsOnTargets="VersionAssemblies" /> 

Nuestro objetivo VersionAssemblies tira de todos los archivos de AssemblyInfo.cs $ (SolutionRoot):

<CreateItem Include="$(SolutionRoot)\**\AssemblyInfo.cs;"> 
    <Output TaskParameter="Include" ItemName="AssemblyInfos"/> 
</CreateItem> 

cheques fuera de ellos:

<Exec Command="$(TfCommand) checkout &quot;AssemblyInfo.cs&quot; -r" 
      WorkingDirectory="$(MSBuildProjectDirectory)\..\sources" ContinueOnError="true"/> 

los edita y reemplaza la versión del archivo con $ (Buil NUMEROD):

<File.Replace Path="%(AssemblyInfos.FullPath)" 
        NewValue="AssemblyFileVersion(&quot;$(BuildNumber)&quot;)" 
        RegularExpression="AssemblyFileVersion\(\&quot;(\d+.\d+.\d+.\d+)\&quot;\)" 
        IgnoreCase="true" 
        Force="true"/> 

y luego comprueba los archivos de nuevo en:

<Exec Command="$(TfCommand) checkin /override:&quot;Automated&quot; /comment:&quot;Update AssemblyInfo files to version number $(BuildNumber) - $(NoCICheckinComment) &quot; /noprompt &quot;AssemblyInfo.cs&quot; /recursive" 
      WorkingDirectory="$(MSBuildProjectDirectory)\..\sources" ContinueOnError="false"/> 

Para la sustitución de las versiones del archivo que utilizo la tarea File.Replace que viene con el Microsoft SDC tasks en CodePlex.

También tenga en cuenta que si tiene una compilación activada en un check-in, cuando compruebe los archivos AssemblyInfo.cs, asegúrese de que el comentario incluya $ (NoCICheckinComment) ya que esto hace que TFS no active otra compilación. terminaré en un ciclo de compilación infinito.

+0

¿Cómo extraes la compilación y la revisión desde $ (BuildNumber) como está por defecto del formato "MyBuildDefinition_20090213.1"? – Fadeproof

+0

Puede escribir una tarea personalizada para quitar la parte MyBuildDefinition_ y quitarla. –

9

Lo que está pidiendo es muy sensato y hay varias maneras de lograrlo.

Personalmente, cuando hago esto no me gusta revisar los archivos en el control de versiones que tienen el número generado por el servidor de compilación en ellos; simplemente presenta demasiados dolores de cabeza al fusionar código entre ramas pero también me gusta un número de versión conocido que se utilizará cuando un desarrollador realiza una compilación de estación de trabajo frente a un ensamblado derivado del servidor de compilación adecuado para que sea realmente fácil diferenciarlos.

Para obtener más información sobre cómo me gusta hacerlo, echar un vistazo a la TFS Build Recetas wiki:

o mi blog sobre el tema

Espero que ayude,

Martin.

+0

Gracias Martin. Ya me había encontrado con tu excelente publicación sobre la alineación y he usado ese método. Cuando dice que le gusta un número de versión conocido para usar en compilaciones de desarrollador, ¿quiere decir que esos serían los del archivo de información del ensamblado sin anulaciones? decir 1.0.0.0? – Fadeproof

+0

Para los desarrolladores, ¿solo utilizas la compilación VS o usas compilaciones de compilación que los desarrolladores deberían usar en sus estaciones de trabajo? – Fadeproof

+0

Para desarrolladores, solo uso la compilación VS. A veces utilizo las compilaciones de Developer Workstation usando el script TeamBuild; sin embargo, las compilaciones de VS tienden a ser capaces de hacer el trabajo el 90% del tiempo y hacen las cosas mucho más simples. En respuesta a su comentario anterior, de hecho uso 1.0.0.0 en los archivos de AssemblyInfo. –

Cuestiones relacionadas