HotAvalonia是一個.NET圖書館,該圖書館旨在將熱裝加載功能無縫整合到Avalonia應用程序中。它是Avalonia開發人員的變革性工具,可以使動態和瞬時更新XAML,而無需完全重新編譯。這使開發人員有能力目睹UI實時變化,從而加速了設計和開發工作流程。
| 包裹 | 最新版本 |
|---|---|
| Hotavalonia | |
| hotavalonia.extensions |
首先,您需要將以下三個軟件包添加到您的項目中:
.EnableHotReload()和.DisableHotReload()擴展方法的軟件包,以提供更大的方便。雖然您可以使用dotnet add命令來完成此操作,但我強烈建議您使用手動但靈活的方法 - 將以下片段插入您的.csproj , .fsproj或.vbproj file:
< 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 >確保用您當前使用的Avalonia版本替換$(AvaloniaVersion) ;換句話說, 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 ( )
{
// ...
}
} App啟用熱加載,您需要做的就是導入HotAvalonia名稱空間,並在.EnableHotReload() 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 Hot Reload功能與Hotavalonia提供的XAML HOT REROOAD相結合,或者簡單地使用dotnet build構建應用程序並將其運行並作為獨立執行操作。無論哪種方式,每當控件的源文件之一更改時,您都可以期望應用程序重新加載。
如果您需要在應用程序運行時暫時禁用熱加載,則可以調用Application.Current.DisableHotReload() 。要恢復熱加載,只需在Application.Current上調用.EnableHotReload() 。
如果您想在熱裝加載過程中刷新控件的狀態,則可以將[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許可條款許可。