.net - ¿Cómo puedo hacer que MSBuild incremente el número de versión de revisión de ClickOnce publish en un servidor de compilación?
versioning (3)
Tenemos un script NAnt que sale de CVS y luego ejecuta MSBuild para publicar la aplicación. El problema es que debemos recordar aumentar siempre la versión en Visual Studio.
Tenemos la opción de incrementar automáticamente esto en la publicación, pero esto se borrará en la próxima salida y prefiero no tener que obtener la secuencia de comandos de compilación para verificar el archivo del proyecto.
¿Hay una manera simple de hacer esto?
Al final hice esto usando NAnt xmlpoke, por lo que para la versión terminamos con 20.0.day of year.hourminute - es en su mayoría único en todas las construcciones.
No hay necesidad de tareas personalizadas, y la versión más nueva de MSBuild también tiene un pokexml, por lo que podría funcionar con eso.
<target name="pokerevision" depends="init">
<property name="projectname" value="MyProject.GUI" />
<!-- This is a bit flawed because 231 could mean 02:31 or 23:01, but we never build before 3 am. -->
<property
name="app.revision"
value="${datetime::get-hour(datetime::now())}${datetime::get-minute(datetime::now())}" />
<echo message="revision: ${app.revision}" />
<xmlpoke
file="${Solution.Path}/${projectname}/${projectname}.csproj"
xpath="//x:Project/x:PropertyGroup[1]/x:ApplicationRevision"
value="${app.revision}"
>
<namespaces>
<namespace prefix="x" uri="http://schemas.microsoft.com/developer/msbuild/2003" />
</namespaces>
</xmlpoke>
<property
name="app.version"
value="20.0.${datetime::get-day-of-year(datetime::now())}.${app.revision}" />
<echo message="version: ${app.version}" />
<xmlpoke
file="${Solution.Path}/${projectname}/${projectname}.csproj"
xpath="//x:Project/x:PropertyGroup[1]/x:ApplicationVersion"
value="${app.version}"
>
<namespaces>
<namespace prefix="x" uri="http://schemas.microsoft.com/developer/msbuild/2003" />
</namespaces>
</xmlpoke>
</target>
Actualizando la MinimumRequiredVersion
automáticamente
Introducción al Editor de proyectos
En el Explorador de soluciones, haga clic con el botón derecho en su proyecto y seleccione Descargar proyecto.
Una vez que el proyecto no esté disponible, haga clic con el botón
<project_name>.<lang>
nuevamente y seleccione edit<project_name>.<lang>
proj.
Introducción a MSBuild
Las propiedades usan pares clave / valor para extraer información
- Usando el nombre de la propiedad como un alias, puede usar
$(OutputPath)
para obtener el valor para el elemento<OutputPath>./bin</OutputPath>
- Usando el nombre de la propiedad como un alias, puede usar
Utilizaremos las siguientes propiedades generadas para una implementación de ClickOnce
<MinimumRequiredVersion>1.0.0.6</MinimumRequiredVersion> <ApplicationRevision>7</ApplicationRevision> <ApplicationVersion>1.0.0.%2a</ApplicationVersion>
MSBuild Tasks
se pueden especificar en el archivo del proyecto (* .proj) y se pueden invocar durante un evento de compilación.-
FormatVersion
es una tarea integrada para .NET 4.0 y posterior que formatea ApplicationVersion y ApplicationRevision en un solo número de versión.
-
Implementación
Copie y pegue el siguiente código en el archivo de proyecto abierto como un elemento secundario en el elemento raíz
<Project>
.<Target Name="AutoSetMinimumRequiredVersion" BeforeTargets="GenerateDeploymentManifest"> <FormatVersion Version="$(ApplicationVersion)" Revision="$(ApplicationRevision)"> <Output PropertyName="MinimumRequiredVersion" TaskParameter="OutputVersion" /> </FormatVersion> <FormatVersion Version="$(ApplicationVersion)" Revision="$(ApplicationRevision)"> <Output PropertyName="_DeploymentBuiltMinimumRequiredVersion" TaskParameter="OutputVersion" /> </FormatVersion> </Target>
Este código tomará ApplicationVersion y ApplicationRevision como parámetros en la tarea Format Version y guardará la salida sobrescribiendo la MinimumRequiredVersion con la versión de publicación completa.
Guarde y vuelva a cargar su proyecto. Cada implementación de ClickOnce se actualizará automáticamente a la última versión publicada.
Muchas gracias a Kev por su respuesta, que básicamente hice aquí de nuevo con un poco de aclaración adicional para los principiantes. Aquí hay una publicación de blog que hice sobre el tema que se amplía aún más en mi respuesta aquí.
Tienes varias opciones, aquí hay dos:
Especifique un asterisco en lugar del número de versión de compilación para que se incremente automáticamente
http://msdn.microsoft.com/en-us/library/system.reflection.assemblyversionattribute.aspx[assembly: AssemblyVersion ("1.0. *")]
Utilice la tarea msbuild AsssemblyInfo desde MSBuild Extension Pack.
http://msbuildextensionpack.codeplex.com
Ejemplo:
http://www.msbuildextensionpack.com/help/4.0.4.0/html/d6c3b5e8-00d4-c826-1a73-3cfe637f3827.htm
Editar
Perdón, leí mal tu pregunta.
Vea la respuesta aceptada por Jason Stangroome aquí:
¿Cómo consigo que la versión de publicación de ClickOnce coincida con la versión del archivo AssemblyInfo.cs?