HotAvalonia é uma biblioteca .NET criada para integrar perfeitamente a funcionalidade de recarga a quente em aplicações de Avalonia. Atuando como uma ferramenta transformadora para os desenvolvedores de Avalonia, permite atualizações dinâmicas e instantâneas para o XAML sem a necessidade de recompilação total. Isso capacita os desenvolvedores a testemunhar mudanças na UI em tempo real, acelerando o fluxo de trabalho de design e desenvolvimento.
| Pacote | Versão mais recente |
|---|---|
| Hotavalonia | |
| Hotavalonia.Extensions |
Para começar, você precisará adicionar os três pacotes a seguir ao seu projeto:
.EnableHotReload() e .DisableHotReload() para maior conveniência. Embora você possa usar o comando dotnet add para conseguir isso, eu recomendaria fortemente uma abordagem mais manual, mas flexível - insira o seguinte snippet no seu arquivo .csproj , .fsproj ou .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 > Certifique -se de substituir $(AvaloniaVersion) pela versão do Avalonia que você está usando atualmente; Em outras palavras, Avalonia.Markup.Xaml.Loader deve corresponder à versão principal do Avalonia Package. Você também pode atualizar HotAvalonia e HotAvalonia.Extensions Extensões para suas mais recentes versões compatíveis.
No trecho acima, apresentamos uma nova diretiva pré -processadora - ENABLE_XAML_HOT_RELOAD . É responsável por ativar os recursos de recarga a quente. Aqui, a diretiva é definida sempre que o projeto é compilado usando a configuração de depuração, mas você pode definir suas próprias condições para a ativação. Além disso, se você deseja desativar recarregar a quente, mesmo quando ENABLE_XAML_HOT_RELOAD , pode estar presente, defina DISABLE_XAML_HOT_RELOAD , que substituirá a diretiva anterior.
Em seguida, fazemos referência aos pacotes necessários mencionados acima. Avalonia.Markup.Xaml.Loader e HotAvalonia são necessários apenas quando a recarga quente estiver ativa, portanto, eles são incluídos apenas quando a diretiva ENABLE_XAML_HOT_RELOAD está presente. HotAvalonia.Extensions é único nessa questão, pois fornece os métodos que precisamos sempre estar acessíveis, por isso apenas marcamos como uma dependência somente para o desenvolvimento.
Essa configuração garante que nenhuma lógica de recarga a quente se infiltre na versão de produção do seu aplicativo. Todas as chamadas para HotAvalonia serão automaticamente e completamente erradicadas das construções de liberação, como pode ser visto abaixo:
| Depurar | Liberar |
|---|---|
Depois de instalar todas as dependências necessárias, é hora de desbloquear os recursos de recarga a quente para o seu aplicativo. Felizmente, esse processo é bastante direto!
Normalmente, o código da classe de aplicativo principal ( App.axaml.cs / App.xaml.cs ) se parece com o seguinte:
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 ( )
{
// ...
}
} Para ativar a recarga a quente, tudo o que você precisa fazer é importar o espaço para nome HotAvalonia e usar o método de extensão .EnableHotReload() na instância App antes do AvaloniaXamlLoader.Load(this) Chamada:
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()
{
// ...
}
} Com essa configuração, você pode depurar o aplicativo usando o depurador embutido do seu IDE, executar o projeto com dotnet run , combinar recursos de recarga dotnet watch HOT HOT RELOAD com a XAML Hot Relload fornecida pela Hotavalonia ou simplesmente construir o aplicativo usando dotnet build e executá-lo como executável standalone. De qualquer forma, você pode esperar que seu aplicativo recarregue sempre que um dos arquivos de origem dos seus controles alterações.
Se você precisar desativar temporariamente a recarga a quente enquanto o aplicativo estiver em execução, você pode chamar Application.Current.DisableHotReload() . Para retomar a recarga a quente, basta ligar para .EnableHotReload() no Application.Current novamente.
Se você deseja atualizar o estado de um controle durante uma recarga quente, pode aplicar o atributo [AvaloniaHotReload] a um ou mais métodos de instância sem parâmetros do controle. Aqui está um exemplo:
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.
}
}Aqui estão alguns exemplos que demonstram Hotavalonia em ação:
Para experimentar você mesmo, você pode executar o aplicativo samples/HotReloadDemo incluído no repositório.
Embora o Hotavalonia seja uma ferramenta poderosa para aprimorar seu fluxo de trabalho de desenvolvimento de Avalonia, ele tem algumas limitações a serem lembradas:
Arquivos de código: Hotavalonia não pode processar .cs , .fs , .vb ou qualquer outro arquivo de código por conta própria. Portanto, ao criar um novo controle, normalmente definido por um par de arquivos .axaml e .axaml.cs , você precisará recompilar o projeto para ver as alterações entrarem em vigor. No entanto, os arquivos XAML existentes podem ser editados livremente sem exigir recompilação.
Desenvolvimento móvel: diferentemente de um ambiente de desenvolvimento local, onde seus arquivos de aplicativo e projeto compartilham o mesmo sistema de arquivos, em um emulador, seu aplicativo está sendo executado sobre o que efetivamente é um sistema remoto. Como o Hotavalonia requer acesso direto aos seus arquivos de projeto, esse cenário não é suportado.
Suporte ao ARM: Com a crescente popularidade dos laptops à base de braço, alguns de vocês já podem trabalhar nesses dispositivos. Infelizmente, as ferramentas necessárias para o Hotavalonia funcionarem no máximo ainda não está lá. Como resultado, certos recursos - como recarregamento a quente de ícones, imagens, estilos, dicionários de recursos e outros ativos - podem não funcionar em máquinas de braço.
Licenciado nos termos da licença do MIT.