2012-09-10 21 views
10
de MSBuild

Actualmente estoy usando el "complemento de número de versión" de Jenkins para establecer una variable de entorno para la versión de compilación. Esto funciona bien dentro de jenkins, pero necesito una forma de pasar esto a MSBuild para que se actualice el número de versión de los exe y dll. Probé el fuelle de configuración pero no actualiza las compilaciones versiónUso de la variable de entorno de versión de Jenkins en el paso

Version Number Config

Build Config

Respuesta

5

Medio Ambiente Nombre de la variable debe ser escrito sin El porcentaje de marcas ('%'), como este :

VERSION 

aparte de eso, creo que es bueno ir.

También puede considerar el cambio de
${BUILDS_ALL_TIME}
a
${BUILDS_ALL_TIME, XX}

(esto hará cumplir una acumulación número de dos dígitos con ceros a la izquierda)

+2

Sí, me di cuenta de que, también parece que MSBuild.exe no admite/p: versión de forma predeterminada. necesitas perder el tiempo con las extensiones MSBuld. Terminé escribiendo una aplicación de consola para actualizar AssemblyInfo.cs antes de compilar y llamarlo pasando en la variable de entorno. Esto fue más rápido que meterse con las complicadas extensiones de msbuild –

+0

Bueno, esperaba que encontraras una buena manera de pasar la versión a la compilación, ya que también usamos un script adaptado para eso ... – Gonen

2

Este es un objetivo de MSBuild que sustituye a la revisión número en el archivo GlobalAssemblyInfo.cs con la variable SVN_REVISION de Jenkins.

Tenemos una solución de proyectos múltiples en la que cada proyecto hace referencia a la misma información GlobalAssemblyInfo para obtener información común (como la versión). Modifique esto para que se ajuste a su configuración.

Al tener la condición Exists, el destino se ejecuta en máquinas desarrolladoras donde MSBuildCommunityTasks no está instalado. En esos casos, el número de versión en GlobalAssemblyInfo.cs no se modifica.

<Target Name="InjectSVNRevision" Condition="Exists('$(MSBuildExtensionsPath)\MSBuildCommunityTasks\MSBuild.Community.Tasks.Targets')"> 
<!-- When this build is done by the Jenkins CI server; the svn revision number is set in the environment variable SVN_REVISION 
    This little snippet replaces the revision number in GlobalAssemblyInfo.cs with this svn revision number 
    --> 
<Message Text="Injecting SVN revision number in GlobalAssemblyInfo.cs" /> 
<FileUpdate Files="GlobalAssemblyInfo.cs" 
    Multiline="true" 
    Singleline="false" 
    Regex="(AssemblyVersion|AssemblyFileVersionAttribute|AssemblyFileVersion)\(&quot;([0-9]+\.[0-9]+\.[0-9]+)(\.[0-9]+)?&quot;\)" 
    ReplacementText="$1(&quot;$2.$(SVN_REVISION)&quot;)" 
    Condition="$(SVN_REVISION) != '' "/> 
</Target> 
1

La manera más fácil que he encontrado para hacer esto es usar la Change Assembly Version. Al usar ese complemento solo necesita proporcionar el número de versión (o la variable de entorno utilizada) y lo reemplazará en todos los archivos AssemblyInfo.cs de su área de trabajo.

0

Una solución muy rápida a esto es crear una tarea de powershell antes de su tarea msbuild. Esto supone que usted definió la variable VERSIÓN como arriba (sin el %%). Y marcó eliminar el espacio de trabajo antes de que comience la compilación.

Este es el código para la tarea de powershell.

gci -rec -Filter *AssemblyInfo* | ForEach { (Get-Content $_.FullName) | ForEach-Object {$_ -replace "1.0.0.0",$env:VERSION } | Set-Content $_.FullName} 
Cuestiones relacionadas