Compartir vía


Novedades de .NET 7

.NET 7 es el sucesor de .NET 6 y se centra en ser unificado, moderno, sencillo y rápido. .NET 7 se admitirá durante 18 meses como una versión de soporte técnico estándar (STS) (anteriormente conocida como versión actual).

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

Rendimiento

El rendimiento es un enfoque clave de .NET 7 y todas sus características están diseñadas teniendo en cuenta el rendimiento. Además, .NET 7 incluye las siguientes mejoras destinadas exclusivamente al rendimiento:

  • El reemplazo en la pila (OSR) es un complemento para la compilación por niveles. Permite que el tiempo de ejecución cambie el código ejecutado por un método que se está ejecutando actualmente en mitad de su ejecución (es decir, mientras que está "en la pila"). Los métodos de ejecución prolongada pueden cambiar a versiones más optimizadas a mitad de ejecución.
  • La optimización guiada por perfiles (PGO) ahora funciona con OSR y es más fácil habilitar (agregando <TieredPGO>true</TieredPGO> al archivo del proyecto). PGO también puede instrumentar y optimizar elementos adicionales, como delegados.
  • Generación de código mejorada para Arm64.
  • AOT nativo genera un archivo ejecutable independiente en el formato de archivo de la plataforma de destino sin dependencias externas. Es completamente nativo, sin IL o JIT, y proporciona un tiempo de inicio rápido y una implementación pequeña y independiente. En .NET 7, AOT nativo se centra en las aplicaciones de consola y requiere que se recorten las aplicaciones.
  • Mejoras de rendimiento en el entorno de ejecución de Mono, que potencia las aplicaciones WebAssembly, Android e iOS de Blazor.

Para obtener un vistazo detallado a muchas de las características centradas en el rendimiento que hacen que .NET 7 sea tan rápido, consulte la entrada de blog Mejoras de rendimiento en .NET 7.

Serialización de System.Text.Json

.NET 7 incluye mejoras en la serialización System.Text.Json en las siguientes áreas:

  • La personalización del contrato proporciona más control sobre cómo se serializan y deserializan los tipos. Para obtener más información, consulte Personalización de un contrato JSON.
  • de serialización polimórfica para jerarquías de tipos definidas por el usuario. Para obtener más información, vea Serializar propiedades de clases derivadas.
  • Compatibilidad con los miembros requeridos, que son propiedades que deben estar presentes en la carga JSON para que la deserialización se realice correctamente. Para más información, consulte Propiedades necesarias.

Para obtener información sobre estas y otras actualizaciones, consulte la entrada de blog Novedades de System.Text.Json en .NET 7.

Matemáticas genéricas

.NET 7 y C# 11 incluyen innovaciones que permiten realizar operaciones matemáticas de forma genérica, es decir, sin tener que conocer el tipo exacto con el que está trabajando. Por ejemplo, si quieres escribir un método que sume dos números, anteriormente tenías que agregar una sobrecarga del método para cada tipo de datos. Ahora puede escribir un único método genérico, donde el parámetro de tipo está restringido para que sea un tipo similar a un número. Para obtener más información, consulte el artículo de matemáticas genéricas y la entrada de blog de matemáticas genéricas.

Expresiones regulares

