Compartir a través de


Cambios de redestinación 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

Principal

Las clases de criptografía administradas no producen una excepción CryptographyException en el modo FIPS

Detalles

En NET Framework 4.7.2 y versiones anteriores, las clases del proveedor de servicios criptográficos administrados, como SHA256Managed, producen una excepción CryptographicException cuando las bibliotecas criptográficas del sistema están configuradas en modo FIPS. Estas excepciones se producen porque las versiones administradas no han sometido al FIPS (Estándar federal de procesamiento de información) según la certificación 140-2, así como para bloquear los algoritmos criptográficos que no se consideran aprobados según las reglas FIPS. Dado que pocos desarrolladores tienen sus equipos de desarrollo en el modo FIPS, estas excepciones se producen con frecuencia solo en sistemas de producción. Las aplicaciones que tienen como destino .NET Framework 4.8 y versiones posteriores cambian automáticamente a la directiva más reciente y menos estricta, para que ya no se produzca de forma predeterminada CryptographicException en estos casos. En su lugar, las clases de criptografía administradas redirigen las operaciones criptográficas a una biblioteca de criptografía del sistema. Este cambio de directiva elimina eficazmente una diferencia potencialmente confusa entre entornos de desarrollo y entornos de producción, y permite que componentes nativos y componentes administrados funcionen bajo la misma directiva criptográfica.

Sugerencia

Si no quiere este comportamiento, puede obviarlo y restaurar el comportamiento anterior hasta que se produzca una excepción CryptographicException en el modo FIPS agregando la siguiente opción de configuración AppContextSwitchOverrides a la sección <runtime> del archivo de configuración de la aplicación:

<runtime>
  <AppContextSwitchOverrides value="Switch.System.Security.Cryptography.UseLegacyFipsThrow=true" />
</runtime>

Si la aplicación tiene como destino .NET Framework 4.7.2 o versiones anteriores, se puede también participar en este cambio agregando la opción de configuración AppContextSwitchOverrides a la sección <runtime> del archivo de configuración de la aplicación:

<runtime>
  <AppContextSwitchOverrides value="Switch.System.Security.Cryptography.UseLegacyFipsThrow=false" />
</runtime>
Nombre Valor
Ámbito Borde
Versión 4.8
Tipo Redestinación

API afectadas

Windows Forms

Mejoras de accesibilidad en controles de Windows Forms para .NET 4.8

Detalles

El marco de trabajo de Windows Forms continúa mejorando su funcionamiento con las tecnologías de accesibilidad para ofrecer una mejor compatibilidad con los clientes de Windows Forms. Entre otros, se incluyen los cambios siguientes:

  • Cambios para mejorar la presentación durante el modo de contraste alto.
  • Cambios en la interacción con Narrador.
  • Cambios en la jerarquía Accesible (mejorando la navegación a través del árbol de automatización de la interfaz de usuario).

Sugerencia

Cómo participar o no en estos cambios Para que la aplicación se beneficie de estos cambios, se debe ejecutar en .NET Framework 4.8. La aplicación puede optar por recibir estos cambios de cualquiera de las maneras siguientes:

  • Se recompila para tener .NET Framework 4.8 como destino. Estos cambios de accesibilidad están habilitados de forma predeterminada para las aplicaciones de Windows Forms destinadas a .NET Framework 4.8.
  • Tiene como destino .NET Framework 4.7.2 o una versión anterior, y no participa en los comportamientos de accesibilidad heredados mediante la adición del modificador de AppContext siguiente a la sección <runtime> del archivo app.config y estableciéndolo en false, como se muestra en el ejemplo siguiente.
<?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.UseLegacyAccessibilityFeatures=false;Switch.UseLegacyAccessibilityFeatures.2=false;Switch.UseLegacyAccessibilityFeatures.3=false" />
  </runtime>
</configuration>

Tenga en cuenta que para participar en las características de accesibilidad agregadas en .NET Framework 4.8, también se debe participar en las características de accesibilidad de .NET Framework 4.7.1 y 4.7.2. Las aplicaciones destinadas a .NET Framework 4.8 o una versión posterior, y cuando se quiere conservar el comportamiento de accesibilidad heredado, se puede participar en el uso de las características de accesibilidad heredadas si se establece explícitamente este modificador de AppContext en true. Para habilitar la compatibilidad con la invocación de la información sobre herramientas del teclado es necesario es necesario agregar la línea Switch.System.Windows.Forms.UseLegacyToolTipDisplay=false al valor AppContextSwitchOverrides:

