Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
O XAML da interface do usuário de aplicativo de várias plataformas do .NET (.NET MAUI) pode ser processado e inflado em uma árvore de objetos de diferentes maneiras explicadas aqui. A partir do .NET 10, a inflação padrão é durante o tempo de execução para compilações de depuração, e XamlC (XamlCompilation) para liberações. Incentivamos você a experimentar a geração de origem e usá-la se ela funcionar para você. Isso se tornará o futuro em novos projetos e, em breve, em todos os projetos.
Compilação XAML
O XAML é compilado diretamente em IL (linguagem intermediária) com o compilador XAML (XAMLC). A compilação XAML oferece uma série de benefícios:
- Ele executa a verificação em tempo de compilação de XAML, notificando você de quaisquer erros.
- Ele remove parte do tempo de carregamento e instanciação para elementos XAML.
- Ajuda a reduzir o tamanho do arquivo do assembly final ao deixar de incluir arquivos .xaml.
A compilação XAML é habilitada por padrão em aplicativos MAUI do .NET. Para aplicativos criados usando a configuração de depuração, a compilação XAML fornece a validação em tempo de compilação do XAML, mas não converte o XAML em IL no assembly. Em vez disso, os arquivos XAML são incluídos como recursos inseridos no pacote do aplicativo e avaliados em runtime. Para aplicativos criados usando a configuração de liberação, a compilação XAML fornece a validação em tempo de compilação do XAML e converte o XAML em IL que é gravado no assembly. No entanto, o comportamento da compilação XAML pode ser substituído em ambas as configurações com a classe XamlCompilationAttribute.
Importante
As associações compiladas podem ser habilitadas para melhorar o desempenho da associação de dados em aplicativos MAUI do .NET. Para obter mais informações, consulte Associações Compiladas.
Inflação de runtime XAML
O XAML pode ser inflado no Runtime usando reflexão. Ele possui vantagens, como permitir o cenário de Recarregamento a Quente (Recarga Dinâmica), reduzir os tempos de build e possibilitar o relatório de diagnósticos para o IDE. No entanto, normalmente, esse método deve ser evitado porque também é o mais lento e os erros de sintaxe são capturados apenas em runtime.
Geração de Origem XAML
A partir do .NET 10, o XAML pode ser transformado em código C# no momento da compilação. Ele oferece os seguintes benefícios:
- Consistência: o mesmo código gerado usado em Depuração e Versão
- Velocidade: os tempos de inflação no dispositivo são 10.000% (100 vezes) mais rápidos no modo Depuração e 25% mais rápidos no modo Liberação. O volume de alocação é reduzido na mesma proporção
- Depuração: você pode ver o código gerado, interrompê-lo e depurá-lo.
Essa é a maneira recomendada de ir mais longe. Ele será habilitado por padrão no futuro.
Habilitar a geração de código-fonte e as configurações por arquivo
Não é mais recomendável usar [XamlCompilation] o atributo para habilitar ou desabilitar por compilação de arquivo.
Você pode habilitar a geração de origem XAML no nível do projeto, definindo o valor de MauiXamlInflator para SourceGen em seu arquivo csproj, conforme mostrado aqui:
<MauiXamlInflator>SourceGen</MauiXamlInflator>
Isso usará a geração de código-fonte para as configurações de Release e Debug, para todos os arquivos.
Você pode reverter para o padrão por arquivo (ou usar curingas) ou forçar outro inflador
<ItemGroup>
<MauiXaml Update="MyFile.xaml" Inflator="SourceGen" /> <!-- enable sourcegen on a single file. prefer setting it at project level -->
<MauiXaml Update="Controls\**.xaml" Inflator="Default" /> <!-- revert to defaults for all XAML in Controls. as of .NET 10, default is XamlC for Release, Runtime for Debug -->
<MauiXaml Update="Controls\**.xaml" Inflator="Runtime" /> <!-- force runtime inflation. if you have to do this, it probably indicates a bug in both XamlC and sourcegen, please report -->
</ItemGroup>
Há outros metadados que você pode definir para instruir o sourcegenerator xaml
<ItemGroup>
<MauiXaml Update="MyFile.xaml" Inflator="SourceGen" NoWarn="0612;0618" /> <!-- prevent the compiler to fail if the xaml use deprecated API -->
</ItemGroup>
C# em linha com a diretiva x:Code
Quando a geração de origem XAML estiver habilitada, você poderá usar a x:Code diretiva para inserir um pequeno bloco de C# diretamente dentro de um arquivo XAML. O gerador de código-fonte XAML extrai o código e o insere na classe parcial gerada para a página ou modo de exibição, de modo que os membros declarados inline se comportem exatamente como se tivessem sido declarados em um arquivo de código subjacente.
x:Code destina-se a uma cola local de exibição curta, como um único manipulador de eventos ou um auxiliar privado , ela permite manter esse código ao lado da marcação que ele serve sem adicionar um código-atrás parcial separado. Para qualquer coisa maior, prefira um arquivo code-behind dedicado.
Importante
x:Code é um recurso de visualização. Para usá-la, defina a propriedade MSBuild EnablePreviewFeatures como true no seu arquivo de projeto:
<PropertyGroup>
<EnablePreviewFeatures>true</EnablePreviewFeatures>
</PropertyGroup>
O x:Code elemento deve ser um filho direto do elemento raiz e o elemento raiz deve ter um x:Class atributo. Embrulhe o código em uma seção CDATA para que o XAML não tente analisá-lo como marcação:
<ContentPage xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
x:Class="MyApp.MainPage">
<x:Code>
<![CDATA[
using System.Diagnostics;
void OnButtonClicked(object sender, EventArgs e)
{
Debug.WriteLine("Clicked from inline x:Code.");
}
]]>
</x:Code>
<Button Text="Click me"
Clicked="OnButtonClicked" />
</ContentPage>
using As diretivas em um bloco x:Code são movidas para o topo do arquivo gerado, enquanto todo o restante é gerado como membros da classe parcial da página. O gerador de origem relata o seguinte diagnóstico quando x:Code é usado incorretamente:
-
MAUIX2015— ox:Codeelemento não é um filho direto da raiz. -
MAUIX2016— o elemento raiz não tem umx:Classatributo.