Cambios de runtime para la migración a .NET Framework 4.8.x
En este artículo se enumeran los problemas de compatibilidad de aplicaciones que se introdujeron en .NET Framework 4.8 y 4.8.1.
.NET Framework 4.8
ASP.NET
Se ha corregido el procesamiento de ASP.NET en InputAttributes y LabelAttributes para el control de casilla de WebForms
Detalles
Para las aplicaciones que tienen como destino .NET Framework 4.7.2 y versiones anteriores, CheckBox.InputAttributes y CheckBox.LabelAttributes que se agregan mediante programación a un control CheckBox de WebForms se pierden después del postback. Para las aplicaciones que tienen como destino .NET Framework 4.8 o versiones posteriores, se mantienen después del postback.
Sugerencia
Para obtener el comportamiento correcto para restaurar los atributos en el postback, establezca targetFrameworkVersion
en 4.8 o posterior. Por ejemplo:
<configuration>
<system.web>
<httpRuntime targetFramework="4.8"/>
</system.web>
</configuration>
Si se establece en una versión inferior, o en ninguna, se conserva el antiguo comportamiento incorrecto.
NOMBRE | Valor |
---|---|
Ámbito | Desconocido |
Versión | 4.8 |
Tipo | Tiempo de ejecución |
API afectadas
El control incorrecto de varias partes de ASP.NET puede dar lugar a que se pierdan datos de formularios.
Detalles
En las aplicaciones que tienen como destino .NET Framework 4.7.2 y versiones anteriores, ASP.NET podría analizar incorrectamente valores de límite de varias partes, lo que da lugar a que los datos de formulario no estén disponibles durante la ejecución de la solicitud. Las aplicaciones que tienen como destino .NET Framework 4.8 o versiones posteriores analizan correctamente datos de varias partes, por lo que los valores del formulario están disponibles durante la ejecución de la solicitud.
Sugerencia
A partir de las aplicaciones que se ejecutan en .NET Framework 4.8, cuando el destino sea .NET Framework 4.8 o posterior mediante el uso del elemento targetFrameworkVersion
, el comportamiento predeterminado cambia para quitar delimitadores. Cuando se usan versiones anteriores de Framework o no se usa targetFrameworkVersion
, los delimitadores finales de algunos valores todavía se devuelven.
Este comportamiento también se puede controlar explícitamente con appSetting
:
<configuration>
<appSettings>
...
<add key="aspnet:UseLegacyMultiValueHeaderHandling" value="true"/>
...
</appSettings>
</configuration>
Nombre | Valor |
---|---|
Ámbito | Desconocido |
Versión | 4.8 |
Tipo | Tiempo de ejecución |
API afectadas
ValidationContext.MemberName de APS.NET no es NULL cuando se usa DataAnnotations.ValidationAttribute personalizado
Detalles
En .NET Framework 4.7.2 y versiones anteriores, cuando se usa System.ComponentModel.DataAnnotations.ValidationAttribute personalizado, la propiedad ValidationContext.MemberName devuelve null
. En .NET Framework, versión 4.8, anterior a la actualización de octubre de 2019, devuelve el nombre del miembro. A partir de la versión preliminar de .NET Framework de octubre de 2019 del paquete acumulativo de actualizaciones de calidad para .NET Framework 4.8, devuelve null
de forma predeterminada, pero puede optar por devolver el nombre del miembro en su lugar.
Sugerencia
Agregue la siguiente configuración a su archivo web.config para que la propiedad devuelva el nombre de miembro en la versión preliminar de .NET Framework de octubre de 2019 del paquete acumulativo de actualizaciones de calidad para .NET Framework 4.8 y versiones posteriores:
<configuration>
<appSettings>
...
<add key="aspnet:GetValidationMemberName" value="true"/>
...
</appSettings>
</configuration>
En la versión 4.8 de .NET Framework, anterior a la actualización de octubre de 2019, al agregarlo al archivo web.config se restaura el comportamiento anterior y la propiedad devuelve null
.
Nombre | Valor |
---|---|
Ámbito | Desconocido |
Versión | 4.8 |
Tipo | Tiempo de ejecución |
API afectadas
Core
.NET COM serializa correctamente los parámetros ByRef SafeArray en los eventos
Detalles
En .NET Framework 4.7.2 y versiones anteriores, un parámetro ByRef SafeArray en un evento COM no podía volver serializar al código nativo. Con este cambio, SafeArray ahora se serializa correctamente.
- [x] Anómalo
Sugerencia
Si la serialización correcta de los parámetros ByRef SafeArray en eventos COM interrumpe la ejecución, puede deshabilitar este código agregando el siguiente modificador de configuración a la configuración de la aplicación:
<appSettings>
<add key="Switch.System.Runtime.InteropServices.DoNotMarshalOutByrefSafeArrayOnInvoke" value="true" />
</appSettings>
NOMBRE | Valor |
---|---|
Ámbito | Secundaria |
Versión | 4.8 |
Tipo | Tiempo de ejecución |
API afectadas
No detectable a través del análisis de la API.
La interoperabilidad de .NET se ejecutará ahora con QueryInterface para IAgileObject (una interfaz de WinRT)
Detalles
Cuando se usa un evento de WinRT con un delegado de .NET, Windows se ejecutará con QI para IAgileObject a partir de .NET Framework 4.8. En versiones anteriores de .NET Framework, el tiempo de ejecución producía un error en el QI y el evento no se podrá suscribir.
- [x] Anómalo
Sugerencia
Si habilitar el QI para IAgileObject interrumpe la ejecución, puede deshabilitar este código estableciendo la configuración siguiente.
Método 1: Variable de entorno
Establezca la variable de entorno siguiente: COMPLUS_DisableCCWSupportIAgileObject=1
Este método afecta a cualquier entorno que herede esta variable de entorno. Podría tratarse simplemente de una sesión de consola única, o podría afectar a toda la máquina si establece la variable de entorno global. El nombre de la variable de entorno no distingue mayúsculas de minúsculas.
Método 2: Registro
Busque cualquiera de las subclaves siguientes con el Editor del Registro (regedit.exe):
- HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft.NETFramework
- HKEY_CURRENT_USER\SOFTWARE\Microsoft.NETFramework
A continuación, agregue la entrada siguiente:
Nombre: DisableCCWSupportIAgileObject Tipo: DWORD (32 bits) Información del valor (también denominado REG_DWORD): 1
Puede usar la herramienta de Windows REG.EXE para agregar este valor desde una línea de comandos o un entorno de scripting. Por ejemplo:
reg add HKLM\SOFTWARE\Microsoft.NETFramework /v DisableCCWSupportIAgileObject /t REG_DWORD /d 1
En este caso, se usa HKLM
en lugar de HKEY_LOCAL_MACHINE
. Use reg add /?
para ver la ayuda sobre esta sintaxis. El nombre del valor de registro no distingue mayúsculas de minúsculas.
NOMBRE | Valor |
---|---|
Ámbito | Borde |
Versión | 4.8 |
Tipo | Tiempo de ejecución |
API afectadas
No detectable a través del análisis de la API.
Windows Communication Foundation (WCF)
Cambio de contraste alto de ComboBox svcTraceViewer
Detalles
En la herramienta Service Trace Viewer de Microsoft, los controles ComboBox no se mostraban en el color correcto en ciertos temas de contraste alto. El problema se ha corregido en .NET Framework 4.7.2. Sin embargo, debido a los requisitos de compatibilidad con versiones anteriores del SDK de .NET Framework, la corrección no era visible para los clientes de forma predeterminada. .NET 4.8 manifiesta este cambio agregando los siguientes modificadores de configuración AppContext al archivo svcTraceViewer.exe.config:
<AppContextSwitchOverrides value="Switch.UseLegacyAccessibilityFeatures=false;Switch.UseLegacyAccessibilityFeatures.2=false" />
Sugerencia
Si no quiere que se produzca el cambio de comportamiento de contraste alto, puede deshabilitarlo mediante la eliminación de la siguiente sección del archivo svcTraceViewer.exe.config:
<AppContextSwitchOverrides value="Switch.UseLegacyAccessibilityFeatures=false;Switch.UseLegacyAccessibilityFeatures.2=false" />
NOMBRE | Valor |
---|---|
Ámbito | Borde |
Versión | 4.8 |
Tipo | Tiempo de ejecución |
API afectadas
No detectable a través del análisis de la API.
Windows Presentation Foundation (WPF)
Mejora de enlace de datos para KeyedCollection
Detalles
Se ha corregido el uso incorrecto de Binding del indizador IList cuando el objeto de origen declara un indizador personalizado con la misma firma (por ejemplo, KeyedCollection<int,TItem>
).
Sugerencia
Para que una aplicación destinada a una versión anterior se beneficie de este cambio, se debe ejecutar en .NET Framework 4.8 o versiones posteriores, y debe participar en el cambio agregando el modificador de AppContext en la sección <runtime>
del archivo de configuración de aplicación y establecerla en false
:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.7"/>
</startup>
<runtime>
<!-- AppContextSwitchOverrides value attribute is in the form of key1=true/false;key2=true/false -->
<AppContextSwitchOverrides value="Switch.System.Windows.Data.Binding.IListIndexerHidesCustomIndexer=false" />
</runtime>
</configuration>
NOMBRE | Valor |
---|---|
Ámbito | Major |
Versión | 4.8 |
Tipo | Tiempo de ejecución |
API afectadas
No detectable a través del análisis de la API.
Se ha corregido un problema que provocaba que ListBox dejara de responder al contener tipos de valor duplicados
Detalles
Se ha corregido un problema por el que un elemento ItemsControl de virtualización dejaba de responder durante el desplazamiento cuando la colección Items
contenía objetos de tipo de valor duplicados.
Nombre | Valor |
---|---|
Ámbito | Major |
Versión | 4.8 |
Tipo | Tiempo de ejecución |
API afectadas
No detectable a través del análisis de la API.
Mejoras en el algoritmo de asignación de espacio en la cuadrícula de filas de estrella
Detalles
Se ha corregido un error en el algoritmo de asignación de los tamaños a ) en un Grid introducido en .NET Framework 4.7. En algunos casos, como una cuadrícula con Height="Auto"
que contiene las filas vacías, las filas se han organizado en una posición incorrecta, posiblemente fuera de la cuadrícula.
Sugerencia
Para que la aplicación se beneficie de estos cambios, se debe ejecutar en .NET Framework 4.8 o una versión posterior.
NOMBRE | Valor |
---|---|
Ámbito | Major |
Versión | 4.8 |
Tipo | Tiempo de ejecución |
API afectadas
No detectable a través del análisis de la API.
Mejora de la navegación mediante teclado en ListBox con Hipervínculos
Detalles
Se ha corregido el resultado incorrecto de presionar una tecla de dirección cuando el enfoque está en un hipervínculo dentro de un elemento que no es el elemento seleccionado del ItemsControl primario.
NOMBRE | Valor |
---|---|
Ámbito | Major |
Versión | 4.8 |
Tipo | Tiempo de ejecución |
API afectadas
No detectable a través del análisis de la API.
Mejora del rendimiento en el árbol de automatización para agrupar instancias ItemsControls
Detalles
Mejora el rendimiento de recompilar el árbol de automatización de ItemsControl, como ListBox o DataGrid, en el que está habilitada la agrupación.
NOMBRE | Valor |
---|---|
Ámbito | Major |
Versión | 4.8 |
Tipo | Tiempo de ejecución |
API afectadas
No detectable a través del análisis de la API.
.NET Framework 4.8.1
No se introdujeron problemas de compatibilidad de aplicaciones en .NET Framework 4.8.1.