Novedades de .NET MAUI para .NET 8

El enfoque de .NET MAUI en .NET 8 es la calidad. En .NET 8, se combinaron 1618 solicitudes de incorporación de cambios que cerraron 689 problemas. Esto incluye cambios del equipo de .NET MAUI, así como de la comunidad de .NET MAUI. Estos cambios deben dar lugar a un aumento significativo de la calidad en .NET 8.

Importante

Debido a trabajar con dependencias externas subyacentes, como Xcode o Android SDK Tools, la directiva de compatibilidad de NET Multi-platform App UI (.NET MAUI) difiere de la directiva de compatibilidad de .NET y .NET Core. Para obtener más información, consulta la directiva de soporte técnico de .NET MAUI .

En .NET 8, .NET MAUI se distribuye como una carga de trabajo de .NET y varios paquetes NuGet. La ventaja de este enfoque es que permite anclar fácilmente los proyectos a versiones específicas, a la vez que te permite obtener una vista previa sencilla de compilaciones no publicadas o experimentales. Al crear un nuevo proyecto .NET MAUI, los paquetes NuGet necesarios se agregan automáticamente al proyecto.

En este artículo se enumeran las nuevas características de .NET MAUI y se proporcionan vínculos a información más detallada sobre cada una.

Para obtener información sobre las novedades de .NET 8, consulta Novedades de .NET 8.

Nueva funcionalidad

Aunque el enfoque de esta versión de .NET MAUI es la calidad, también hay algunas nuevas funcionalidades que permiten nuevos escenarios en las aplicaciones.

Controles

Escritorio

  • Los elementos de la barra de menús y los elementos de menú contextual se pueden invocar a través de métodos abreviados de teclado conocidos como aceleradores de teclado. Para obtener más información, consulta Aceleradores de teclado.
  • Las aplicaciones de Windows se pueden publicar como aplicaciones desempaquetadas. Para obtener más información, consulta Publish an unpackaged .NET MAUI app for Windows with the CLI.

Reconocedores de gestos

Integración de la plataforma

  • La clase Geolocation puede escuchar los cambios de ubicación cuando la aplicación está en primer plano. Para obtener más información, consulta la sección Listen for location changes.
  • Flashlight obtiene un método IsSupportedAsync que determina si una linterna está disponible en el dispositivo. Para obtener más información, consulta Flashlight.
  • Los intervalos SensorSpeed se han unificado en todas las plataformas. Para obtener más información, consulta el artículo sobre el Accessing device sensors.
  • La clase Permissions obtiene el permiso Permissions.Bluetooth, que es un permiso de Android 12 para buscar dispositivos Bluetooth, lo que hace que el dispositivo actual sea reconocible para otros dispositivos Bluetooth y para comunicarse con otros ya emparejados. Para más información, consulte Permisos.
  • La clase Permissions obtiene el permiso Permissions.NearbyWifiDevices, que es un permiso de Android 13 para acceder a dispositivos WiFi cercanos. Para más información, consulte Permisos.

XAML

Solución de problemas

Varios

  • La administración de ventanas se puede desacoplar de la clase App. Para obtener más información, consulta Decouple window management from the App class.
  • Varias fuentes del sistema se pueden consumir fácilmente en aplicaciones Android. Para obtener más información, consulta Consume fonts.
  • En iOS, MauiUIApplicationDelegate obtiene un método PerformFetch que se puede invalidar o consumir a través del delegado iOSLifecycle.PerformFetch. Para obtener más información, consulta iOS platform lifecycle events.

Tipo de desuso y eliminación

Los siguientes tipos o miembros han quedado en desuso:

Se han quitado los siguientes tipos o miembros:

Cambios de comportamiento

El comportamiento siguiente ha cambiado de la versión anterior:

  • El uso del control Map de XAML ahora requiere la siguiente declaración de espacio de nombres xmlns: xmlns:maps="http://schemas.microsoft.com/dotnet/2021/maui/maps".
  • El almacenamiento en caché de imágenes está deshabilitado en Android al cargar una imagen desde una secuencia con el método ImageSource.FromStream. Esto se debe a la falta de datos de los que crear una clave de caché razonable.
  • En iOS, las páginas se desplazan automáticamente cuando el teclado de entrada en pantalla cubriría un campo de entrada de texto, de modo que el campo esté por encima del teclado de entrada en pantalla. Puede llamarse el método KeyboardAutoManagerScroll.Disconnect, en el espacio de nombres Microsoft.Maui.Platform, para deshabilitar este comportamiento predeterminado. Puede llamarse al método KeyboardAutoManagerScroll.Connect para volver a habilitar el comportamiento después de deshabilitarlo.
  • Cómo se establece el color de una pestaña en una aplicación de Shell en algunas plataformas. Para obtener más información, vea Apariencia de las pestañas.
  • No es necesario especificar un valor para la propiedad de compilación $(ApplicationIdGuid) en el archivo de proyecto de la aplicación. Esto se debe a que las aplicaciones Windows de.NET MAUI ya no requieren un GUID como identificador de aplicación y, en su lugar, usan el valor de la propiedad de compilación $(ApplicationId). Por lo tanto, ahora se usa el mismo identificador de aplicación de formato de dominio inverso en todas las plataformas, como com.mycompany.myapp.
  • Las aplicaciones .NET MAUI Mac Catalyst ya no están limitadas a 50 elementos de menú en la barra de menús.
  • El método PlatformImage.FromStream, en el espacio de nombres Microsoft.Maui.Graphics, ahora se puede usar para cargar imágenes en Windows en lugar de tener que usar la clase W2DImageLoadingService.
  • En Android, las animaciones respetan la configuración de animación del sistema. Para obtener más información, vea Información general sobre animaciones.

Rendimiento

Hay muchos cambios de rendimiento en .NET MAUI 8. Estos cambios se pueden clasificar en cinco áreas:

Para obtener más información, consulta .NET 8 Performance Improvements in .NET MAUI.

Actualización de .NET 7 a .NET 8

Para actualizar los proyectos de .NET 7 a .NET 8, instala .NET 8 y la carga de trabajo .NET MAUI con Visual Studio 17.8+ con el instalador independiente y el comando dotnet workload install maui.

Después abre el archivo .csproj y cambia Target Framework Monikers (TFM) de 7 a 8. Si usa un TFM, como net7.0-ios13.6, asegúrate de que coincida con la versión de la plataforma o elimínalo por completo. En el ejemplo siguiente se muestran los TFM para un proyecto de .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>

En el ejemplo siguiente se muestran los TFM para un proyecto de .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>

También se deben agregar referencias de paquete explícitas al archivo .csproj para los siguientes paquetes NuGet de .NET MAUI:

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

Se hace referencia a la variable $(MauiVersion) desde la versión de .NET MAUI que has instalado. Para invalidar esto, agrega la propiedad build $(MauiVersion) al archivo .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>

Esto puede ser útil cuando se usan compilaciones ad hoc desde la fuente nocturna o compilaciones descargadas de solicitudes de incorporación de cambios.

Además, la propiedad de compilación $(ApplicationIdGuid) se puede quitar del archivo .csproj en .NET 8. Para obtener más información, consulta Behavior changes.

Antes de compilar la aplicación actualizada por primera vez, elimina las carpetas bin y obj.

Nota:

La plantilla de proyecto de una aplicación de .NET MAUI en .NET 8 habilita el contexto que acepta valores NULL para el proyecto con la propiedad build $(Nullable). Para obtener más información,consulta Nullable.

Consulta también