Partilhar via


Novidades no .NET MAUI para .NET 8

O foco do .NET MAUI no .NET 8 é a qualidade. No .NET 8, foram mesclados 1618 pull requests que encerraram 689 problemas. Isso inclui alterações da equipe do .NET MAUI, bem como da comunidade do .NET MAUI. Essas alterações devem resultar em um aumento significativo na qualidade no .NET 8.

Importante

Devido ao trabalho com dependências externas subjacentes, como Xcode ou Android SDK Tools, a política de suporte da .NET Multi-Platform App UI (.NET MAUI) difere da política de suporte do .NET e do .NET Core. Para obter mais informações, consulte a política de suporte do .NET MAUI.

No .NET 8, o .NET MAUI é fornecido como uma carga de trabalho .NET e vários pacotes NuGet. A vantagem dessa abordagem é que ela permite que fixar facilmente seus projetos em versões específicas, além de visualizar facilmente builds não lançados ou experimentais. Quando você cria um novo projeto .NET MAUI, os pacotes NuGet necessários são adicionados automaticamente ao projeto.

Este artigo lista os novos recursos do .NET MAUI para .NET 8 e fornece links para informações mais detalhadas sobre cada um deles.

Para obter informações sobre as novidades no .NET 8, confira Novidades no .NET 8.

Novas funcionalidades

Embora o foco desta versão do .NET MAUI seja a qualidade, há também algumas novas funcionalidades que permitem novos cenários em seus aplicativos.

Controls

Área de trabalho

Reconhecedores de gestos

Integração de plataforma

XAML

Solução de problemas

Diversos

Substituição e remoção de tipo

Os seguintes tipos ou membros foram preteridos:

Os seguintes tipos ou membros foram removidos:

Alterações de comportamento

O seguinte comportamento foi alterado em relação à versão anterior:

  • O uso do controle Map de XAML agora requer a seguinte declaração de namespace xmlns: xmlns:maps="http://schemas.microsoft.com/dotnet/2021/maui/maps".
  • O cache de imagem é desabilitado no Android ao carregar uma imagem de um fluxo com o método ImageSource.FromStream. Isso ocorre devido à falta de dados para usar para criar uma chave de cache razoável.
  • No iOS, as páginas rolam automaticamente quando o teclado de entrada reversível cobre um campo de entrada de texto, de modo que o campo permanece acima do teclado de entrada reversível. O método KeyboardAutoManagerScroll.Disconnect, no namespace Microsoft.Maui.Platform, pode ser chamado para desabilitar esse comportamento padrão. O método KeyboardAutoManagerScroll.Connect pode ser chamado para reabilitar o comportamento depois de desabilitado.
  • A forma como a cor de uma guia é definida em um aplicativo Shell foi alterada em algumas plataformas. Para saber mais, confira Aparência da guia.
  • Não é necessário especificar um valor para a propriedade de build $(ApplicationIdGuid) no arquivo de projeto do aplicativo. Isso ocorre porque os aplicativos do Windows do .NET MAUI não exigem mais um GUID como uma ID de aplicativo e, em vez disso, usam o valor da propriedade de build $(ApplicationId) como a ID do aplicativo. Portanto, a mesma ID do aplicativo de formato de domínio reverso agora é usada em todas as plataformas, como com.mycompany.myapp.
  • Os aplicativos Mac Catalyst do .NET MAUI não estão mais limitados a 50 itens de menu na barra de menus.
  • O método PlatformImage.FromStream, no namespace Microsoft.Maui.Graphics, agora pode ser usado para carregar imagens no Windows em vez de ter que usar a classe W2DImageLoadingService.
  • No Android, as animações respeitam as configurações de animação do sistema. Para obter mais informações, confira Animação básica.

Desempenho

Há muitas alterações de desempenho no .NET MAUI 8. Essas alterações podem ser classificadas em cinco áreas:

Para obter mais informações, confira Melhorias de desempenho do .NET 8 no .NET MAUI.

Atualizar do .NET 7 para o .NET 8

Para atualizar seus projetos do .NET 7 para o .NET 8, instale o .NET 8 e a carga de trabalho do .NET MAUI com o Visual Studio 17.8+ ou com o Instalador autônomo e o comando dotnet workload install maui.

Em seguida, abra o arquivo .csproj e altere os Monikers da Estrutura de Destino (TFMs) de 7 para 8. Se você estiver usando um TFM, como net7.0-ios13.6, não se esqueça de corresponder à versão da plataforma ou removê-la completamente. O exemplo a seguir mostra os TFMs para um projeto do .NET 7:

<TargetFrameworks>net7.0-android;net7.0-ios;net7.0-maccatalyst;net7.0-tizen</TargetFrameworks>
<TargetFrameworks Condition="$([MSBuild]::IsOSPlatform('windows'))">$(TargetFrameworks);net7.0-windows10.0.19041.0</TargetFrameworks>

O exemplo a seguir mostra os TFMs para um projeto do .NET 8:

<TargetFrameworks>net8.0-android;net8.0-ios;net8.0-maccatalyst;net8.0-tizen</TargetFrameworks>
<TargetFrameworks Condition="$([MSBuild]::IsOSPlatform('windows'))">$(TargetFrameworks);net8.0-windows10.0.19041.0</TargetFrameworks>

Referências de pacote explícitas também devem ser adicionadas ao arquivo .csproj para os seguintes pacotes NuGet do .NET MAUI:

<ItemGroup>
    <PackageReference Include="Microsoft.Maui.Controls" Version="$(MauiVersion)" />
    <PackageReference Include="Microsoft.Maui.Controls.Compatibility" Version="$(MauiVersion)" />
</ItemGroup>

A variável $(MauiVersion) é referenciada a partir da versão do .NET MAUI que você instalou. Você pode substituir isso adicionando a propriedade de build $(MauiVersion) ao arquivo .csproj:

<Project Sdk="Microsoft.NET.Sdk">
    <PropertyGroup>
        <TargetFrameworks>net8.0-android;net8.0-ios;net8.0-maccatalyst</TargetFrameworks>
        <UseMaui>True</UseMaui>
        <MauiVersion>8.0.3</MauiVersion>
    </PropertyGroup>
</Project>

Isso pode ser útil ao usar builds ad hoc do feed noturno ou builds baixados de pull requests.

Além disso, a propriedade de build $(ApplicationIdGuid) pode ser removida do arquivo .csproj no .NET 8. Para obter mais informações, confira Alterações de comportamento.

Antes de criar o seu aplicativo atualizado pela primeira vez, exclua as pastas bin e obj.

Observação

O modelo de projeto para um aplicativo do .NET MAUI no .NET 8 permite o contexto anulável para o projeto com a propriedade de build $(Nullable). Para obter mais informações, confira Anulável.

Confira também