HotAvalonia هي مكتبة .NET مصممة لدمج وظائف إعادة التحميل الساخنة بسلاسة في تطبيقات أفالونيا. تعمل كأداة تحويلية لمطوري Avalonia ، فإنها تتيح التحديثات الديناميكية والفورية لـ XAML دون الحاجة إلى إعادة التجميع الكامل. هذا يمكّن المطورين من مشاهدة تغييرات واجهة المستخدم في الوقت الفعلي ، وتسريع سير عمل التصميم والتطوير.
| طَرد | أحدث إصدار |
|---|---|
| Hotavalonia | |
| Hotavalonia.Extensions |
للبدء ، ستحتاج إلى إضافة الحزم الثلاث التالية إلى مشروعك:
.EnableHotReload() و .DisableHotReload() طرق تمديد مزيد من الراحة. على الرغم من أنه يمكنك استخدام الأمر dotnet add لإنجاز ذلك ، فإنني أوصي بشدة بنهج أكثر يدويًا ولكنه مرن - أدخل المقتطف التالي في ملف .csproj أو .fsproj أو .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 > تأكد من استبدال $(AvaloniaVersion) بإصدار Avalonia الذي تستخدمه حاليًا ؛ بمعنى آخر ، يجب أن يتطابق Avalonia.Markup.Xaml.Loader مع إصدار حزمة Avalonia الرئيسية. يمكنك أيضًا تحديث HotAvalonia و HotAvalonia.Extensions .
في المقتطف أعلاه ، نقدم توجيهًا مسبقًا جديدًا - ENABLE_XAML_HOT_RELOAD . وهي مسؤولة عن تنشيط قدرات إعادة التحميل الساخنة. هنا يتم تعريف التوجيه عندما يتم تجميع المشروع باستخدام تكوين التصحيح ، ولكن يمكنك تعيين ظروفك الخاصة لتنشيطه. أيضًا ، إذا كنت ترغب في إلغاء تنشيط إعادة التحميل الساخن حتى عند ENABLE_XAML_HOT_RELOAD ، فقد تكون موجودة ، حدد DISABLE_XAML_HOT_RELOAD ، الذي سيتجاوز التوجيه السابق.
بعد ذلك ، نشير إلى الحزم اللازمة المذكورة أعلاه. Avalonia.Markup.Xaml.Loader و HotAvalonia مطلوبة فقط عندما تكون إعادة التحميل الساخنة نشطة ، لذلك يتم تضمينها فقط عند وجود توجيه ENABLE_XAML_HOT_RELOAD . HotAvalonia.Extensions فريدة من نوعها في هذا الشأن ، لأنها توفر الأساليب التي نحتاجها دائمًا لتكون متاحة ، لذلك نحن فقط نضع علامة عليها كاعتماد على التطوير فقط.
يضمن هذا الإعداد أنه لا يوجد منطق إعادة تحميل ساخن سيتسلل إلى إصدار إنتاج التطبيق الخاص بك. سيتم القضاء على جميع المكالمات إلى HotAvalonia تلقائيًا وبشكل تلقائي من بنيات الإصدار ، كما يتضح أدناه:
| تصحيح | يطلق |
|---|---|
بمجرد تثبيت جميع التبعيات اللازمة ، حان الوقت لإلغاء قفل إمكانيات إعادة التحميل الساخنة لتطبيقك. لحسن الحظ ، هذه العملية واضحة جدا!
عادة ، يبدو رمز فئة التطبيق الرئيسية ( App.axaml.cs / App.xaml.cs ) شيئًا من هذا القبيل:
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 ( )
{
// ...
}
} لتمكين إعادة التحميل الساخن ، كل ما عليك فعله هو استيراد مساحة اسم HotAvalonia واستخدام طريقة تمديد .EnableHotReload() على مثيل App قبل 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()
{
// ...
}
} من خلال هذا الإعداد ، يمكنك تصحيح التطبيق باستخدام تصحيح الأخطاء المدمج في IDE الخاص بك ، أو تشغيل المشروع باستخدام dotnet run ، أو يجمع بين إمكانيات إعادة التحميل الساخنة dotnet watch مع إعادة تحميل XAML الساخنة التي توفرها Hotavalonia ، أو ببساطة إنشاء التطبيق باستخدام dotnet build وتشغيله كأحد القابلة للتنفيذ. في كلتا الحالتين ، يمكنك توقع إعادة تحميل تطبيقك كلما يتغير أحد الملفات المصدر لعناصر التحكم الخاصة بك.
إذا كنت بحاجة إلى تعطيل إعادة التحميل الساخن مؤقتًا أثناء تشغيل التطبيق ، فيمكنك استدعاء Application.Current.DisableHotReload() . لاستئناف إعادة التحميل الساخن ، ما عليك سوى الاتصال .EnableHotReload() على Application.Current .
إذا كنت ترغب في أن تكون قادرًا على تحديث حالة التحكم أثناء إعادة التحميل الساخن ، فيمكنك تطبيق سمة [AvaloniaHotReload] على طريقة مثيل أو أكثر من المعلمة. هذا مثال:
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.
}
}فيما يلي بعض الأمثلة التي تظهر Hotavalonia في العمل:
لتجربتها بنفسك ، يمكنك تشغيل samples/HotReloadDemo المدرج في المستودع.
على الرغم من أن Hotavalonia هو أداة قوية لتعزيز سير عمل تطوير Avalonia ، إلا أنه يحتوي على بعض القيود التي يجب وضعها في الاعتبار:
ملفات التعليمات البرمجية: لا يمكن لـ Hotavalonia معالجة .cs أو .fs أو .vb أو أي ملفات رمز أخرى من تلقاء نفسها. لذلك ، عند إنشاء عنصر تحكم جديد ، يتم تعريفه عادةً من قبل زوج من ملفات .axaml و .axaml.cs ، ستحتاج إلى إعادة ترجمة المشروع لرؤية التغييرات ساري المفعول. ومع ذلك ، يمكن تحرير ملفات XAML الحالية بحرية دون الحاجة إلى إعادة التجميع.
تطوير الهاتف المحمول: على عكس بيئة التطوير المحلية ، حيث يشترك تطبيق ملفاتك ومشروعك في نفس نظام الملفات ، في المحاكي ، يعمل تطبيقك على ما هو نظام بعيد. نظرًا لأن Hotavalonia يتطلب وصولًا مباشرًا إلى ملفات مشروعك ، فإن هذا السيناريو غير مدعوم حاليًا.
دعم الذراع: مع زيادة شعبية أجهزة الكمبيوتر المحمولة القائمة على الذراع ، قد يعمل بعضكم بالفعل على هذه الأجهزة. لسوء الحظ ، فإن الأدوات المطلوبة لـ Hotavalonia لتعمل على أكمل وجه لم تكن موجودة بعد. نتيجة لذلك ، قد لا تعمل بعض الميزات - مثل إعادة تحميل الرموز والصور والأنماط وقواميس الموارد والأصول الأخرى - على آلات ARM.
مرخصة بموجب شروط ترخيص معهد ماساتشوستس للتكنولوجيا.