Cambios de reorientació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
Núcleo
Las clases de criptografía administradas no lanzan una CryptographyException en modo FIPS
Detalles
En .NET Framework 4.7.2 y versiones anteriores, las clases de proveedor de servicios criptográficos administrados, como SHA256Managed inician un CryptographicException cuando las bibliotecas criptográficas del sistema están configuradas en modo FIPS. Estas excepciones se producen porque las versiones administradas no han recibido la certificación FIPS (Estándares federales de procesamiento de información) 140-2, así como para bloquear algoritmos criptográficos que no se consideraron aprobados en función de las reglas FIPS. Dado que pocos desarrolladores tienen sus máquinas de desarrollo en modo FIPS, estas excepciones se lanzan 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 relajada, de modo que una excepción CryptographicException ya no se lanza por defecto en tales 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 los entornos de desarrollo y los entornos de producción y hace que los componentes nativos y los componentes administrados funcionen con la misma directiva criptográfica.
Sugerencia
Si este comportamiento no es deseable, puede optar por no usarlo y restaurar el comportamiento anterior para que se genere un CryptographicException en modo FIPS agregando el siguiente valor de configuración de 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 una versión anterior, también puede optar por este cambio si agrega el siguiente valor 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 |
---|---|
Alcance | perimetral |
Versión | 4.8 |
Tipo | Redestinación |
APIs afectadas
- System.Security.Cryptography.AesManaged
- System.Security.Cryptography.MD5Cng
- System.Security.Cryptography.MD5CryptoServiceProvider
- System.Security.Cryptography.RC2CryptoServiceProvider
- System.Security.Cryptography.RijndaelManaged
- System.Security.Cryptography.RIPEMD160Managed
- System.Security.Cryptography.SHA1Managed
- System.Security.Cryptography.SHA256Managed
Windows Forms
Mejoras de accesibilidad en los controles de Windows Forms para .NET 4.8
Detalles
El marco de Windows Forms sigue mejorando su funcionamiento con las tecnologías de accesibilidad para ofrecer un mejor apoyo a los clientes de Windows Forms. Estos incluyen los siguientes cambios:
- Cambios para mejorar la visualización durante el modo de contraste alto.
- Cambios en la interacción con Narrador.
- Cambios en la jerarquía accesible (mejora de 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, debe ejecutarse en .NET Framework 4.8. La aplicación puede participar en estos cambios de cualquiera de las maneras siguientes:
- Se vuelve a compilar para tener como destino .NET Framework 4.8. Estos cambios de accesibilidad están habilitados de forma predeterminada en aplicaciones de Windows Forms destinadas a .NET Framework 4.8.
- Tiene como destino .NET Framework 4.7.2 o versión anterior y opta por no participar en los comportamientos de accesibilidad heredados agregando el siguiente modificador AppContext a la sección
<runtime>
del archivo de configuración de la aplicación y establéztelo enfalse
, 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 debe optar por las características de accesibilidad de .NET Framework 4.7.1 y 4.7.2. Las aplicaciones que tienen como destino el .NET Framework 4.8 y desean conservar el comportamiento de accesibilidad heredado pueden optar por el uso de características de accesibilidad heredadas configurando explícitamente este conmutador de AppContext a true
. Para habilitar el soporte de invocación de información sobre herramientas con el teclado, es necesario agregar la línea Switch.System.Windows.Forms.UseLegacyToolTipDisplay=false
al valor de 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 mencionadas anteriormente de .NET Framework 4.7.1 a 4.8. Además, si alguna de las funciones de accesibilidad no está habilitada pero la función de presentación de la información sobre herramientas está activada, se producirá un error NotSupportedException en tiempo de ejecución la primera vez que se acceda a estas características. El mensaje de excepción indica que los ToolTips del teclado requieren que se habiliten mejoras de accesibilidad de nivel 3.
uso de colores definidos por el sistema operativo en temas de contraste alto
- Temas de contraste alto mejorados.
Mejorada la compatibilidad con Narrador
- Ahora el Narrador anuncia la dirección de ordenación de DataGridViewColumn al anunciar un nombre accesible de un DataGridViewCell.
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. Mejora de la compatibilidad de accesibilidad de DataGridView
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 al DataGridViewComboBoxEditingControl o al DataGridViewTextBoxEditingControl ahora se convierte en un elemento secundario de la celda de edición correspondiente.
Mejorado el soporte de accesibilidad para 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
- Se ha habilitado la compatibilidad con la automatización de la interfaz de usuario para el control ProgressBar, permitiendo el uso de notificaciones de automatización 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 los eventos de automatización de la interfaz de usuario, incluidos los eventos de notificación de automatización de la interfaz de usuario, consulte la información general de eventos de automatización de la interfaz de usuario .
soporte mejorado de accesibilidad para PropertyGrid
- Compatibilidad habilitada para la automatización de la interfaz de usuario en el control PropertyGrid, permitiendo el uso de notificaciones 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.
Mejorada la compatibilidad con ToolStrip
- Se habilitó la compatibilidad con la Automatización de IU para el control ToolStrip, permitiendo el uso de notificaciones y otras funciones de Automatización de IU.
- Navegación mejorada a través de elementos ToolStrip.
- En el modo de elementos, el foco del narrador no desaparece y no va a elementos ocultos.
Indicaciones visuales mejoradas
- Ahora, un control CheckedListBox vacío muestra un indicador de foco cuando recibe el foco. Nota: La compatibilidad con la automatización de la interfaz de usuario está habilitada para los controles durante el tiempo de ejecución, pero no se usa durante el tiempo de diseño. Para obtener una visión general sobre la automatización de la interfaz de usuario, consulte la sección Visión General de Automatización de 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 "Cómo participar o no de estos cambios").
Nombre | Valor |
---|---|
Alcance | Principal |
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.
- El texto de los controles CheckBox y RadioButton, cuando están seleccionados, ahora es más fácil de ver que en las versiones anteriores de .NET Framework.
- El borde de un ComboBox deshabilitado ahora es 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, ellos 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 de un control DataGrid ahora usa colores de tema. En versiones anteriores de .NET Framework, no fue así.
- El estilo de hipervínculo predeterminado ahora cambia al color correspondiente al tema al pasar el ratón. 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.
- La columna de casillas de verificación del control DataGrid ahora usa los colores esperados para indicar visualmente el enfoque del teclado. En versiones anteriores de .NET Framework no lo hacía.
- Los indicadores visuales de enfoque del teclado ahora son 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
- Expander ahora los lectores de pantalla anuncian los controles correctamente como grupos (expandir o contraer).
- DataGridCell ahora los lectores de pantalla anuncian los controles correctamente como celdas de cuadrícula de datos (localizadas).
- Ahora los lectores de pantalla anunciarán el nombre de un ComboBox editable.
- PasswordBox los lectores de pantalla ya no anuncian los controles como "no hay elemento a la vista".
Compatibilidad con LiveRegion
Los lectores de pantalla, como Narrador, ayudan a los usuarios a comprender la interfaz de usuario (UI) de una aplicación, normalmente mediante la descripción del elemento de interfaz de usuario que actualmente tiene el foco. Sin embargo, si un elemento de la interfaz de usuario cambia en algún lugar de la pantalla y no tiene el foco, es posible que el usuario no se informe y pierda información importante. LiveRegions está pensado para resolver 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. Después, 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 lo importante que es informar al usuario del cambio realizado en la interfaz de usuario.
Sugerencia
Cómo participar o no en estos cambios
Para que la aplicación se beneficie de estos cambios, debe ejecutarse en .NET Framework 4.7.1 o posterior. La aplicación puede beneficiarse de estos cambios de cualquiera de las maneras siguientes:
Si se establece .NET Framework 4.7.1 como destino. Este es el enfoque recomendado. Estos cambios de accesibilidad están habilitados de forma predeterminada en aplicaciones WPF destinadas a .NET Framework 4.7.1 o 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 enfalse
, 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>
Las aplicaciones que tienen como destino .NET Framework 4.7.1 o posterior y que desean conservar el comportamiento de accesibilidad heredado pueden optar por el uso de características de accesibilidad heredadas estableciendo explícitamente este modificador de AppContext en true
.
Para obtener información general sobre la automatización de la interfaz de usuario, consulte introducción a la automatización de la interfaz de usuario .
Nombre | Valor |
---|---|
Alcance | Principal |
Versión | 4.7.1 |
Tipo | Redestinación |
APIs afectadas
- AutomationElementIdentifiers.LiveSettingProperty
- AutomationElementIdentifiers.LiveRegionChangedEvent
- System.Windows.Automation.AutomationLiveSetting
- AutomationProperties.LiveSettingProperty
- AutomationProperties.SetLiveSetting(DependencyObject, AutomationLiveSetting)
- AutomationProperties.GetLiveSetting(DependencyObject)
- AutomationPeer.GetLiveSettingCore()
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 adornos, puede usar la propiedad PasswordBox.SelectionTextBrush y SelectionTextBrush para cambiar la apariencia del texto seleccionado. Esto se puede lograr mediante XAML:
<TextBox SelectionBrush="Red" SelectionTextBrush="White" SelectionOpacity="0.5"
Foreground="Blue" CaretBrush="Blue">
This is some text.
</TextBox>
Nombre | Valor |
---|---|
Alcance | Principal |
Versión | 4.8 |
Tipo | Redestinación |
Las API afectadas
- TextBoxBase.SelectionTextBrushProperty
- TextBoxBase.SelectionTextBrush
- System.Windows.Controls.TextBox
- System.Windows.Controls.PasswordBox
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 el tamaño adecuado.
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 'key1=true/false;key2=true/false -->
<AppContextSwitchOverrides value="Switch.System.Windows.DoNotUsePresentationDpiCapabilityTier2OrGreater=false" />
</runtime>
</configuration>
Nombre | Valor |
---|---|
Alcance | Principal |
Versión | 4.8 |
Tipo | Redestinación |
Windows Workflow Foundation (WF)
Mejoras de accesibilidad en el diseñador de flujos de trabajo de Windows Workflow Foundation (WF)
Detalles
El diseñador de flujos de trabajo de Windows Workflow Foundation (WF) mejora cómo funciona con las tecnologías de accesibilidad. Estas mejoras incluyen los siguientes cambios:
- El orden de tabulación se cambia a izquierda a derecha y de arriba abajo en algunos controles:
- La ventana Inicializar correlación para establecer los datos de correlación para la actividad InitializeCorrelation.
- Ventana de definición de contenido para las actividades de Receive, Send, SendReplyy 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.
- Los iconos de advertencia ahora son accesibles mediante el teclado.
- El botón Más propiedades de la ventana Propiedades ahora es accesible mediante el teclado.
- Los usuarios del teclado ahora pueden acceder a los elementos de encabezado en los paneles Argumentos y Variables del Diseñador de flujos de trabajo.
- Visibilidad mejorada de los elementos con foco, como cuando:
- Agregar filas a cuadrículas de datos usadas por el Diseñador de flujos de trabajo y diseñadores de actividad.
- 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:
- 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.
- Menús contextuales (clic con el botón derecho) para las actividades.
- Los editores de valores de propiedades, el botón Borrar búsqueda, los botones de ordenación por categoría y por orden alfabético, y el cuadro de diálogo del Editor de expresiones en la cuadrícula de propiedades.
- Porcentaje de zoom en el Diseñador de flujos de trabajo.
- El separador en las actividades Parallel y Pick.
- La actividad InvokeDelegate.
- La ventana para 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 eligen temas de contraste alto verán muchas mejoras en la visibilidad del Diseñador de flujos de trabajo y sus controles, como mejores relaciones de contraste entre elementos y cuadros de selección más notables usados para los elementos de foco.
Sugerencia
Si tiene una aplicación con un diseñador de flujo de trabajo rehospedado, la aplicación puede beneficiarse de estos cambios realizando cualquiera de estas acciones:
- Vuelva a compilar la aplicación para que se dirija 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 versiones anteriores, pero se ejecuta en .NET Framework 4.7.1, puede no participar en estos comportamientos de accesibilidad heredados agregando el siguiente modificador AppContext a la sección
<runtime>
del archivo de app.config y establézcalo enfalse
, 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>
Las aplicaciones que tienen como destino .NET Framework 4.7.1 o posterior y que desean conservar el comportamiento de accesibilidad heredado pueden optar por el uso de características de accesibilidad heredadas estableciendo explícitamente este modificador de AppContext en true
.
Nombre | Valor |
---|---|
Alcance | 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 cambió a SHA1. A partir de .NET Framework 4.8, el algoritmo predeterminado se cambió 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
. En el 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 |
---|---|
Alcance | Secundaria |
Versión | 4.8 |
Tipo | Redestinación |
Definición de XOML de flujo de trabajo y claves de caché de SqlTrackingService cambiadas de MD5 a SHA256
Detalles
El entorno de ejecución de flujos de trabajo mantiene una caché de definiciones de flujo de trabajo en XOML. SqlTrackingService también mantiene una memoria caché con claves 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 usado es SHA256. No debería haber ningún problema de compatibilidad con este cambio porque los valores se recalculan cada vez que se inicia el runtime de flujo de trabajo y SqlTrackingService. Sin embargo, hemos proporcionado peculiaridades para permitir que los clientes vuelvan al uso del algoritmo hash heredado, si es necesario.
Sugerencia
Si este cambio presenta un problema al ejecutar flujos de trabajo, intente establecer uno o ambos conmutadores de AppContext
.
- "Switch.System.Workflow.Runtime.UseLegacyHashForWorkflowDefinitionDispenserCacheKey" en true.
- "Switch.System.Workflow.Runtime.UseLegacyHashForSqlTrackingCacheKey" en true. En el código:
System.AppContext.SetSwitch("Switch.System.Workflow.Runtime.UseLegacyHashForWorkflowDefinitionDispenserCacheKey", true);
System.AppContext.SetSwitch("Switch.System.Workflow.Runtime.UseLegacyHashForSqlTrackingCacheKey", true);
O bien, en el archivo de configuración (debe estar en el archivo de configuración de la aplicación que crea el objeto WorkflowRuntime):
<configuration>
<runtime>
<AppContextSwitchOverrides value="Switch.System.Workflow.Runtime.UseLegacyHashForWorkflowDefinitionDispenserCacheKey=true" />
<AppContextSwitchOverrides value="Switch.System.Workflow.Runtime.UseLegacyHashForSqlTrackingCacheKeytrue" />
</runtime>
</configuration>
Nombre | Valor |
---|---|
Alcance | Secundaria |
Versión | 4.8 |
Tipo | Redestinación |
Las sumas de comprobación del archivo XOML han cambiado de MD5 a SHA256
Detalles
Para facilitar la depuración de flujos de trabajo basados en XOML con Visual Studio, al compilar proyectos de flujo de trabajo que contienen archivos XOML, se añade una suma de comprobación del contenido del archivo XOML en el código generado, representada como un valor WorkflowMarkupSourceAttribute.MD5Digest. 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 usado es SHA256. Para ser compatible con WorkflowMarkupSourceAttribute.MD5Digest, solo se usan 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);
En un archivo de configuración (esto debe estar en MSBuild.exe.config para el MSBuild.exe que estás usando):
<configuration>
<runtime>
<AppContextSwitchOverrides value="Switch.System.Workflow.ComponentModel.UseLegacyHashForXomlFileChecksum=true" />
</runtime>
</configuration>
Nombre | Valor |
---|---|
Alcance | 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.