Despliegue y actualización rápidos de aplicaciones de escritorio de C# con Velopack
El despliegue y la actualización de aplicaciones de escritorio multiplataforma ha sido tradicionalmente una de las partes más frustrantes del desarrollo. Pero como explica Tim Corey en su vídeo "Deploy and Update C# Desktop Apps Fast with Velopack", este proceso puede ser ahora extremadamente sencillo.
Con Velopack, una fantástica herramienta diseñada para gestionarlo todo, desde la creación de paquetes hasta la aplicación de actualizaciones, los desarrolladores pueden ahora crear, desplegar y mantener sus aplicaciones utilizando un solo comando, sin complejos procesos de creación ni interminables archivos de configuración.
En este artículo, haremos un recorrido detallado del tutorial completo de Tim, de 32 minutos de duración, en el que se explica cómo utilizar Velopack para convertir una aplicación WPF estándar de C# en un paquete portátil autoactualizable. También veremos cómo soporta las migraciones automáticas, la firma de código y la configuración cero para múltiples plataformas, todo ello manteniendo el rendimiento nativo.
Introducción: ¿Por qué Velopack?
Tim comienza explicando que desplegar y actualizar aplicaciones de escritorio no tiene por qué ser difícil; de hecho, puede ser "francamente fácil" Su objetivo en este vídeo es mostrar cómo Velopack puede simplificar el proceso empaquetando una aplicación WPF, creando un instalador y permitiendo actualizaciones automáticas con una configuración mínima.
Subraya que esto no se limita a WPF: el mismo proceso sirve para WinForms, aplicaciones de consola o incluso software no .NET como Java, Rust o C++. Velopack es compatible con la creación de paquetes para casi cualquier lenguaje o marco de trabajo, lo que lo convierte en uno de los mejores marcos de trabajo instaladores disponibles en la actualidad para aplicaciones multiplataforma.
Creación del proyecto WPF
Tim comienza dentro de Visual Studio 2022, creando un proyecto WPF simple llamado DeployDemo. El proyecto está dirigido a .NET 9, pero, como señala, funciona perfectamente en versiones más recientes, como .NET 10.
Esta compilación inicial es sólo una pequeña aplicación para demostrar el proceso completo de despliegue y actualización. Aunque utiliza WPF, repite que Velopack funciona igual de bien para aplicaciones de escritorio multiplataforma, lo que lo convierte en una solución única para todo tipo de proyectos .NET e incluso no .NET.
Instalación de Velopack como herramienta global
A continuación, Tim abre el terminal y escribe:
instalación de la herramienta dotnet -g vpk
Este único comando instala Velopack globalmente en el sistema, permitiendo a los desarrolladores ejecutar comandos Velopack desde cualquier lugar.
Tim llama a esto el "paso de la salsa secreta" porque Velopack toma la salida del compilador de tu proyecto y la transforma en un paquete portátil autoactualizable. Este paso proporciona a su aplicación un instalador profesional y un marco de actualización automática, todo en uno.
Explica que la línea de comandos no sólo simplifica la configuración, sino que también se integra fácilmente en las canalizaciones de CI/CD, por lo que los desarrolladores pueden automatizar el empaquetado, la creación de versiones y el despliegue sin scripts adicionales. La posibilidad de automatizar con un solo comando permite a los desarrolladores ahorrar un tiempo valioso y mantener la coherencia de las compilaciones.
Instalación del paquete NuGet de Velopack
Dentro de Visual Studio, Tim abre Manage NuGet Packages e instala el paquete Velopack.
Explica que Velopack es el sucesor de Squirrel, un marco instalador muy popular anteriormente. Si ha utilizado Squirrel, Velopack puede migrar automáticamente su configuración existente, ofreciendo una mayor fiabilidad, compilaciones significativamente más rápidas y una mejor compatibilidad entre plataformas.
Velopack puede producir instaladores de escritorio para Windows, Linux y macOS, compatibles con varios lenguajes de programación como C#, Rust, C++ y JavaScript. Se trata de un marco para el despliegue de aplicaciones entre plataformas que funciona de maravilla en todos los sistemas.
Tim subraya que Velopack es totalmente gratuito, no hay que pagar ninguna suscripción ni licencia, pero ofrece marcos de instalación profesionales comparables a las soluciones comerciales.
Inicialización de Velopack en código
En el archivo App.xaml.cs, Tim añade un constructor e inicializa Velopack con unas pocas líneas de código:
new VelopackApp()
.Build()
.Run();
new VelopackApp()
.Build()
.Run();
Esta configuración cero conecta inmediatamente la aplicación al marco de actualización automática de Velopack. Aunque todavía no se comprueban las actualizaciones, es lo que permite el rendimiento de Velopack durante los pasos posteriores, cuando empieza a gestionar las actualizaciones y las instalaciones.
Tim explica que, aunque esta configuración es sencilla, es lo suficientemente potente como para que la aplicación se autoactualice, lo que garantiza que los usuarios siempre ejecuten la última versión en el equipo del usuario final.
Diseño de la interfaz de usuario
Antes de profundizar en las actualizaciones, Tim construye una interfaz WPF básica. Crea un diseño de cuadrícula y coloca un botón de actualización en la parte superior derecha.
Al principio, un elemento mal colocado provoca un error, pero Tim lo utiliza para recordar a los espectadores lo importante que es la jerarquía de diseño en WPF. Una vez corregida, la interfaz de la aplicación instalable tiene un aspecto limpio y redimensionable, mostrando cómo Velopack funciona a la perfección con frameworks populares como WPF.
A continuación, añade un StackPanel que contenga un cuadro de texto (mainTextBox) y un botón Submit (submitButton). Cuando la aplicación se ejecuta, muestra una interfaz de usuario mínima y funcional. Este pequeño proyecto se utilizará posteriormente para demostrar la aplicación automática de actualizaciones.
Implementación del botón de actualización
Ahora Tim pasa a la funcionalidad. Hace doble clic en el botón Actualizar para generar su evento de clic. Esto se convertirá en el núcleo del marco de actualización automática.
Explica que se podría dividir el proceso en tres fases -comprobación, descarga y aplicación de actualizaciones-, pero para esta demostración combina las tres en un solo evento para que resulte más sencillo.
Escribir la lógica de actualización
En MainWindow.xaml.cs, Tim crea un nuevo UpdateManager y lo apunta a una ruta local que actuará como fuente de actualización:
var mgr = new UpdateManager(@"C:\temp\DeployDemoServer");
var mgr = new UpdateManager(@"C:\temp\DeployDemoServer");
En el mundo real, esta ruta puede ser una URL HTTPS para una aplicación de cara al exterior o un archivo compartido local para distribución interna. Velopack no requiere una configuración complicada: funciona a la perfección en cualquier entorno.
A continuación, Tim añade código asíncrono para gestionar la comprobación de versiones y las actualizaciones:
var newVersion = await mgr.CheckForUpdatesAsync();
if (newVersion == null)
{
MessageBox.Show("You are on the latest version.");
return;
}
await mgr.DownloadUpdatesAsync(newVersion);
await mgr.ApplyUpdatesAndRestartAsync(newVersion);
var newVersion = await mgr.CheckForUpdatesAsync();
if (newVersion == null)
{
MessageBox.Show("You are on the latest version.");
return;
}
await mgr.DownloadUpdatesAsync(newVersion);
await mgr.ApplyUpdatesAndRestartAsync(newVersion);
Este código comprueba si existe una versión más reciente, descarga los paquetes delta y los aplica al instante. Velopack se encarga de todo: la aplicación se reinicia automáticamente una vez finalizada la actualización.
Explica que, aunque en esta demostración se hace clic en un botón, los desarrolladores también pueden activar estas actualizaciones de forma silenciosa o automática al arrancar, igual que el software profesional.
Publicación de la aplicación
A continuación, Tim muestra cómo publicar la primera versión. Utilizando el terminal dentro de la carpeta del proyecto, ejecuta:
dotnet publish --autocontenido -r win-x64 -o ./publish
Esto genera una compilación autónoma que incluye el tiempo de ejecución de .NET. Esto significa que la aplicación se ejecutará en el equipo de cualquier usuario final sin necesidad de instalar .NET por separado.
Tim muestra el resultado compilado -el archivo DeployDemo.exe- en el directorio de publicación, confirmando que se ejecuta correctamente. Por el momento, solo se trata de la salida del compilador, no de una versión empaquetada e instalable.
Creación del paquete de instalación
Para convertir los archivos publicados en un instalador desplegable, Tim utiliza el comando pack de Velopack:
paquete vpk --id-paquete DeployDemo --versión-paquete 1.0.0 --directorio-paquete ./publish
Esto crea una carpeta Releases que contiene todos los archivos necesarios, incluidos los ejecutables de instalación.
Tim copia los archivos de la versión en una carpeta local del "servidor". Al ejecutar el archivo de instalación generado, la aplicación se instala por completo: crea accesos directos, añade una entrada en la lista de Programas y características y ofrece una experiencia de instalación nativa sin permisos adicionales ni solicitudes de UAC.
Ahora, la aplicación es una aplicación instalable oficial desarrollada por Velopack.
Actualización de la aplicación
Para simular una actualización, Tim modifica el código del botón Enviar:
MessageBox.Show($"Hello {mainTextBox.Text}");
MessageBox.Show($"Hello {mainTextBox.Text}");
A continuación, vuelve a empaquetar la aplicación repitiendo los mismos comandos de publicación y empaquetado, pero con un número de versión actualizado:
paquete vpk --id-paquete Demo-implementación --versión-paquete 1.0.1 --directorio-paquete ./publicar
Velopack crea automáticamente paquetes delta (pequeños archivos diferenciales para los usuarios existentes) y un paquete completo para las nuevas instalaciones. Tim señala que, si bien el paquete completo ocupa unos 63 MB, el paquete delta sólo 132 KB, lo que demuestra que Velopack es mucho más rápido y eficaz que otras herramientas o marcos de instalación.
Copia las nuevas versiones en la carpeta del servidor, creando así versiones para la versión 1.0.1.
Aplicación de la actualización
Tim vuelve a abrir la aplicación instalada y hace clic en el botón Actualizar. En cuestión de segundos, Velopack descarga y aplica la actualización 1.0.1, reiniciando la aplicación automáticamente.
Cuando escribe su nombre y pulsa Enviar, ahora dice "Hola Tim" El marco de actualización funcionó a la velocidad del rayo, lo que confirma que Velopack se integra fácilmente y gestiona todo el ciclo de actualización a la perfección.
Señala que los desarrolladores podrían alojar estas versiones en Azure, almacenamiento de archivos o un repositorio web, y la misma lógica de actualización automática seguiría funcionando en Windows, Linux o macOS.
Mantenimiento simplificado y flexibilidad
Tim destaca cómo este proceso facilita enormemente el mantenimiento de las aplicaciones de escritorio. Los desarrolladores pueden desplegar herramientas internas o software público con funcionalidad completa de actualización automática utilizando una configuración mínima y sin dependencias externas.
Velopack ofrece una API familiar para desarrolladores .NET y se encarga de todos los pasos:
-
Creación de publicaciones
-
Creación de paquetes
-
Creación de versiones
-
Aplicación de actualizaciones
- Desinstalación limpia
Todo ello sin requerir un complejo proceso de compilación ni archivos de configuración exhaustivos.
Tim considera que Velopack es una herramienta fantástica que ayuda a los desarrolladores a ahorrar un tiempo valioso al tiempo que ofrecen un software pulido y profesional. Es un marco para actualizaciones entre plataformas que "simplemente funciona"
Desinstalación y seguimiento de versiones
Tim demuestra que la aplicación instalada aparece en la lista "Desinstalar o cambiar un programa" de Windows, mostrando la versión 1.0.1. Velopack se limita a eliminar la carpeta sin dejar residuos.
Añade que Velopack funciona de maravilla no solo para WPF, sino también para WinForms, la plataforma UNO e incluso proyectos más antiguos de .NET Framework 4.6.2. También es compatible con otros frameworks y lenguajes populares como Rust o JavaScript, lo que lo convierte en una solución universal para instaladores multiplataforma.
Conclusión
Para terminar, Tim expresa lo impresionado que está con el rendimiento de Velopack. Con sólo unos pocos pasos (instalar la herramienta, añadir una línea de código y ejecutar dos comandos), los desarrolladores pueden pasar de un simple proyecto .NET a una aplicación multiplataforma totalmente instalable y autoactualizable.
Ofrece un enorme agradecimiento a los desarrolladores de Velopack por construir una obra de ingeniería tan grande, calificándola posiblemente como el mejor instalador y marco de actualización para aplicaciones de escritorio multiplataforma disponible en la actualidad.
Tim termina recordando a los espectadores que todos los detalles, comandos y código fuente están disponibles en la descripción del vídeo. Anima a los desarrolladores a debatir ideas, solicitar funciones y contribuir al futuro del proyecto a través de su repositorio público.
