Compartir por


Cambios importantes en .NET 9

Si va a migrar una aplicación a .NET 9, es posible que le afecten los cambios importantes que se enumeran aquí. Los cambios se agrupan por área tecnológica, como ASP.NET Core o Windows Forms.

En este artículo se clasifica cada cambio disruptivo como no compatible con el binario, no compatible con el origen o cambio de comportamiento:

  • No compatible con el binario: cuando se ejecuta en el entorno de ejecución o componente nuevos, los archivos binarios existentes pueden enfrentarse a un cambio importante en el comportamiento, como un error al cargar o ejecutar, y, de ser así, requerir la recompilación.

  • No compatible con el origen: cuando se vuelve a compilar con el SDK o componente nuevos o para tener como destino el entorno de ejecución nuevo, el código fuente existente puede requerir cambios de origen para compilarse correctamente.

  • Cambio de comportamiento : el código y los archivos binarios existentes pueden comportarse de forma diferente en tiempo de ejecución. Si el nuevo comportamiento no es deseable, el código existente debe actualizarse y volver a compilarse.

ASP.NET Core

Título Tipo de cambio
Significado modificado DefaultKeyResolution.ShouldGenerateNewKey Cambio de comportamiento
La exportación de certificados de desarrollo ya no crea la carpeta Cambio de comportamiento
Middleware de encabezados reenviados omite los encabezados X-Forwarded-* de servidores proxy desconocidos Cambio de comportamiento
HostBuilder habilita ValidateOnBuild/ValidateScopes en el entorno de desarrollo Cambio de comportamiento
API heredadas de Mono y Emscripten no exportadas al espacio de nombres global Fuente incompatible
Tipos de middleware con varios constructores Cambio de comportamiento

Contenedores

Título Tipo de cambio Versión introducida
Las imágenes de contenedor ya no instalan zlib Cambio de comportamiento Versión preliminar 7
Imágenes de .NET Monitor simplificadas en etiquetas de solo versión Cambio de comportamiento Versión preliminar 5

Bibliotecas de Core .NET

Título Tipo de cambio Versión introducida
Agregar un ZipArchiveEntry con CompressionLevel establece marcas de bits de encabezado de directorio central ZIP de uso general Cambio de comportamiento Versión preliminar 5
Compatibilidad con UnsafeAccessor modificado para genéricos no abiertos Cambio de comportamiento Versión preliminar 6
Obsolescencias de API con identificadores de diagnóstico personalizados Fuente incompatible (Varios)
resolución de sobrecarga ambigua que afecta a los operadores implícitos de StringValues Fuente incompatible Disponibilidad general
Longitud máxima de BigInteger Cambio de comportamiento Versión preliminar 6
BinaryReader.GetString() devuelve "\uFFFD" en secuencias con formato incorrecto Cambio de comportamiento Versión preliminar 7
La resolución de sobrecarga en C# prefiere las sobrecargas de tipo de intervalo params Fuente incompatible
No se permite crear el tipo de matriz de System.Void Cambio de comportamiento Versión preliminar 1
Métodos Equals() y GetHashCode() predeterminados para tipos marcados con InlineArrayAttribute Cambio de comportamiento Versión preliminar 6
EnumConverter valida que los tipos registrados sean enumeraciones Cambio de comportamiento Versión preliminar 7
FromKeyedServicesAttribute ya no inserta un parámetro sin clave Cambio de comportamiento RC 1
La devolución de llamada inicial de IncrementingPollingCounter es asincrónica Cambio de comportamiento RC 1
Se aplica el límite de tamaño de la estructura de matriz en línea Cambio de comportamiento Versión preliminar 1
InMemoryDirectoryInfo antepone rootDir a los archivos Cambio de comportamiento Versión preliminar 1
Nuevas sobrecargas de métodos TimeSpan.From*() que aceptan enteros Fuente incompatible Versión preliminar 3
Nueva versión de algunos paquetes OOB Fuente incompatible Versión preliminar 5
RuntimeHelpers.GetSubArray devuelve un tipo diferente Cambio de comportamiento Versión preliminar 1
Se ha quitado la sobrecarga de String.Trim*(params ReadOnlySpan<char>) Origen o binario incompatible Disponibilidad general
Compatibilidad con variables de entorno vacías Cambio de comportamiento Versión preliminar 6
Los nombres y comentarios de ZipArchiveEntry respetan la bandera UTF8 Cambio de comportamiento RC 1

Criptografía

