¿Cómo consigo que la versión de ClickOnce Publish coincida con la versión del archivo AssemblyInfo.cs?

StackOverflow https://stackoverflow.com/questions/44470

Pregunta

Cada vez que publico la aplicación en Haga clic una vez Consigo actualizar el número de revisión en uno.¿Hay alguna manera de obtener este cambio automáticamente para cambiar el número de versión en el archivo AssemblyInfo.cs (todos nuestros informes de errores se basan en la versión de ensamblaje)?

¿Fue útil?

Solución

Usamos Team Foundation Server Team Build y hemos agregado un bloque al TFSBuild.proj. AfterCompile objetivo para activar la publicación ClickOnce con nuestro número de versión preferido:

<MSBuild Projects="$(SolutionRoot)\MyProject\Myproject.csproj"
         Properties="PublishDir=$(OutDir)\myProjectPublish\;
                     ApplicationVersion=$(PublishApplicationVersion);
                     Configuration=$(Configuration);Platform=$(Platform)"
         Targets="Publish" />

El PublishApplicationVersion La variable es generada por una tarea personalizada de MSBuild para usar el número de conjunto de cambios TFS, pero podría usar tu propia tarea personalizada o un solución existente para obtener el número de versión del archivo AssemblyInfo.

En teoría, esto podría hacerse en su archivo de proyecto (que de todos modos es solo un script de MSBuild), pero recomendaría no implementarlo desde una máquina de desarrollador.

estoy seguro de que otros integración continua (CI) las soluciones pueden manejar esto de manera similar.


Editar: Lo siento, entendí tu pregunta al revés.Debería ser factible pasar del número de versión de ClickOnce al archivo AssemblyInfo.Estoy seguro de que las tareas de la comunidad de MSBuild (enlace arriba) tienen una tarea para actualizar el archivo AssemblyInfo, por lo que solo necesitaría una tarea personalizada para extraer el número de versión del XML de configuración de ClickOnce.

Sin embargo, también puede considerar cambiar su informe de errores para incluir también la versión de publicación de ClickOnce:

if (System.Deployment.Application.ApplicationDeployment.IsNetworkDeployed)
{
    Debug.WriteLine(System.Deployment.Application.ApplicationDeployment.
                                                        CurrentDeployment.CurrentVersion);
}

Otros consejos

Implementé esto recientemente usando algunas tareas personalizadas.Un problema que encontré al implementar esto con ClickOnce es que todos sus archivos DLL están actualizados.Esto hace que la actualización de ClickOnce descargue todos los archivos de la aplicación en cada actualización.Esto pasa por alto una de las características interesantes de la implementación de ClickOnce donde solo los archivos modificados se vuelven a descargar en una actualización.

Algo en lo que pensar al implementar algo como esto con ClickOnce.

Pasos:

  1. Utilice un número de versión incremental externo (si aprovecha un servidor de integración continua como CruiseControl.NET, entonces proviene de la etiqueta de compilación).
  2. Utilice GlobalVersionInfo.cs (enlace de archivo al que hacen referencia todos los proyectos de su solución) para mantener la versión actual y actualizarla en la compilación con la tarea AssemblyInfo del Comunidad MSBuild tareas.
  3. Guion mago herramienta de línea de comandos del SDK de .NET para actualizar el manifiesto ClickOnce, utilizando la misma versión (consulte la -v y -mv interruptores).

Por cierto, una buena ventaja es que, cada vez que publica automáticamente una versión más nueva de implementación de ClickOnce a través del script de integración, si también especifica la versión mínima de mage.exe (igual que la versión), cada usuario se actualizará automáticamente en la siguiente aplicación. lanzamiento.

Probablemente necesitarás crear un fragmento de código que actualice AssemblyInfo.cs según el número de versión almacenado en el archivo .csproj.(La versión de implementación de ClickOnce se almacena dentro de una etiqueta XML).

Luego cambiará su archivo .csproj para ejecutar este fragmento de código cuando se realice la compilación Publicar|Liberar.La gente de MSBuild ha escrito en su blog sobre cómo realizar acciones personalizadas durante ciertos tipos de compilación;Compruebe el Blog del equipo de MSBuild.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top