<AppContextSwitchOverrides value="Switch.UseLegacyAccessibilityFeatures=false;Switch.UseLegacyAccessibilityFeatures.2=false;Switch.UseLegacyAccessibilityFeatures.3=false;Switch.System.Windows.Forms.UseLegacyToolTipDisplay=false" />

Tenga en cuenta que habilitar esta característica requiere participar en las características de accesibilidad de .NET Framework 4.7.1 - 4.8 mencionadas anteriormente. Además, si no participa en algunas de las características de accesibilidad, pero sí en las características de visualización de la información sobre herramientas, se producirá un tiempo de ejecución NotSupportedException en el primer acceso a estas características. El mensaje de excepción indica que las informaciones sobre herramientas del teclado requieren que se habiliten mejoras de accesibilidad de nivel 3.

Uso de colores definidos por el sistema operativo en los temas de contraste alto

  • Temas de contraste alto mejorados.

Compatibilidad mejorada con Narrador

Compatibilidad de accesibilidad mejorada con CheckedListBox

  • Compatibilidad mejorada con Narrador para el control de CheckedListBox. Al navegar por el control CheckedListBox utilizando el teclado, el Narrador se centra en el elemento CheckedListBox y lo anuncia.
  • Un control CheckedListBox vacío tiene ahora un rectángulo de foco dibujado para un primer elemento virtual cuando el control se enfoca.

Compatibilidad de accesibilidad mejorada con ComboBox

  • Compatibilidad de la automatización de la interfaz de usuario habilitada para el control ComboBox, con la capacidad para usar notificaciones de automatización de la interfaz de usuario y otras características de automatización de la interfaz de usuario. Compatibilidad de accesibilidad de DataGridView mejorada

  • Compatibilidad de la automatización de la interfaz de usuario habilitada para el control DataGridView, con capacidad para usar notificaciones de automatización de la interfaz de usuario y otras características de automatización de la interfaz de usuario.

  • El elemento de automatización de la interfaz de usuario que corresponde a DataGridViewComboBoxEditingControl o DataGridViewTextBoxEditingControl ahora es un elemento secundario de la celda de edición correspondiente.

Compatibilidad de accesibilidad mejorada con LinkLabel

  • Accesibilidad del control LinkLabel mejorada: El Narrador anuncia el estado deshabilitado para el vínculo si el correspondiente control LinkLabel está deshabilitado.

Compatibilidad de accesibilidad mejorada con ProgressBar

  • Compatibilidad de la automatización de la interfaz de usuario habilitada para el control ProgressBar con la capacidad para usar notificaciones de automatización de la interfaz de usuario y otras características de automatización de la interfaz de usuario. Los desarrolladores ahora pueden usar las notificaciones de automatización de la interfaz de usuario que Narrador puede anunciar para indicar el progreso. Para obtener información general sobre eventos de la automatización de la interfaz de usuario, incluidos los eventos de notificación de automatización de la interfaz de usuario, consulte Información general sobre eventos de automatización de la interfaz de usuario.

Compatibilidad de accesibilidad mejorada con PropertyGrid

  • Compatibilidad de la automatización de la interfaz de usuario habilitada para el control PropertyGrid, con la capacidad para usar notificaciones de automatización de la interfaz de usuario y otras características de automatización de la interfaz de usuario.
  • El elemento de automatización de la interfaz de usuario que corresponde a la propiedad que actualmente se edita es ahora un elemento secundario del elemento de automatización de la interfaz de usuario del correspondiente elemento de propiedad.
  • El elemento de propiedad de automatización de la interfaz de usuario es ahora un elemento secundario del correspondiente elemento de categoría, si el control primario PropertyGrid se establece en la vista por categorías.

Compatibilidad mejorada con ToolStrip

  • Compatibilidad de la automatización de la interfaz de usuario habilitada para el control ToolStrip, con la capacidad para usar notificaciones de automatización de la interfaz de usuario y otras características de automatización de la interfaz de usuario.
  • Navegación mejorada a través de elementos ToolStrip.
  • En el modo de elementos, el enfoque de Narrador no desaparecerá y no pasará a los elementos ocultos.

