HotAvalonia ist eine .NET -Bibliothek, um die Hot Reload -Funktionalität nahtlos in Avalonia -Anwendungen zu integrieren. Als transformatives Werkzeug für Avalonia -Entwickler ermöglicht es dynamische und sofortige Updates für XAML, ohne dass eine vollständige Neukompilation erforderlich ist. Dies ermöglicht den Entwicklern, die UI-Änderungen in Echtzeit zu beobachten und den Design- und Entwicklungsworkflow zu beschleunigen.
| Paket | Neueste Version |
|---|---|
| Hotavalonia | |
| Hotavalonia.extensions |
Um loszulegen, müssen Sie Ihrem Projekt die folgenden drei Pakete hinzufügen:
.EnableHotReload() und .DisableHotReload() Während Sie den Befehl dotnet add verwenden können, um dies zu erreichen, würde ich dringend einen manueller und ein manuelleren und flexibleren Ansatz empfehlen. Fügen Sie den folgenden Ausschnitt in Ihre .csproj , .fsproj oder .vbproj -Datei ein:
< 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 > Stellen Sie sicher, dass Sie $(AvaloniaVersion) durch die Version von Avalonia ersetzen, die Sie derzeit verwenden. Mit anderen Worten, Avalonia.Markup.Xaml.Loader sollte mit der Version des Haupt Avalonia -Pakets übereinstimmen. Sie können auch HotAvalonia und HotAvalonia.Extensions aktualisieren. Weitere Informationen zu ihren neuesten kompatiblen Versionen.
Im obigen Snippet stellen wir eine neue Präprozessoranweisung vor - ENABLE_XAML_HOT_RELOAD . Es ist verantwortlich für die Aktivierung von Hot Reload -Funktionen. Hier wird die Richtlinie definiert, wenn das Projekt mit der Debug -Konfiguration kompiliert wird. Sie können jedoch Ihre eigenen Bedingungen für die Aktivierung festlegen. Wenn Sie die heiße Reload auch dann deaktivieren möchten, auch wenn ENABLE_XAML_HOT_RELOAD vorhanden sein könnte, definieren Sie DISABLE_XAML_HOT_RELOAD , was die frühere Anweisung überschreibt.
Als nächstes verweisen wir auf die oben genannten erforderlichen Pakete. Avalonia.Markup.Xaml.Loader und HotAvalonia sind nur erforderlich, wenn die Hot -Reload aktiv ist. Sie sind daher nur dann eingeschlossen, wenn die Anweisung ENABLE_XAML_HOT_RELOAD vorhanden ist. HotAvalonia.Extensions sind in dieser Angelegenheit einzigartig, da es die Methoden bietet, die wir immer zugänglich sind.
Dieses Setup garantiert , dass keine heiße Reload -Logik die Produktionsversion Ihrer App infiltriert. Alle Anrufe nach HotAvalonia werden automatisch und vollständig aus den Release -Builds ausgerottet, wie unten zu sehen ist:
| Debuggen | Freigeben |
|---|---|
Sobald Sie alle notwendigen Abhängigkeiten installiert haben, ist es an der Zeit, die Hot Reload -Funktionen für Ihre App zu entsperren. Glücklicherweise ist dieser Prozess ziemlich einfach!
In der Regel sieht der Code der Hauptantragsklasse ( App.axaml.cs / App.xaml.cs ) ungefähr so aus:
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 ( )
{
// ...
}
} Um Hot Reload zu aktivieren, müssen Sie lediglich den HotAvalonia -Namespace importieren und die Erweiterungsmethode .EnableHotReload() in der App -Instanz vor dem AvaloniaXamlLoader.Load(this) Rufen Sie vor:
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()
{
// ...
}
} Mit diesem Setup können Sie die App mit dem integrierten Debugger Ihrer IDE debuggen, das Projekt mit dotnet run ausführen, dotnet watch Hot-Reload-Funktionen mit XAML Hot Reload von Hotavalonia kombinieren oder die App einfach mit dotnet build erstellen und als ausführliche Datei ausführen. In beiden Fällen können Sie erwarten, dass Ihre App neu lädt, wenn sich eine der Quelldateien Ihrer Steuerelemente ändert.
Wenn Sie jemals die Hot Reload während der Ausführung der App vorübergehend deaktivieren müssen, können Sie Application.Current.DisableHotReload() aufrufen. Um heißes Reload wieder Application.Current , rufen Sie einfach auf .EnableHotReload()
Wenn Sie in der Lage sein möchten, den Status eines Steuerelements während eines heißen Nachladens aktualisieren zu können, können Sie das Attribut für [AvaloniaHotReload] auf eine oder mehrere parameterlose Instanzmethoden der Steuerung anwenden. Hier ist ein Beispiel:
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.
}
}Hier sind einige Beispiele, die Hotavalonia in Aktion demonstrieren:
Um es selbst auszuprobieren, können Sie die im Repository enthaltene samples/HotReloadDemo -Anwendung ausführen.
Während Hotavalonia ein leistungsstarkes Werkzeug zur Verbesserung Ihres Avalonia -Entwicklungsworkflows ist, hat es einige Einschränkungen zu beachten:
Codedateien: Hotavalonia kann .cs , .fs , .vb oder andere Codedateien selbst nicht verarbeiten. Wenn Sie daher ein neues Steuerelement erstellen, das normalerweise durch ein Paar von .axaml und .axaml.cs -Dateien definiert ist, müssen Sie das Projekt neu kompilieren, um zu sehen, dass die Änderungen wirksam werden. Vorhandene XAML -Dateien können jedoch frei bearbeitet werden, ohne dass eine Neukompilation erforderlich ist.
Mobile Entwicklung: Im Gegensatz zu einer lokalen Entwicklungsumgebung, in der Ihre Anwendung und Projektdateien dasselbe Dateisystem teilen, wird in einem Emulator Ihre Anwendung auf dem ausgeführt, was effektiv ein Remote -System ist. Da Hotavalonia direkten Zugriff auf Ihre Projektdateien erfordert, wird dieses Szenario derzeit nicht unterstützt.
ARM-Unterstützung: Mit der zunehmenden Beliebtheit von ARM-basierten Laptops arbeiten einige von Ihnen möglicherweise bereits an solchen Geräten. Leider ist das Werkzeug, das für Hotavalonia erforderlich ist, um in vollem Umfang zu funktionieren, noch nicht da. Infolgedessen funktionieren bestimmte Funktionen - wie das heiße Nachladen von Symbolen, Bildern, Stilen, Ressourcenwörterbüchern und andere Vermögenswerte - möglicherweise nicht auf ARM -Maschinen.
Lizenziert unter den Bestimmungen der MIT -Lizenz.