HotAvalonia เป็นห้องสมุด. NET ที่สร้างขึ้นเพื่อรวมฟังก์ชั่นการโหลดใหม่เข้ากับแอปพลิเคชัน Avalonia อย่างราบรื่น ทำหน้าที่เป็นเครื่องมือการเปลี่ยนแปลงสำหรับนักพัฒนา Avalonia มันช่วยให้การอัปเดตแบบไดนามิกและทันทีเป็น XAML โดยไม่จำเป็นต้องมีการรวมกันอย่างเต็มที่ สิ่งนี้ช่วยให้นักพัฒนาซอฟต์แวร์เป็นพยานการเปลี่ยนแปลง UI ในเวลาจริงเร่งการออกแบบและการพัฒนาเวิร์กโฟลว์
| บรรจุุภัณฑ์ | เวอร์ชันล่าสุด |
|---|---|
| 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 เป็นรุ่นล่าสุดที่เข้ากันได้
ในตัวอย่างด้านบนเราแนะนำคำสั่ง preprocessor ใหม่ - 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 namespace และใช้วิธีการขยาย .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 Hot Reload ที่จัดทำโดย 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 ต้องการการเข้าถึงไฟล์โครงการของคุณโดยตรงสถานการณ์นี้จึงไม่ได้รับการสนับสนุนในปัจจุบัน
การสนับสนุน ARM: ด้วยความนิยมที่เพิ่มขึ้นของแล็ปท็อปที่ใช้แขนคุณบางคนอาจทำงานกับอุปกรณ์ดังกล่าวแล้ว น่าเสียดายที่เครื่องมือที่จำเป็นสำหรับ Hotavalonia ในการทำงานอย่างเต็มที่ยังไม่ได้อยู่ที่นั่น เป็นผลให้คุณสมบัติบางอย่าง - เช่นการโหลดไอคอนภาพ, รูปภาพ, สไตล์, พจนานุกรมทรัพยากรและสินทรัพย์อื่น ๆ - อาจไม่ทำงานบนเครื่องแขน
ได้รับใบอนุญาตภายใต้เงื่อนไขของใบอนุญาต MIT