2010-01-08 13 views
12

Necesito cambiar solo el número de revisión de un archivo AssemblyInfo.cs. El número de versión tiene el formato Major.Minor.Build.Revision, p. 1.4.6.0.Cambiar solo el número de revisión en AssemblyInfo.cs con la tarea MSBuild FileUpdate

Actualmente cambio la versión con el FileUpdate tarea (desde la MSBuild Community Tasks Project) y la siguiente expresión regular:

<FileUpdate Files="@(AssemblyResult)" 
    Regex='(\[\s*assembly:\s*AssemblyVersion\(\s*"[^\.]+\.[^\.]+)\.([^\.]+)(\.)([^\.]+)("\)\s*\])' 
    ReplacementText='[assembly: AssemblyVersion("$(AssemblyMajorNumber).$(AssemblyMinorNumber).$(AssemblyBuildNumber).$(Revision)")]' /> 

ahora tengo que actualizar sólo el número de revisión y dejar mayor, menor y construir sin cambios. Entonces, ¿hay alguna tarea para hacer esto? ¿O se puede hacer con una expresión regular? ¿Cuál sería la expresión regular entonces?

+0

Esta pregunta no está relacionada con el instalador de wix o Windows en absoluto, por lo que he editado en consecuencia. –

+0

Una cosa más ... ¿puedo usar estas propiedades $ 1, $ 2 y $ 3 más ... como para asignarle valor a alguna otra propiedad que haya tomado. ?? en realidad necesito extraer el major.minor, construir el número y tener que usarlos en otro lugar ... así que, para eso los necesito ... así que, ¿pueden hacer este último favor ... –

Respuesta

16

¿Qué tal esto:

<FileUpdate Files="Properties/AssemblyInfo.cs" 
    Regex="(\d+)\.(\d+)\.(\d+)\.(\d+)" 
    ReplacementText="$1.$2.$3.$(Revision)" /> 
+0

hii wcoenen, podemos leer estos números (regex o $ 1. $ 2. $ 3. $ 4) de vuelta. ?? .. necesito leer los tres primeros, es decir $ 1. $ 2. $ 3 y asignarle valor a las propiedades en MSBUILD..pueden ayudarme en esto ?? –

+2

No. No puede usar 'FileUpdate' para establecer las propiedades de msbuild. Puede usar los valores de los grupos capturados en el texto de reemplazo como he mostrado, pero no puede usar estos valores para establecer las propiedades de msbuild. –

+0

Esto funciona cuando se agrega como una tarea personalizada en un archivo csproj. Si la construcción de la línea de comando pasa '/ p: Revision = 88', los primeros 3 cuartos permanecerán igual, pero el número de revisión se actualizará dentro de 'AssemblyInfo.cs'. Mi única sugerencia es utilizar 'Properties/AssemblyInfo.cs' relativo a la ubicación del archivo csproj. – justdan23

7

utilizo el siguiente objetivo de hacer esto:

<Target Name="UpdateAssemblyInfoVersion" DependsOnTargets="GetRevision"> 
    <CreateItem Include="**\AssemblyInfo.vb"> 
      <Output TaskParameter="Include" ItemName="AssemblyFiles"/> 
    </CreateItem> 
<Time> 
    <Output TaskParameter="Year" PropertyName="Year" /> 
</Time> 
    <FileUpdate Files="@(AssemblyFiles)" 
     Multiline="true" 
     Singleline="false" 
     Regex="(AssemblyVersion|AssemblyFileVersionAttribute|AssemblyFileVersion)\(&quot;([0-9]+\.[0-9]+\.[0-9]+)(\.[0-9]+)?&quot;\)" 
     ReplacementText="$1(&quot;$2.$(Revision)&quot;)" /> 
    <FileUpdate Files="@(AssemblyFiles)" 
     Multiline="true" 
     Singleline="false" 
     Regex="AssemblyCompany\(&quot;.*&quot;\)" 
     ReplacementText="AssemblyCompany(&quot;My Company&quot;)" /> 
    <FileUpdate Files="@(AssemblyFiles)" 
     Multiline="true" 
     Singleline="false" 
     Regex="AssemblyCopyright\(&quot;.*&quot;\)" 
     ReplacementText="AssemblyCopyright(&quot;Copyright &#169; 2009-$(Year) My Company&quot;)" /> 
</Target> 

Esto reemplaza la revisión (cuarto número) en cualquiera de los archivos AssemblyInfo (en múltiples proyectos) . Examina las etiquetas AssemblyVersion AssemblyFileVersionAttribute y AssemblyFileVersion y utiliza la propiedad $ (Revisión) MSBuild para el número (Tengo otro objetivo llamado GetRevision que obtiene esto de SVN y establece la propiedad, por lo que esta depende de ese objetivo). El regex regex maneja los números de versión que tienen 3 o 4 dígitos (tenía un grupo de 3 solamente, por la razón que sea).

También establece/sobrescribe la información de la empresa y los derechos de autor, y la establece en "Mi empresa". Para los derechos de autor, era flojo y lo hice para que siempre use el año actual, así que no tengo que acordarme de actualizarlo cada año (por lo que dice, por ejemplo, "Copyright (c) 2009-2010 My Company").

Este objetivo requiere la extensión MSBuild Community tasks.


Como cuestión de política, todo lo registrado en SVN tiene 0,0 como el último número, y sólo el servidor CI cambia este valor cuando se está haciendo una generación. Esto nos permite ver rápidamente la diferencia entre las compilaciones creadas por los desarrolladores (que nunca se les permite ir a los clientes) y las compilaciones "oficiales" creadas por el servidor de CI.

Cuestiones relacionadas