HotAvalonia 는 핫 재 장전 기능을 Avalonia 응용 프로그램에 원활하게 통합하도록 제작 된 .NET 라이브러리입니다. 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 최신 호환 버전으로 업데이트 할 수도 있습니다.
위의 스 니펫에서는 새로운 전처리 서기 지침 ENABLE_XAML_HOT_RELOAD 를 소개합니다. 핫 재 장전 기능을 활성화합니다. 여기서 디버그 구성을 사용하여 프로젝트가 컴파일 될 때마다 지침이 정의되지만 활성화를 위해 고유 한 조건을 설정할 수 있습니다. 또한 ENABLE_XAML_HOT_RELOAD 존재하는 경우에도 핫 재 장전을 비활성화하려면 DISABLE_XAML_HOT_RELOAD 정의하면 이전 지침을 무시합니다.
다음으로, 위에서 언급 한 필요한 패키지를 참조합니다. Avalonia.Markup.Xaml.Loader 및 HotAvalonia Hot Reload가 활성화 된 경우에만 필요하므로 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 ( )
{
// ...
}
} Hot Reload를 활성화하려면 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 사용하여 프로젝트 실행, dotnet watch Hot Reload 기능을 Hotavalonia에서 제공 한 XAML Hot Reload와 결합하거나 dotnet build 사용하여 앱을 구축하여 독립형 실행 가능으로 실행할 수 있습니다. 어느 쪽이든, 컨트롤의 소스 파일 중 하나가 변경 될 때마다 앱이 다시로드 될 수 있습니다.
앱이 실행중인 동안 일시적으로 핫 재 장전을 비활성화 해야하는 경우 Application.Current.DisableHotReload() 호출 할 수 있습니다. Hot Reload를 재개하려면 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 Development Workflow를 향상시키기위한 강력한 도구이지만 명심해야 할 몇 가지 제한 사항이 있습니다.
코드 파일 : Hotavalonia는 .cs , .fs , .vb 또는 기타 코드 파일 자체를 처리 할 수 없습니다. 따라서 일반적으로 .axaml 및 .axaml.cs 파일 쌍으로 정의 된 새 컨트롤을 작성할 때 변경 사항이 적용되는 것을 확인하려면 프로젝트를 다시 컴파일해야합니다. 그러나 기존 XAML 파일은 재 컴파일없이 자유롭게 편집 할 수 있습니다.
모바일 개발 : 애플리케이션 및 프로젝트 파일이 동일한 파일 시스템을 공유하는 로컬 개발 환경과 달리 에뮬레이터에서 응용 프로그램이 원격 시스템이 효과적으로 실행됩니다. Hotavalonia는 프로젝트 파일에 직접 액세스해야 하므로이 시나리오는 현재 지원되지 않습니다.
ARM 지원 : ARM 기반 랩탑의 인기가 높아짐에 따라 일부는 이미 그러한 장치에서 작동 할 수 있습니다. 불행히도, Hotavalonia가 최대한 기능하는 데 필요한 툴링은 아직 없습니다. 결과적으로 아이콘, 이미지, 스타일, 리소스 사전 및 기타 자산의 핫 재 장전과 같은 특정 기능은 ARM 머신에서 작동하지 않을 수 있습니다.
MIT 라이센스의 조건에 따라 라이센스.