Indicaciones visuales mejoradas

  • Un control CheckedListBox vacío ahora muestra un indicador de enfoque cuando recibe el enfoque. Nota: La compatibilidad de automatización de la interfaz de usuario está habilitada para los controles en tiempo de ejecución pero no se utiliza en tiempo de diseño. Para obtener información general de la automatización de la interfaz de usuario, vea la información general sobre la Automatización de la interfaz de usuario.

Información sobre herramientas de invocación de controles con un teclado

  • Ahora se puede invocar el control de información sobre herramientas centrándose en el control con el teclado. Esta característica debe habilitarse explícitamente para la aplicación (consulte la sección "Participar o ser excluido de estos cambios")
Nombre Valor
Ámbito Major
Versión 4.8
Tipo Redestinación

Windows Presentation Foundation (WPF)

Mejoras de accesibilidad en WPF

Detalles

Mejoras de contraste alto

  • El foco para el control Expander ahora es visible. En versiones anteriores de .NET Framework no lo era.
  • Cuando se seleccionan los controles CheckBox y RadioButton, ahora el texto es más fácil ver que en versiones anteriores de .NET Framework.
  • El borde de un control ComboBox deshabilitado ahora tiene el mismo color que el texto deshabilitado. En versiones anteriores de .NET Framework no lo era.
  • Los botones deshabilitados y con el foco ahora usan el color de tema correcto. En versiones anteriores de .NET Framework no lo hacían.
  • El botón desplegable ahora es visible cuando el estilo de un control ComboBox se establece en ToolBar.ComboBoxStyleKey. En versiones anteriores de .NET Framework no lo era.
  • La flecha del indicador de ordenación en un control DataGrid ahora usa los colores del tema. En versiones anteriores de .NET Framework no lo hacía.
  • El estilo de hipervínculo predeterminado cambia ahora al color de tema correcto al pasar el mouse. En versiones anteriores de .NET Framework no lo hacía.
  • El foco del teclado en los botones de radio ahora es visible. En versiones anteriores de .NET Framework no lo era.
  • En la columna de casilla del control DataGrid ahora se usan los colores esperados para los comentarios de foco de teclado. En versiones anteriores de .NET Framework no lo hacía.
  • Los objetos visuales de foco de teclado son ahora visibles en los controles ComboBox y ListBox. En versiones anteriores de .NET Framework no lo era.

Mejoras en la interacción con el lector de pantalla

  • Ahora los lectores de pantalla anuncian los controles Expander correctamente como grupos (expandir o contraer).
  • Ahora los lectores de pantalla anuncian los controles DataGridCell correctamente como celdas de cuadrícula de datos (localizadas).
  • Ahora los lectores de pantalla anunciarán el nombre de un ComboBox editable.
  • Los lectores de pantalla ya no anuncian los controles PasswordBox como "no hay elemento a la vista".

Compatibilidad con LiveRegion

Los lectores de pantalla, como Narrador, ayudan a los usuarios a entender la interfaz de usuario (IU) de una aplicación, normalmente mediante la descripción del elemento de la interfaz de usuario que actualmente tiene el foco. Pero si un elemento de la interfaz de usuario cambia en alguna parte de la pantalla y no tiene el foco, puede que no se notifique al usuario y este pierda información importante. Las regiones activas están diseñadas para solucionar este problema. Un desarrollador puede usarlas para informar al lector de pantalla o a cualquier otro cliente de UI Automation de que se ha realizado un cambio importante en un elemento de la interfaz de usuario. Luego el lector de pantalla puede decidir cómo y cuándo informar al usuario de este cambio. La propiedad LiveSetting también permite al lector de pantalla saber la importancia de informar al usuario de los cambios realizados en la interfaz de usuario.

Sugerencia

Cómo participar o no en estos cambios

Para que la aplicación se beneficie de estos cambios, se debe ejecutar en .NET Framework 4.7.1 o una versión posterior. La aplicación se puede beneficiar de estos cambios de cualquiera de las maneras siguientes:

  • Si se establece .NET Framework 4.7.1 como destino. Éste es el enfoque recomendado. Estos cambios de accesibilidad están habilitados de forma predeterminada en las aplicaciones de WPF destinadas a .NET Framework 4.7.1 o una versión posterior.

  • No participa en los comportamientos de accesibilidad heredados mediante la adición del modificador de AppContext siguiente a la sección <runtime> del archivo de configuración de la aplicación y estableciéndolo en false, como se muestra en el ejemplo siguiente.

    <?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.UseLegacyAccessibilityFeatures=false" />
      </runtime>
    </configuration>
    