La biblioteca de expresiones regulares de .NET ha observado importantes mejoras funcionales y de rendimiento en .NET 7:

  • La nueva opción RegexOptions.NonBacktracking permite la coincidencia mediante un enfoque que evita el retroceso y garantiza el procesamiento de tiempo lineal en la longitud de la entrada. El motor sin vuelta atrás (backtracking) no se puede usar en una búsqueda de derecha a izquierda y tiene algunas otras restricciones, pero es rápido para todas las entradas y expresiones regulares. Para obtener más información, vea Modo de no vuelta atrás (backtracking).

  • Los generadores de origen de expresiones regulares son nuevos. Los generadores de código fuente crean un motor optimizado para el patrón en tiempo de compilación, lo que proporciona ventajas de rendimiento en los resultados. El código fuente que se emite es parte de su proyecto, por lo que puede verlo y depurarlo. Además, una nueva alerta de diagnóstico SYSLIB1045 del generador de código fuente le indica los lugares que Regex utiliza que podrían convertirse en el generador de código fuente. Para más información, consulte Generadores de código fuente de expresiones regulares de .NET.

  • En el caso de las búsquedas que no distinguen mayúsculas de minúsculas, .NET 7 incluye grandes mejoras de rendimiento. Las ventajas se deben a que la especificación de RegexOptions.IgnoreCase ya no llama a ToLower en cada carácter del patrón ni en cada carácter de la entrada. En su lugar, todo el trabajo relacionado con mayúsculas y minúsculas se realiza cuando se construye Regex.

  • Regex ahora admite intervalos para algunas API. Se han agregado los siguientes métodos nuevos como parte de esta compatibilidad:

Para obtener más información sobre estas y otras mejoras, consulte la entrada de blog mejoras de expresiones regulares en .NET 7.

Bibliotecas de .NET

Se han realizado muchas mejoras en las API de biblioteca de .NET. Algunos se mencionan en otras secciones dedicadas de este artículo. Algunos otros se resumen en la tabla siguiente.

Descripción APIs Más información
Soporte para microsegundos y nanosegundos en los tipos TimeSpan, TimeOnly, DateTimey DateTimeOffset - DateTime.Microsecond
- DateTime.Nanosecond
- DateTime.AddMicroseconds(Double)
- Nuevas sobrecargas de constructor DateTime

- DateTimeOffset.Microsecond
- DateTimeOffset.Nanosecond
- DateTimeOffset.AddMicroseconds(Double)
- Nuevas sobrecargas de constructor DateTimeOffset

- TimeOnly.Microsecond
- TimeOnly.Nanosecond

- TimeSpan.Microseconds
- TimeSpan.Nanoseconds
- TimeSpan.FromMicroseconds(Double)
- Y otros...
Estas APIs implican que ya no necesitas realizar cálculos en el valor de "tick" para determinar los valores de microsegundos y nanosegundos. Para obtener más información, consulte la entrada de blog .NET 7 Preview 4.
API para leer, escribir, archivar y extraer archivos Tar System.Formats.Tar Para obtener más información, consulte las entradas de blog .NET 7 Prelanzamiento 4 y .NET 7 Prelanzamiento 6.
API de limitación de tasa para proteger un recurso manteniendo el tráfico en un nivel seguro RateLimiter y otros en el paquete NuGet System.Threading.RateLimiting Para obtener más información, consulte Límite de velocidad de un controlador HTTP en .NET y Anuncio de la limitación de velocidad para .NET.
API para leer todos los datos de Stream - Stream.ReadExactly
- Stream.ReadAtLeast
Stream.Read puede devolver menos datos de los que están disponibles en la secuencia. Los nuevos métodos ReadExactly leen exactamente el número de bytes solicitados y los nuevos métodos de ReadAtLeast leen al menos el número de bytes solicitados. Para obtener más información, consulte la entrada de blog .NET 7 Preview 5.
Nuevos convertidores de tipos para DateOnly, TimeOnly, Int128, UInt128y Half En el espacio de nombres System.ComponentModel:

- DateOnlyConverter
- TimeOnlyConverter
- Int128Converter
- UInt128Converter
- HalfConverter
A menudo, los convertidores de tipos se usan para convertir tipos de valor a y desde una cadena. Estas nuevas API agregan convertidores de tipos para tipos que se agregaron más recientemente.
Soporte de métricas para IMemoryCache - MemoryCacheStatistics
- MemoryCache.GetCurrentStatistics()
GetCurrentStatistics() permite usar contadores de eventos o API de métricas para realizar un seguimiento de las estadísticas de una o varias cachés de memoria. Para obtener más información, consulte la entrada de blog .NET 7 Preview 4.
API para obtener y establecer permisos de archivo Unix - enum System.IO.UnixFileMode
- File.GetUnixFileMode
- File.SetUnixFileMode
- FileSystemInfo.UnixFileMode
- Directory.CreateDirectory(String, UnixFileMode)
- FileStreamOptions.UnixCreateMode
Para obtener más información, consulte la entrada de blog .NET 7 Preview 7.
Atributo para indicar qué tipo de sintaxis se espera en una cadena StringSyntaxAttribute Por ejemplo, puede especificar que un parámetro string espera una expresión regular mediante la atribución del parámetro con [StringSyntax(StringSyntaxAttribute.Regex)].
API para interoperabilidad con JavaScript cuando se ejecuta en el explorador u otras arquitecturas de WebAssembly System.Runtime.InteropServices.JavaScript Las aplicaciones de JavaScript pueden usar la compatibilidad expandida de WebAssembly en .NET 7 para reutilizar las bibliotecas de .NET desde JavaScript. Para obtener más información, vea Usar .NET desde cualquier aplicación de JavaScript en .NET 7.

Observabilidad

.NET 7 mejora la observabilidad. La observabilidad le ayuda a comprender el estado de la aplicación a medida que se escala y a medida que aumenta la complejidad técnica. La implementación de la observabilidad de .NET se basa principalmente en OpenTelemetry. Entre las mejoras se incluyen las siguientes:

Para obtener más información, consulte la entrada de blog .NET 7 Preview 4.

SDK de .NET

El SDK de .NET 7 mejora la experiencia con plantillas de la interfaz de línea de comandos. También permite la publicación en contenedores y la administración central de paquetes con NuGet.

Plantillas

Se han realizado algunas mejoras de bienvenida en el comando dotnet new y en la creación de plantillas.

dotnet new

El comando dotnet new de la CLI, que crea un proyecto, un archivo de configuración o una solución basados en una plantilla, ahora admite la finalización con tabulación para explorar:

  • Nombres de plantilla disponibles
  • Opciones de plantilla
  • Valores de opción permitidos

Además, para mejorar la conformidad, los subcomandos install, uninstall, search, listy update ya no tienen el prefijo --.

Creación

Las restricciones de plantilla , un nuevo concepto para .NET 7, permiten definir el contexto en el que se permiten las plantillas. Las restricciones ayudan al motor de plantillas a determinar qué plantillas deben mostrarse en comandos como dotnet new list. Puede restringir la plantilla a un sistema operativo, un host de motor de plantilla (por ejemplo, la CLI de .NET o el cuadro de diálogo Nuevo proyecto en Visual Studio) y una carga de trabajo instalada. Las restricciones se definen en el archivo de configuración de la plantilla.

También en el archivo de configuración de plantilla, ahora puede anotar un parámetro de plantilla como permitir varios valores. Por ejemplo, la plantilla de web permite varias formas de autenticación.

Para obtener más información, consulte la entrada de blog .NET 7 Preview 6.

Publicación en un contenedor

Los contenedores son una de las formas más fáciles de distribuir y ejecutar una amplia variedad de aplicaciones y servicios en la nube. Las imágenes de contenedor ahora son un tipo de salida admitido del SDK de .NET, y puede crear versiones en contenedor de sus aplicaciones usando dotnet publish. Para obtener más información sobre la característica, consulte Anuncio de la compatibilidad con contenedores integrada en el SDK de .NET. Para ver un tutorial, consulte Contenerizar una aplicación .NET con dotnet publish.

Administración central de paquetes

Ahora puede administrar dependencias comunes en los proyectos desde una ubicación mediante la característica de administración central de paquetes (CPM) de NuGet. Para habilitarlo, agregue un archivo Directory.Packages.props a la raíz del repositorio. En este archivo, establezca la propiedad MSBuild ManagePackageVersionsCentrally en true y agregue versiones para la dependencia de paquete común mediante elementos de PackageVersion. A continuación, en los archivos de proyecto individuales, puede omitir atributos Version de cualquier elemento PackageReference que haga referencia a paquetes administrados centralmente.

