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.
Para buscar todos los artículos de .NET que se han actualizado para .NET 7, consulte Documentación de .NET: Novedades de la versión de .NET 7.
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 larga duración pueden cambiar a versiones más optimizadas a mitad de la ejecución.
- La optimización guiada por perfiles (PGO) ahora funciona con OSR y es más fácil de 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 ejecutable independiente en el formato de archivo de la plataforma de destino sin dependencias externas. Es completamente nativo, sin IL ni JIT, y proporciona un tiempo de inicio rápido y una implementación pequeña e 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 Mono, que potencia las aplicaciones WebAssembly, Android e iOS de Blazor.
Para ver en detalle 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 de 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 más información, consulte Personalización de un contrato JSON.
- Serialización polimórfica para jerarquías de tipos definidos por el usuario. Para más información, consulte Serialización de 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 se está trabajando. Por ejemplo, si desea escribir un método que sume dos números, antes tenía que agregar una sobrecarga del método para cada tipo. Ahora puede escribir un único método genérico, donde el parámetro de tipo está restringido para ser un tipo similar a un número. Para obtener más información, consulte el artículo Matemáticas genéricas y la entrada de blog 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 con un enfoque que evita la vuelta atrás (backtracking) y garantiza el procesamiento en 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 código fuente 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 emitido forma parte del 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 importantes 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:
- Regex.EnumerateMatches
- Regex.Count
- Regex.IsMatch(ReadOnlySpan<Char>) (y otras sobrecargas)
Para obtener más información sobre estas y otras mejoras, consulte la entrada de blog Mejoras de expresiones regulares en .NET 7.
Bibliotecas .NET
Se han realizado muchas mejoras en las API de la biblioteca de .NET. Algunas se mencionan en otras secciones dedicadas de este artículo. Otras se resumen en la tabla siguiente.
Descripción | API existentes | Más información |
---|---|---|
Compatibilidad con microsegundos y nanosegundos en los tipos TimeSpan, TimeOnly, DateTime y 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 otras... |
Con estas API ya no tiene que realizar cálculos del valor de "tic" para determinar los valores de microsegundos y nanosegundos. Para 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 más información, consulte las entradas de blog .NET 7 Preview 4 y .NET 7 Preview 6. |
API de limitación de volumen 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 ReadAtLeast leen al menos el número de bytes solicitados. Para más información, consulte la entrada de blog .NET 7 Preview 5. |
Nuevos convertidores de tipos para DateOnly , TimeOnly , Int128 , UInt128 y Half |
En el espacio de nombres System.ComponentModel: - DateOnlyConverter - TimeOnlyConverter - Int128Converter - UInt128Converter - HalfConverter |
Los convertidores de tipos suelen utilizarse para convertir tipos de valor a y desde una cadena. Estas nuevas API agregan convertidores de tipos para los últimos tipos agregados. |
Compatibilidad de las métricas con IMemoryCache | - MemoryCacheStatistics - MemoryCache.GetCurrentStatistics() |
GetCurrentStatistics() permite usar API de métricas o contadores de eventos para realizar un seguimiento de las estadísticas de una o varias cachés de memoria. Para más información, consulte la entrada de blog .NET 7 Preview 4. |
API para obtener y establecer permisos de archivos UNIX | - System.IO.UnixFileMode enum - File.GetUnixFileMode - File.SetUnixFileMode - FileSystemInfo.UnixFileMode - Directory.CreateDirectory(String, UnixFileMode) - FileStreamOptions.UnixCreateMode |
Para más información, consulte la entrada de blog .NET 7 Preview 7. |
Atributo para indicar el tipo de sintaxis que se espera en una cadena | StringSyntaxAttribute | Por ejemplo, puede especificar que un parámetro string espera una expresión regular al atribuir el parámetro con [StringSyntax(StringSyntaxAttribute.Regex)] . |
API para interoperabilidad con JavaScript al ejecutarse 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, consulte Uso de .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 observabilidad de .NET se basa principalmente en OpenTelemetry. Estas mejoras incluyen:
- El nuevo evento Activity.CurrentChanged, que puede usar para detectar cuándo cambia el contexto de intervalo de un subproceso administrado.
- Nuevos métodos de enumerador de rendimiento para las propiedades Activity: EnumerateTagObjects(), EnumerateLinks() y EnumerateEvents().
Para más información, consulte la entrada de blog .NET 7 Preview 4.
.NET SDK
El SDK de .NET 7 mejora la experiencia de la plantilla de la CLI. 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
, list
y update
ya no tienen el prefijo --
.
Creación
Las restricciones de plantilla, un nuevo concepto de .NET 7, permiten definir el contexto en el que se admiten 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 del motor de plantillas (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.
En el archivo de configuración de la plantilla ahora también puede anotar un parámetro de plantilla como permitir varios valores. Por ejemplo, la web
plantilla permite varias formas de autenticación.
Para 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 contenedorizadas de las aplicaciones mediante 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 Contenedorización de 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 habilitarla, agregue un archivo Directory.Packages.props a la raíz del repositorio. En este archivo, establezca la propiedad ManagePackageVersionsCentrally
de MSBuild en true
y agregue versiones para la dependencia de paquetes común mediante elementos 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 Administración central de paquetes.
Generación de archivos de código fuente de P/Invoke
.NET 7 presenta un generador de código fuente 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 código fuente mejora el rendimiento de la aplicación y también permite que la aplicación se compile 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.
Versiones relacionadas
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 la trayectoria para simplificar el lenguaje y mejorar el rendimiento y la interoperabilidad con nuevas características de C#. Para obtener más información, vea Presentación de F# 7.
.NET MAUI
.NET Multi-platform App UI (.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 últimas actualizaciones, consulte Novedades de .NET MAUI para .NET 7.
ASP.NET Core
ASP.NET Core 7.0 incluye middleware de limitación de volumen, mejoras en las API mínimas y 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, un rendimiento mejorado para guardar los 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 se ha realizado en 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
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 compilar aplicaciones distribuidas sólidas y escalables. Para obtener información sobre las actualizaciones más recientes de Orleans, consulte Migración de Orleans 3.x a 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 para .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 técnicas de aprendizaje profundo más recientes 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.