HotAvaloniaは、ホットリロード機能をAvaloniaアプリケーションにシームレスに統合するために作成された.NETライブラリです。 Avalonia開発者にとって変革的なツールとして機能するため、完全な再コンパイルを必要とせずにXAMLに動的かつ瞬時に更新できます。これにより、開発者はUIの変化をリアルタイムで目撃し、設計および開発ワークフローを加速させることができます。
| パッケージ | 最新バージョン |
|---|---|
| hotavalonia | |
| hotavalonia.extensions |
開始するには、次の3つのパッケージをプロジェクトに追加する必要があります。
.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ネームスペースをインポートし、 AvaloniaXamlLoader.Load(this)通話の前のAppインスタンスで.EnableHotReload()拡張メソッドを使用するだけです。
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でプロジェクトを実行したり、Hotavaloniaが提供するdotnet watch Hotリロード機能とXAMLホットリロードを組み合わせたり、 dotnet buildを使用してアプリを構築してスタンドアロンの実行可能として実行したりできます。いずれにせよ、コントロールのソースファイルの1つが変更されるたびに、アプリがリロードされることが期待できます。
アプリの実行中にホットリロードを一時的に無効にする必要がある場合は、 Application.Current.DisableHotReload()を呼び出すことができます。ホットリロードを再開するには、 Application.Currentで.EnableHotReload()を再度呼び出します。
ホットリロード中にコントロールの状態を更新できるようにしたい場合は、 [AvaloniaHotReload]属性を1つ以上のパラメーターのないインスタンスメソッドに適用できます。これが例です:
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は、アバロニア開発ワークフローを強化するための強力なツールですが、留意すべきいくつかの制限があります。
コードファイル: Hotavaloniaは.cs 、 .fs 、 .vb 、またはその他のコードファイルを単独で処理できません。したがって、通常、 .axamlと.axaml.csファイルのペアによって定義される新しいコントロールを作成する場合、変更が有効になるのを確認するには、プロジェクトを再コンパイルする必要があります。ただし、既存のXAMLファイルは、再コンパイルを必要とせずに自由に編集できます。
モバイル開発:アプリケーションとプロジェクトファイルが同じファイルシステムを共有しているローカル開発環境とは異なり、エミュレータでは、アプリケーションがリモートシステムであるもので実行されています。 Hotavaloniaはプロジェクトファイルに直接アクセスする必要があるため、このシナリオは現在サポートされていません。
腕のサポート:アームベースのラップトップの人気が高まっているため、一部の人はすでにそのようなデバイスで作業するかもしれません。残念ながら、Hotavaloniaが最大限に機能するために必要なツールはまだ存在していません。その結果、アイコン、画像、スタイル、リソース辞書、その他の資産のホットリロードなど、特定の機能は、アームマシンでは機能しない場合があります。
MITライセンスの条件に基づいてライセンスされています。