Para obtener más información, consulte gestión central de paquetes.

Generación de código fuente de P/Invoke

.NET 7 presenta un generador de origen para las invocaciones de plataforma (P/Invokes) en C#. El generador de código fuente busca LibraryImportAttribute en los métodos static y partial para desencadenar la generación de código fuente en tiempo de compilación del código de serialización. Al generar el código de serialización en tiempo de compilación, no es necesario generar ningún código auxiliar de IL en tiempo de ejecución, como sucede cuando se usa DllImportAttribute. El generador de origen mejora el rendimiento de la aplicación y también permite que la aplicación esté compilada con antelación (AOT). Para obtener más información, consulte Generación de código fuente para invocaciones de plataforma y Uso de administradores de serialización personalizados en P/Invokes generados por código fuente.

Esta sección contiene información sobre los productos relacionados que tienen versiones que coinciden con la versión de .NET 7.

Visual Studio 2022, versión 17.4

Para obtener más información, vea Novedades de Visual Studio 2022.

C# 11

C# 11 incluye compatibilidad con matemáticas genéricas, literales de cadena sin formato, tipos con ámbito de archivo y otras características nuevas. Para obtener más información, vea Novedades de C# 11.

F# 7

F# 7 continúa el recorrido para simplificar el lenguaje y mejorar el rendimiento e interoperabilidad con nuevas características de C#. Para obtener más información, vea Presentación de F# 7.

.NET MAUI

La interfaz de usuario de aplicaciones multiplataforma de .NET (.NET MAUI) es un marco multiplataforma para crear aplicaciones móviles y de escritorio nativas con C# y XAML. Unifica las API de Android, iOS, macOS y Windows en una sola API. Para obtener información sobre las actualizaciones más recientes, consulte Novedades de .NET MAUI para .NET 7.

ASP.NET Core

ASP.NET Core 7.0 incluye middleware de limitación de velocidad, mejoras en las API mínimas y la transcodificación JSON de gRPC. Para obtener información sobre todas las actualizaciones, consulte Novedades de ASP.NET Core 7.

EF Core

Entity Framework Core 7.0 incluye compatibilidad independiente del proveedor con columnas JSON, rendimiento mejorado para guardar cambios y plantillas de ingeniería inversa personalizadas. Para obtener información sobre todas las actualizaciones, consulte Novedades de EF Core 7.0.

Windows Forms

Gran parte del trabajo ha pasado a Windows Forms para .NET 7. Se han realizado mejoras en las siguientes áreas:

  • Accesibilidad
  • Valores altos de PPP y escalado
  • Enlace de datos

Para obtener más información, vea Novedades de Windows Forms en .NET 7.

WPF (Windows Presentation Foundation)

WPF en .NET 7 incluye numerosas correcciones de errores, así como mejoras de rendimiento y accesibilidad. Para obtener más información, consulte la entrada de blog Novedades de WPF en .NET 7.

Orleans

Orleans es un marco multiplataforma para crear aplicaciones distribuidas sólidas y escalables. Para obtener información sobre las actualizaciones más recientes de Orleans, vea Migrate from Orleans 3.x to 7.0.

Asistente para actualización de .NET y CoreWCF

El Asistente para actualización de .NET ahora admite la actualización de aplicaciones WCF del lado servidor a CoreWCF, que es un puerto creado por la comunidad de WCF a .NET (Core). Para obtener más información, vea Actualización de un proyecto del lado servidor WCF para usar CoreWCF en .NET 6.

ML.NET

ML.NET ahora incluye una API de clasificación de texto que facilita el entrenamiento de modelos de clasificación de texto personalizados mediante las últimas técnicas de aprendizaje profundo de última generación. Para más información, consulte las entradas de blog Novedades sobre herramientas y AutoML e Introducción a la API de clasificación de texto de ML.NET.

Consulte también