HotAvalonia est une bibliothèque .NET fabriquée pour intégrer de manière transparente les fonctionnalités de rechargement chaud dans les applications Avalonia. Agissant comme un outil transformateur pour les développeurs d'Avalonia, il permet des mises à jour dynamiques et instantanées de XAML sans avoir besoin de recompilation complète. Cela permet aux développeurs de voir des changements d'interface utilisateur en temps réel, accélérant le flux de travail de conception et de développement.
| Emballer | Dernière version |
|---|---|
| Hotavalonie | |
| Hotavalonia.extensions |
Pour commencer, vous devrez ajouter les trois packages suivants à votre projet:
.EnableHotReload() et .DisableHotReload() Méthodes d'extension pour une plus grande commodité. Bien que vous puissiez utiliser la commande dotnet add pour y parvenir, je recommanderais fortement une approche plus manuelle mais flexible - insérez l'extrait suivant dans votre fichier .csproj , .fsproj ou .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 > Assurez-vous de remplacer $(AvaloniaVersion) par la version d'Avalonia que vous utilisez actuellement; En d'autres termes, Avalonia.Markup.Xaml.Loader doit correspondre à la version du package Avalonia principal. Vous pouvez également mettre à jour HotAvalonia et HotAvalonia.Extensions à leurs dernières versions compatibles.
Dans l'extrait ci-dessus, nous introduisons une nouvelle directive de préprocesseur - ENABLE_XAML_HOT_RELOAD . Il est responsable de l'activation des capacités de rechargement chaud. Ici, la directive est définie chaque fois que le projet est compilé à l'aide de la configuration de débogage, mais vous pouvez définir vos propres conditions pour son activation. De plus, si vous souhaitez désactiver le rechargement chaud même lorsque ENABLE_XAML_HOT_RELOAD pourrait être présent, définissez DISABLE_XAML_HOT_RELOAD , qui l'emportera sur l'ancienne directive.
Ensuite, nous faisons référence aux packages nécessaires mentionnés ci-dessus. Avalonia.Markup.Xaml.Loader et HotAvalonia ne sont nécessaires que lorsque le rechargement de chaud est actif, ils sont donc inclus uniquement lorsque la directive ENABLE_XAML_HOT_RELOAD est présente. HotAvalonia.Extensions est unique dans cette question, car il fournit les méthodes dont nous avons toujours besoin pour être accessibles, nous le marquons donc comme une dépendance au développement uniquement.
Cette configuration garantit qu'aucune logique de rechargement chaud ne s'infiltrera la version de production de votre application. Tous les appels à HotAvalonia seront automatiquement et complètement éradiqués à partir des versions de version, comme on peut le voir ci-dessous:
| Déboguer | Libérer |
|---|---|
Une fois que vous avez installé toutes les dépendances nécessaires, il est temps de déverrouiller les capacités de rechargement chaud pour votre application. Heureusement, ce processus est assez simple!
En règle générale, le code de la classe d'application principale ( App.axaml.cs / App.xaml.cs ) ressemble à ceci:
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 ( )
{
// ...
}
} Pour activer le rechargement chaud, il vous suffit d'importer l'espace de noms HotAvalonia et d'utiliser la méthode d'extension .EnableHotReload() sur l'instance App avant l'appel AvaloniaXamlLoader.Load(this) :
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()
{
// ...
}
} Avec cette configuration, vous pouvez déboguer l'application à l'aide du débogueur intégré de votre IDE, exécuter le projet avec dotnet run , combiner les capacités de rechargement Hot dotnet watch avec XAML Hot Rechargement fourni par Hotavalonia, ou simplement créer l'application à l'aide de dotnet build et l'exécuter en tant que exécutable autonome. Quoi qu'il en soit, vous pouvez vous attendre à ce que votre application recharge chaque fois que l'un des fichiers source de vos contrôles change.
Si vous avez besoin de désactiver temporairement un rechargement chaud pendant l'exécution de l'application, vous pouvez appeler Application.Current.DisableHotReload() . Pour reprendre un rechargement chaud, appelez simplement .EnableHotReload() sur Application.Current à nouveau.
Si vous souhaitez pouvoir actualiser l'état d'un contrôle lors d'un rechargement à chaud, vous pouvez appliquer l'attribut [AvaloniaHotReload] à une ou plusieurs méthodes d'instance sans paramètre de contrôle. Voici un exemple:
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.
}
}Voici quelques exemples qui démontrent la hotavalonie en action:
Pour l'essayer vous-même, vous pouvez exécuter l'application samples/HotReloadDemo incluse dans le référentiel.
Bien que Hotavalonia soit un outil puissant pour améliorer votre flux de travail de développement Avalonia, il a certaines limites à garder à l'esprit:
Fichiers de code: Hotavalonia ne peut pas traiter .cs , .fs , .vb ou tout autre fichier de code seul. Par conséquent, lors de la création d'un nouveau contrôle, généralement défini par une paire de fichiers .axaml et .axaml.cs , vous devrez recompiler le projet pour voir les modifications prendre effet. Cependant, les fichiers XAML existants peuvent être modifiés librement sans nécessiter de recompilation.
Développement mobile: Contrairement à un environnement de développement local, où vos fichiers d'application et de projet partagent le même système de fichiers, dans un émulateur, votre application s'exécute sur ce qu'est efficacement un système distant. Étant donné que Hotavalonia nécessite un accès direct à vos fichiers de projet, ce scénario n'est actuellement pas pris en charge.
Support des bras: Avec la popularité croissante des ordinateurs portables basés sur ARM, certains d'entre vous peuvent déjà travailler sur de tels appareils. Malheureusement, l'outillage requis pour que Hotavalonie fonctionne au maximum n'est pas encore là. En conséquence, certaines fonctionnalités - telles que le rechargement à chaud des icônes, des images, des styles, des dictionnaires de ressources et d'autres actifs - peuvent ne pas fonctionner sur les machines à bras.
Licencié selon les termes de la licence du MIT.