En las aplicaciones destinadas a .NET Framework 4.7.1 o una versión posterior, y en las que se quiere conservar el comportamiento de accesibilidad heredado, se puede participar en el uso de las características de accesibilidad heredadas si se establece explícitamente este modificador de AppContext en true. Para obtener información general de la automatización de la interfaz de usuario, vea Información general sobre la automatización de la interfaz de usuario.

Nombre Valor
Ámbito Major
Versión 4.7.1
Tipo Redestinación

API afectadas

Adición de la propiedad pública SelectionTextBrush a la selección de no basada en Adorner de TextBox y PasswordBox

Detalles

En aplicaciones de WPF no basadas en Adorner según la selección de texto para TextBox y PasswordBox, los desarrolladores ahora pueden establecer la propiedad agregada recientemente de SelectionTextBrush con el fin de modificar la representación del texto seleccionado. De forma predeterminada, este color cambia con HighlightTextBrushKey. Si no está habilitada la selección de texto no basada en Adorner, esta propiedad no hace nada.

Sugerencia

Una vez habilitada la selección de texto no basada en Adorner, puede usar las propiedades PasswordBox.SelectionTextBrush y SelectionTextBrush para cambiar la apariencia del texto seleccionado. Esto puede realizarse mediante XAML:

<TextBox SelectionBrush="Red" SelectionTextBrush="White"  SelectionOpacity="0.5"
Foreground="Blue" CaretBrush="Blue">
This is some text.
</TextBox>
NOMBRE Valor
Ámbito Major
Versión 4.8
Tipo Redestinación

API afectadas

HwndHost ahora cambia correctamente el tamaño del elemento secundario HWND durante los cambios de PPP

Detalles

En .NET Framework 4.7.2 y versiones anteriores, cuando WPF se ejecutaba en modo de reconocimiento por monitor, los controles hospedados en HwndHost no tenían el tamaño correcto después de realizar cambios de PPP, como al mover las aplicaciones de un monitor a otro. Esta corrección garantiza que los controles hospedados tienen un tamaño apropiado.

Sugerencia

Para que la aplicación se beneficie de estos cambios, se debe ejecutar en .NET Framework 4.7.2 o versiones posteriores y debe participar en este comportamiento estableciendo AppContext en la sección <runtime> del archivo de configuración de aplicación en false, tal y como se muestra en el ejemplo siguiente.

<?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 &#39;key1=true/false;key2=true/false  -->
<AppContextSwitchOverrides value="Switch.System.Windows.DoNotUsePresentationDpiCapabilityTier2OrGreater=false" />
</runtime>
</configuration>
NOMBRE Valor
Ámbito Major
Versión 4.8
Tipo Redestinación

Windows Workflow Foundation (WF)

Mejoras de accesibilidad en el Diseñador de flujo de trabajo de Windows Workflow Foundation (WF)

Detalles

