visual validación studio signatura realizar pudo manifiesto instalador visual-studio clickonce versioning

visual-studio - validación - clickonce visual studio 2017



¿Cómo consigo que la versión de publicación de ClickOnce coincida con la versión del archivo AssemblyInfo.cs? (4)

Cada vez que publico la aplicación en ClickOnce obtengo que actualice 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 miran la versión de ensamblaje)?


Probablemente necesite crear un fragmento de código que actualice AssemblyInfo.cs de acuerdo con el número de versión almacenado en el archivo .csproj. (La versión de despliegue ClickOnce se almacena dentro de una etiqueta XML).

Luego, debe cambiar su archivo .csproj para ejecutar este bit de código cuando se realice la publicación de la versión de publicación. La gente de MSBuild ha blogueado acerca de cómo realizar acciones personalizadas durante ciertos tipos de compilación; revisa el blog del equipo MSBuild .


Implementé esto recientemente usando algunas tareas personalizadas. Un problema que encontré al implementar esto con ClickOnce es que todos sus archivos DLL se actualizan. Esto hace que la actualización de ClickOnce descargue todos los archivos de la aplicación en cada actualización. Esto omite las bonitas funciones de la implementación de ClickOnce, donde solo se vuelven a descargar los archivos modificados en una actualización.

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


Pasos:

  1. Use el número de versión de incremento externo (si aprovecha un servidor de integración continua como CruiseControl.NET, luego proviene de la etiqueta de compilación).
  2. Utilice GlobalVersionInfo.cs (enlace de archivo, referenciado por todos los proyectos en su solución) para mantener la versión actual y actualizarla en la compilación con la tarea AssemblyInfo desde las tareas de la comunidad MSBuild .
  3. Herramienta de línea de comandos de Script Mage desde .NET SDK para actualizar el manifiesto de ClickOnce, utilizando la misma versión (consulte los modificadores -v y -mv ).

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


Usamos Team Foundation Server Team Build y agregamos un bloque al objetivo AfterCompile de TFSBuild.proj para activar la publicación de 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" />

La variable PublishApplicationVersion genera una tarea personalizada de MSBuild para usar el número de conjunto de cambios de TFS, pero puede usar su propia tarea personalizada o una 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 que no se implemente desde una máquina de desarrollador.

Estoy seguro de que otras soluciones de integración continua (CI) pueden manejar esto de manera similar.

Editar: Lo siento, recibí tu pregunta al revés. Pasar del número de versión de ClickOnce al archivo AssemblyInfo debería ser factible. Estoy seguro de que MSBuild Community Tasks (enlace arriba) tiene 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); }