HotAvalonia es una biblioteca de .NET diseñada para integrar perfectamente la funcionalidad de recarga caliente en aplicaciones de Avalonia. Actuando como una herramienta transformadora para los desarrolladores de Avalonia, permite actualizaciones dinámicas e instantáneas a XAML sin la necesidad de una recompilación completa. Esto faculta a los desarrolladores para presenciar los cambios de IU en tiempo real, acelerando el flujo de trabajo de diseño y desarrollo.
| Paquete | Última versión |
|---|---|
| Hotavalonia | |
| Hotavalonia.extensions |
Para comenzar, deberá agregar los siguientes tres paquetes a su proyecto:
.EnableHotReload() y .DisableHotReload() para mayor conveniencia. Si bien podría usar el comando dotnet add para lograr esto, recomendaría encarecidamente un enfoque más manual pero flexible: inserte el siguiente fragmento en su archivo .csproj , .fsproj o .vbproj :
< PropertyGroup Condition = " '$(Configuration)' == 'Debug' " >
<!-- If you're a .vbproj user, replace ';' with ',' -->
< DefineConstants >$(DefineConstants);ENABLE_XAML_HOT_RELOAD</ DefineConstants >
</ PropertyGroup >
< ItemGroup >
< PackageReference Condition = " $(DefineConstants.Contains(ENABLE_XAML_HOT_RELOAD)) " Include = " Avalonia.Markup.Xaml.Loader " Version = " $(AvaloniaVersion) " />
< PackageReference Condition = " $(DefineConstants.Contains(ENABLE_XAML_HOT_RELOAD)) " Include = " HotAvalonia " Version = " 2.0.2 " />
< PackageReference Include = " HotAvalonia.Extensions " Version = " 2.0.2 " PrivateAssets = " All " />
</ ItemGroup > Asegúrese de reemplazar $(AvaloniaVersion) con la versión de Avalonia que está utilizando actualmente; En otras palabras, Avalonia.Markup.Xaml.Loader debe coincidir con la versión principal del paquete Avalonia . También puede actualizar HotAvalonia y HotAvalonia.Extensions a sus últimas versiones compatibles.
En el fragmento de arriba, presentamos una nueva directiva del preprocesador - ENABLE_XAML_HOT_RELOAD . Es responsable de activar las capacidades de recarga en caliente. Aquí la directiva se define cada vez que el proyecto se compila utilizando la configuración de depuración, pero puede establecer sus propias condiciones para su activación. Además, si desea desactivar la recarga caliente incluso cuando ENABLE_XAML_HOT_RELOAD podría estar presente, defina DISABLE_XAML_HOT_RELOAD , que anulará la directiva anterior.
A continuación, hacemos referencia a los paquetes necesarios mencionados anteriormente. Avalonia.Markup.Xaml.Loader y HotAvalonia solo se requieren cuando la recarga caliente está activa, por lo que se incluyen únicamente cuando la directiva ENABLE_XAML_HOT_RELOAD está presente. HotAvalonia.Extensions es único en ese asunto, ya que proporciona los métodos que siempre necesitamos para ser accesibles, por lo que lo marcamos como una dependencia de solo desarrollo.
Esta configuración garantiza que ninguna lógica de recarga caliente se infiltrará en la versión de producción de su aplicación. Todas las llamadas a HotAvalonia se erradicarán automáticamente y completamente a partir de las compilaciones de lanzamiento, como se puede ver a continuación:
| Depurar | Liberar |
|---|---|
Una vez que haya instalado todas las dependencias necesarias, es hora de desbloquear las capacidades de recarga en caliente para su aplicación. Afortunadamente, ¡este proceso es bastante sencillo!
Por lo general, el código de la clase de aplicación principal ( App.axaml.cs / App.xaml.cs ) se ve algo así:
using Avalonia ;
using Avalonia . Controls . ApplicationLifetimes ;
using Avalonia . Markup . Xaml ;
namespace HotReloadDemo ;
public partial class App : Application
{
public override void Initialize ( )
{
AvaloniaXamlLoader . Load ( this ) ;
}
public override void OnFrameworkInitializationCompleted ( )
{
// ...
}
} Para habilitar la recarga en caliente, todo lo que necesita hacer es importar el espacio de nombres HotAvalonia y usar el método de extensión .EnableHotReload() en la instancia App antes del AvaloniaXamlLoader.Load(this) llamada:
using Avalonia;
using Avalonia.Controls.ApplicationLifetimes;
using Avalonia.Markup.Xaml;
+ using HotAvalonia;
namespace HotReloadDemo;
public partial class App : Application
{
public override void Initialize()
{
+ this.EnableHotReload(); // Ensure this line **precedes** `AvaloniaXamlLoader.Load(this);`
AvaloniaXamlLoader.Load(this);
}
public override void OnFrameworkInitializationCompleted()
{
// ...
}
} Con esta configuración, puede depurar la aplicación utilizando el depurador incorporado de su IDE, ejecutar el proyecto con dotnet run , combinar las capacidades de recarga de Hotnet dotnet watch con la recarga Hot Hot XAML proporcionada por Hotavalonia, o simplemente construir la aplicación usando dotnet build y ejecutarla como un ejecutable independiente. De cualquier manera, puede esperar que su aplicación se vuelva a cargar cada vez que cambia uno de los archivos de origen de sus controles.
Si alguna vez necesita deshabilitar temporalmente la recarga caliente mientras se ejecuta la aplicación, puede llamar Application.Current.DisableHotReload() . Para reanudar la recarga caliente, simplemente llame .EnableHotReload() en Application.Current nuevamente.
Si desea poder actualizar el estado de un control durante una recarga caliente, puede aplicar el atributo [AvaloniaHotReload] a uno o más métodos de instancia sin parámetros del control. Aquí hay un ejemplo:
using Avalonia.Controls;
+ using HotAvalonia;
public partial class FooControl : UserControl
{
public FooControl()
{
InitializeComponent();
Initialize();
}
+ [AvaloniaHotReload]
private void Initialize()
{
// Code to initialize or refresh
// the control during hot reload.
}
}Aquí hay algunos ejemplos que demuestran Hotavalonia en acción:
Para probarlo usted mismo, puede ejecutar la aplicación samples/HotReloadDemo incluida en el repositorio.
Si bien Hotavalonia es una herramienta poderosa para mejorar su flujo de trabajo de desarrollo de Avalonia, tiene algunas limitaciones a tener en cuenta:
Archivos de código: Hotavalonia no puede procesar .cs , .fs , .vb o cualquier otro archivo de código por su cuenta. Por lo tanto, al crear un nuevo control, típicamente definido por un par de archivos .axaml y .axaml.cs , deberá recompilar el proyecto para ver que los cambios entren en vigencia. Sin embargo, los archivos XAML existentes se pueden editar libremente sin requerir la recompilación.
Desarrollo móvil: a diferencia de un entorno de desarrollo local, donde sus archivos de aplicación y proyecto comparten el mismo sistema de archivos, en un emulador, su aplicación se ejecuta en lo que efectivamente es un sistema remoto. Dado que Hotavalonia requiere acceso directo a los archivos de su proyecto, este escenario actualmente no es compatible.
Soporte del brazo: con la creciente popularidad de las computadoras portátiles basadas en el brazo, algunos de ustedes ya pueden trabajar en tales dispositivos. Desafortunadamente, las herramientas requeridas para que Hotavalonia funcione al máximo aún no está allí. Como resultado, ciertas características, como la recarga en caliente de iconos, imágenes, estilos, diccionarios de recursos y otros activos, pueden no funcionar en máquinas de brazo.
Licenciado bajo los términos de la licencia MIT.