Título Tipo de cambio Versión introducida
API eliminadas de System.Security.Cryptography.Pkcs netstandard2.0 Fuente incompatible Disponibilidad general
SafeEvpPKeyHandle.DuplicateHandle hace referencia al identificador Cambio de comportamiento Versión preliminar 7
Algunos constructores X509Certificate2 y X509Certificate están obsoletos Fuente incompatible Versión preliminar 7
Duración simplificada de la clave privada de Windows Cambio de comportamiento Versión preliminar 7

Implementación

Título Tipo de cambio Versión introducida
Paquetes de runtime de escritorio obsoletos para Windows/macOS/Linux Fuente incompatible Versión preliminar 7

Entity Framework Core

Cambios importantes en EF Core 9

Interoperabilidad

Título Tipo de cambio Versión introducida
CET compatible de manera predeterminada Incompatibilidad binaria Versión preliminar 6

Compilador JIT

Título Tipo de cambio Versión introducida
Las conversiones de punto flotante a entero se están saturando Cambio de comportamiento Versión preliminar 4
Se han eliminado algunas API de SVE Fuente incompatible RC 2

Redes

Título Tipo de cambio Versión introducida
Obsolescencias de API Fuente incompatible Versión preliminar 6
Informe incondicional de métricas de HttpClient server.port Cambio de comportamiento Versión preliminar 7
El registro de HttpClientFactory oculta los valores de encabezado de forma predeterminada Cambio de comportamiento RC 1
HttpClientFactory usa SocketsHttpHandler como controlador principal Cambio de comportamiento Versión preliminar 6
HttpListenerRequest.UserAgent admite valores null Fuente incompatible Versión preliminar 1
Redacción de consultas URI en eventos de HttpClient EventSource Cambio de comportamiento Versión preliminar 7
Reacción de consultas de URI en registros de IHttpClientFactory Cambio de comportamiento Versión preliminar 7

SDK y MSBuild

Título Tipo de cambio Versión introducida
dotnet sln add no permite nombres de archivo no válidos Cambio de comportamiento 9.0.2xx
dotnet watch incompatible con Hot Reload para frameworks antiguos Cambio de comportamiento RC 1
Cambio en el resultado generado por los comandos dotnet workload Cambio de comportamiento Versión preliminar 1
installer La versión del repositorio ya no está documentada Cambio de comportamiento Versión preliminar 5
Manejo de recursos de cultura personalizada de MSBuild Cambio de comportamiento 9.0.200/9.0.300
Nuevo RID predeterminado que se usa al tener como destino .NET Framework Fuente incompatible Disponibilidad general
El registrador de terminal está configurado por defecto Cambio de comportamiento Versión preliminar 1
Requisitos de versión para el SDK de .NET 9 Fuente incompatible Disponibilidad general
Advertencia emitida para destinos de .NET Standard 1.x Fuente incompatible Versión preliminar 6
Advertencia emitida para el destino de .NET 7 Fuente incompatible Disponibilidad general

Serialización

Título Tipo de cambio Versión introducida
BinaryFormatter siempre produce una excepción Cambio de comportamiento Versión preliminar 6
Las propiedades anulables de JsonDocument se deserializan a JsonValueKind.Null Cambio de comportamiento Versión preliminar 1
System.Text.Json ahora desescapa los nombres de las propiedades de metadatos Cambio de comportamiento Disponibilidad general

Windows Forms

Título Tipo de cambio Versión introducida
BindingSource.SortDescriptions no devuelve valores null Cambio de comportamiento Versión preliminar 1
Cambios en las anotaciones de nulabilidad Fuente incompatible Versión preliminar 1
ComponentDesigner.Initialize genera la excepción ArgumentNullException Cambio de comportamiento Versión preliminar 1
Índice de fila inicial de DataGridViewRowAccessibleObject.Name Cambio de comportamiento Versión preliminar 1
La compatibilidad con IMsoComponent es opcional Cambio de comportamiento Versión preliminar 2
Nuevos analizadores de seguridad Fuente incompatible RC 1
No hay ninguna excepción si DataGridView es null Cambio de comportamiento Versión preliminar 1
PictureBox genera excepciones HttpClient Cambio de comportamiento Versión preliminar 6
StatusStrip usa un representador predeterminado diferente Cambio de comportamiento Disponibilidad general

WPF (Windows Presentation Foundation)

Título Tipo de cambio Versión introducida
Cambio del tipo GetXmlNamespaceMaps Cambio de comportamiento / No compatible con el origen Versión preliminar 3

Consulte también