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=&quot;Auto&quot; 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.

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.