El Diseñador de flujo de trabajo de Windows Workflow Foundation (WF) mejora su funcionamiento con tecnologías de accesibilidad. Estas mejoras incluyen los cambios siguientes:

  • Se cambia el orden de tabulación de izquierda a derecha y de arriba a abajo en algunos controles:
  • La ventana Inicializar correlación para establecer los datos de correlación para la actividad InitializeCorrelation.
  • La ventana Definición de contenido para las actividades Receive, Send, SendReply y ReceiveReply.
  • Hay más funciones disponibles a través del teclado:
  • Al editar las propiedades de una actividad, los grupos de propiedades se pueden contraer mediante el teclado la primera vez que obtienen el foco.
  • Ahora los iconos de advertencia son accesibles mediante el teclado.
  • Ahora el botón Más propiedades de la ventana Propiedades es accesible mediante el teclado.
  • Los usuarios del teclado ahora pueden tener acceso a los elementos de encabezado en los paneles Argumentos y Variables del Diseñador de flujo de trabajo.
  • Visibilidad mejorada de los elementos con el foco, por ejemplo cuando:
  • Se agregan filas a las cuadrículas de datos usadas por los diseñadores de actividad y el Diseñador de flujo de trabajo.
  • Desplazamiento entre campos en las actividades ReceiveReply y SendReply.
  • Establecimiento de valores predeterminados para variables o argumentos.
  • Los lectores de pantalla ahora pueden reconocer correctamente:
  • Los puntos de interrupción establecidos en el Diseñador de flujo de trabajo.
  • Las actividades FlowSwitch<T>, FlowDecision y CorrelationScope.
  • El contenido de la actividad Receive.
  • El tipo de destino para la actividad InvokeMethod.
  • El cuadro combinado Excepción y la sección Finally de la actividad TryCatch.
  • El cuadro combinado Tipo de mensaje, el divisor de la ventana Agregar inicializadores de correlación, la ventana Definición de contenido y la ventana Definición de CorrelatesOn en las actividades de mensajería (Receive, Send, SendReply y ReceiveReply).
  • Transiciones a máquina de estados y destinos de transición.
  • Anotaciones y conectores en las actividades FlowDecision.
  • Los menús contextuales (clic con el botón derecho) para las actividades.
  • Los editores de valor de propiedad, el botón Borrar búsqueda, los botones de ordenación Por categoría y Alfabético, y el cuadro de diálogo Editor de expresiones en la cuadrícula de propiedades.
  • El porcentaje de zoom en el Diseñador de flujo de trabajo.
  • El separador en las actividades Parallel y Pick.
  • La actividad InvokeDelegate.
  • La ventana Seleccionar tipos para las actividades de diccionario (Microsoft.Activities.AddToDictionary<TKey,TValue>, Microsoft.Activities.RemoveFromDictionary<TKey,TValue>, etc.).
  • La ventana Examinar y seleccionar un tipo .NET.
  • Rutas de navegación en el Diseñador de flujo de trabajo.
  • Los usuarios que elijan temas de contraste alto verán muchas mejoras en la visibilidad del Diseñador de flujo de trabajo y sus controles, como relaciones de contraste mejoradas entre los elementos y cuadros de selección más evidentes para los elementos del foco.

Sugerencia

Si tiene una aplicación con un diseñador de flujo de trabajo rehospedado, se puede beneficiar de estos cambios si se realiza cualquiera de estas acciones:

  • Volver a compilar la aplicación para destinarla a .NET Framework 4.7.1. Estos cambios de accesibilidad están habilitados de forma predeterminada.
  • Si la aplicación tiene como destino .NET Framework 4.7 o una versión anterior, pero se ejecuta en .NET Framework 4.7.1, puede rechazar estos comportamientos de accesibilidad heredados si agrega el conmutador de AppContext siguiente a la sección <runtime> del archivo app.config de archivos y lo establece en false, como se muestra en el ejemplo siguiente.
<?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.UseLegacyAccessibilityFeatures=false" />
  </runtime>
</configuration>

En las aplicaciones destinadas a .NET Framework 4.7.1 o una versión posterior, y en las que se quiere conservar el comportamiento de accesibilidad heredado, se puede participar en el uso de las características de accesibilidad heredadas si se establece explícitamente este modificador de AppContext en true.

NOMBRE Valor
Ámbito Secundaria
Versión 4.7.1
Tipo Redestinación

Sumas de comprobación de flujo de trabajo XAML para los símbolos que se han cambiado de SHA1 a SHA256

Detalles

Para admitir la depuración con Visual Studio, el tiempo de ejecución de flujo de trabajo genera una suma de comprobación para un archivo XAML de flujo de trabajo mediante un algoritmo de hash. En .NET Framework 4.6.2 y versiones anteriores, el hash de suma de comprobación de flujo de trabajo usaba el algoritmo MD5, que causaba problemas en sistemas compatibles con FIPS. A partir de .NET Framework 4.7, el algoritmo predeterminado se ha cambiado a SHA1. A partir de .NET Framework 4.8, el algoritmo predeterminado se ha cambiado a SHA256.

Sugerencia

Si el código no puede cargar las instancias de flujo de trabajo o no puede buscar símbolos adecuados debido a un error de suma de comprobación, pruebe a establecer el valor AppContext "Switch.System.Activities.UseSHA1HashForDebuggerSymbols" en true. Mediante código:

System.AppContext.SetSwitch("Switch.System.Activities.UseSHA1HashForDebuggerSymbols", true);

O bien, en la configuración:

