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许可条款许可。