HotAvalonia adalah perpustakaan .NET yang dibuat untuk mengintegrasikan fungsionalitas hot reload dengan mulus ke dalam aplikasi Avalonia. Bertindak sebagai alat transformatif untuk pengembang Avalonia, ini memungkinkan pembaruan dinamis dan instan untuk XAML tanpa perlu kompilasi penuh. Ini memberdayakan pengembang untuk menyaksikan perubahan UI secara real-time, mempercepat alur kerja desain dan pengembangan.
| Kemasan | Versi Terbaru |
|---|---|
| Hotavalonia | |
| Hotavalonia.Extensions |
Untuk memulai, Anda harus menambahkan tiga paket berikut ke proyek Anda:
.EnableHotReload() dan .DisableHotReload() untuk kenyamanan yang lebih besar. Meskipun Anda dapat menggunakan perintah dotnet add untuk mencapai ini, saya akan sangat merekomendasikan pendekatan yang lebih manual namun fleksibel - masukkan cuplikan berikut ke dalam file .csproj , .fsproj , atau .vbproj Anda:
< 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 > Pastikan untuk mengganti $(AvaloniaVersion) dengan versi Avalonia yang saat ini Anda gunakan; Dengan kata lain, Avalonia.Markup.Xaml.Loader harus cocok dengan versi paket Avalonia utama. Anda juga dapat memperbarui HotAvalonia dan HotAvalonia.Extensions Extensions ke versi terbaru yang kompatibel.
Di cuplikan di atas, kami memperkenalkan Petunjuk Preprocessor baru - ENABLE_XAML_HOT_RELOAD . Ini bertanggung jawab untuk mengaktifkan kemampuan memuat ulang panas. Di sini arahan didefinisikan setiap kali proyek dikompilasi menggunakan konfigurasi debug, tetapi Anda dapat mengatur kondisi Anda sendiri untuk aktivasinya. Juga, jika Anda ingin menonaktifkan Hot Reload bahkan ketika ENABLE_XAML_HOT_RELOAD mungkin ada, tentukan DISABLE_XAML_HOT_RELOAD , yang akan mengganti arahan sebelumnya.
Selanjutnya, kami merujuk paket yang diperlukan yang disebutkan di atas. Avalonia.Markup.Xaml.Loader dan HotAvalonia hanya diperlukan ketika hot reload aktif, sehingga dimasukkan semata -mata ketika arahan ENABLE_XAML_HOT_RELOAD hadir. HotAvalonia.Extensions adalah unik dalam hal ini, karena memberikan metode yang selalu kita perlukan untuk diakses, jadi kita hanya menandainya sebagai ketergantungan hanya pengembangan.
Pengaturan ini menjamin bahwa tidak ada logika hot reload yang akan menyusup ke versi produksi aplikasi Anda. Semua panggilan ke HotAvalonia akan secara otomatis dan sepenuhnya diberantas dari pembuatan rilis, seperti yang dapat dilihat di bawah:
| Debug | Melepaskan |
|---|---|
Setelah Anda menginstal semua dependensi yang diperlukan, saatnya untuk membuka kunci kemampuan memuat ulang panas untuk aplikasi Anda. Untungnya, proses ini cukup mudah!
Biasanya, kode kelas aplikasi utama ( App.axaml.cs / App.xaml.cs ) terlihat seperti ini:
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 ( )
{
// ...
}
} Untuk mengaktifkan Hot Reload, yang perlu Anda lakukan adalah mengimpor Namespace HotAvalonia dan menggunakan metode ekstensi .EnableHotReload() pada instance App sebelum panggilan AvaloniaXamlLoader.Load(this) panggilan:
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()
{
// ...
}
} Dengan pengaturan ini, Anda dapat men-debug aplikasi menggunakan debugger built-in IDE Anda, menjalankan proyek dengan dotnet run , menggabungkan kemampuan Reload Hot dotnet watch dengan XAML Hot Reload yang disediakan oleh Hotavalonia, atau hanya membangun aplikasi menggunakan dotnet build dan menjalankannya sebagai Executable Standalone. Either way, Anda dapat mengharapkan aplikasi Anda untuk memuat ulang setiap kali salah satu file sumber dari kontrol Anda berubah.
Jika Anda perlu menonaktifkan untuk sementara hot reload saat aplikasi sedang berjalan, Anda dapat menghubungi Application.Current.DisableHotReload() . Untuk melanjutkan ulang panas, cukup hubungi .EnableHotReload() di Application.Current lagi.
Jika Anda ingin dapat menyegarkan keadaan kontrol selama pemuatan ulang yang panas, Anda dapat menerapkan atribut [AvaloniaHotReload] ke satu atau lebih metode instance parameter tanpa kontrol. Inilah contohnya:
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.
}
}Berikut adalah beberapa contoh yang menunjukkan hotavalonia dalam aksi:
Untuk mencobanya sendiri, Anda dapat menjalankan aplikasi samples/HotReloadDemo yang termasuk dalam repositori.
Sementara Hotavalonia adalah alat yang ampuh untuk meningkatkan alur kerja pengembangan Avalonia Anda, ia memiliki beberapa keterbatasan yang perlu diingat:
File Kode: Hotavalonia tidak dapat memproses .cs , .fs , .vb , atau file kode lainnya sendiri. Oleh karena itu, saat membuat kontrol baru, biasanya ditentukan oleh sepasang file .axaml dan .axaml.cs , Anda perlu mengkompilasi ulang proyek untuk melihat perubahan berlaku. Namun, file XAML yang ada dapat diedit secara bebas tanpa memerlukan kompilasi ulang.
Pengembangan Seluler: Tidak seperti di lingkungan pengembangan lokal, di mana aplikasi dan file proyek Anda berbagi sistem file yang sama, dalam emulator, aplikasi Anda berjalan pada apa yang secara efektif merupakan sistem jarak jauh. Karena Hotavalonia memerlukan akses langsung ke file proyek Anda, skenario ini saat ini tidak didukung.
Dukungan ARM: Dengan meningkatnya popularitas laptop berbasis ARM, beberapa dari Anda mungkin sudah mengerjakan perangkat tersebut. Sayangnya, perkakas yang diperlukan untuk Hotavalonia untuk berfungsi sepenuhnya belum ada di sana. Akibatnya, fitur -fitur tertentu - seperti memuat ulang ikon, gambar, gaya, kamus sumber daya, dan aset lainnya - mungkin tidak berfungsi pada mesin lengan.
Dilisensikan berdasarkan ketentuan lisensi MIT.