<configuration>
  <runtime>
    <AppContextSwitchOverrides value="Switch.System.Activities.UseSHA1HashForDebuggerSymbols=true" />
  </runtime>
</configuration>
NOMBRE Valor
Ámbito Secundaria
Versión 4.8
Tipo Redestinación

La definición XOML de flujo de trabajo y las claves de caché de SqlTrackingService han cambiado de MD5 a SHA256

Detalles

El tiempo de ejecución de flujo de trabajo mantiene una caché de definiciones de flujo de trabajo definido en XOML. SqlTrackingService también mantiene una caché organizada por cadenas. Estas cachés están organizadas según los valores que incluyen el valor de código hash de suma de comprobación. En .NET Framework 4.7.2 y versiones anteriores, este hash de suma de comprobación usaba el algoritmo MD5, que causaba problemas en sistemas compatibles con FIPS. A partir de .NET Framework 4.8, el algoritmo utilizado es SHA256. No debería haber ninguna incidencia de compatibilidad con este cambio ya que los valores se vuelven a calcular cada vez que se inician el tiempo de ejecución de flujo de trabajo y SqlTrackingService. Sin embargo, hemos proporcionado una interpretación para permitir que los clientes puedan volver a usar el algoritmo hash heredado, en caso necesario.

Sugerencia

Si este cambio supone un problema al ejecutar los flujos de trabajo, pruebe a establecer uno o ambos modificadores AppContext:

  • "Switch.System.Workflow.Runtime.UseLegacyHashForWorkflowDefinitionDispenserCacheKey" en true.
  • "Switch.System.Workflow.Runtime.UseLegacyHashForSqlTrackingCacheKey" en true. Mediante código:
System.AppContext.SetSwitch("Switch.System.Workflow.Runtime.UseLegacyHashForWorkflowDefinitionDispenserCacheKey", true);
System.AppContext.SetSwitch("Switch.System.Workflow.Runtime.UseLegacyHashForSqlTrackingCacheKey", true);

O en el archivo de configuración (que debe estar en el archivo de configuración de la aplicación que está creando el objeto WorkflowRuntime):

<configuration>
<runtime>
<AppContextSwitchOverrides value="Switch.System.Workflow.Runtime.UseLegacyHashForWorkflowDefinitionDispenserCacheKey=true" />
<AppContextSwitchOverrides value="Switch.System.Workflow.Runtime.UseLegacyHashForSqlTrackingCacheKeytrue" />
</runtime>
</configuration>
NOMBRE Valor
Ámbito Secundaria
Versión 4.8
Tipo Redestinación

Las sumas de comprobación del archivo XOML han cambiado de MD5 a SHA256

Detalles

Cuando se compilan los proyectos de flujo de trabajo que contienen archivos XOML, se incluye una suma de comprobación del contenido del archivo XOML en el código generado como un valor WorkflowMarkupSourceAttribute.MD5Digest con el fin de admitir la depuración de flujos de trabajo basados en XOML con Visual Studio. En .NET Framework 4.7.2 y versiones anteriores, este hash de suma de comprobación usaba el algoritmo MD5, que causaba problemas en sistemas compatibles con FIPS. A partir de .NET Framework 4.8, el algoritmo que se usa es SHA256. Para ser compatible con WorkflowMarkupSourceAttribute.MD5Digest, se usan solo los primeros 16 bytes de la suma de comprobación generada. Esto puede causar problemas durante la depuración. Es posible que deba volver a compilar el proyecto.

Sugerencia

Si con volver a compilar el proyecto no se soluciona el problema, intente establecer el modificador de AppContext "Switch.System.Workflow.ComponentModel.UseLegacyHashForXomlFileChecksum" en true. En el código:

System.AppContext.SetSwitch("Switch.System.Workflow.ComponentModel.UseLegacyHashForXomlFileChecksum", true);

O en un archivo de configuración (esto debe estar en el archivo MSBuild.exe.config de MSBuild.exe que está usando):

<configuration>
<runtime>
<AppContextSwitchOverrides value="Switch.System.Workflow.ComponentModel.UseLegacyHashForXomlFileChecksum=true" />
</runtime>
</configuration>
NOMBRE Valor
Ámbito Secundaria
Versión 4.8
Tipo Redestinación

.NET Framework 4.8.1

No se introdujeron problemas de compatibilidad de aplicaciones en .NET Framework 4.8.1.