.net msbuild clickonce versioning

.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

  1. En el Explorador de soluciones, haga clic con el botón derecho en su proyecto y seleccione Descargar proyecto.

  2. 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

  1. 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>
  2. 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>

  3. 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

  1. 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.

  2. 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:

  1. 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. *")]

  2. 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?