HotAvalonia - это библиотека .NET, созданная для беспрепятственной интеграции функциональности горячей перезагрузки в приложения Avalonia. Выступая в качестве преобразующего инструмента для разработчиков Avalonia, он обеспечивает динамические и мгновенные обновления в XAML без необходимости полного перекомпиляции. Это дает возможность разработчикам наблюдать изменение пользовательского интерфейса в режиме реального времени, ускоряя рабочий процесс дизайна и разработки.
| Упаковка | Последняя версия |
|---|---|
| Хотавалония | |
| 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 требуются только тогда, когда активна горячая перезагрузка, поэтому они включаются исключительно при наличии директивы 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 и использовать метод расширения .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 , объединить возможности Hot Reload dotnet watch с HAML 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.
}
}Вот несколько примеров, которые демонстрируют хотавалонию в действии:
Чтобы попробовать это самостоятельно, вы можете запустить приложение samples/HotReloadDemo включенным в репозиторий.
В то время как Hotavalonia является мощным инструментом для улучшения вашего рабочего процесса по разработке Avalonia, у нее есть некоторые ограничения, чтобы помнить:
Файлы кода: Hotavalonia не может обрабатывать .cs , .fs , .vb или любые другие кодовые файлы самостоятельно. Следовательно, при создании нового элемента управления, обычно определяемым парой файлов .axaml и .axaml.cs , вам нужно будет перекомпилировать проект, чтобы увидеть, как изменения вступают в силу. Однако существующие файлы XAML могут быть редактированы свободно, не требуя перекомпиляции.
Разработка мобильных устройств: в отличие от местной среды разработки, где ваши файлы приложения и проекта совместно используют одну и ту же файловую систему, в эмуляторе ваше приложение выполняет, что эффективно является удаленной системой. Поскольку Hotavalonia требует прямого доступа к файлам проекта, этот сценарий в настоящее время не поддерживается.
Поддержка ARM: с растущей популярностью ноутбуков на основе руки некоторые из вас уже могут работать на таких устройствах. К сожалению, инструментария, необходимая для того, чтобы Hotavalonia мог функционировать в полной мере, пока нет. В результате определенные функции, такие как горячая перезагрузка икон, изображения, стили, ресурсные словаря и другие активы, могут не работать на машинах ARM.
Лицензирован в соответствии с условиями лицензии MIT.