Modifications de reciblage pour la migration vers .NET Framework 4.8.x

Cet article répertorie les problèmes de compatibilité des applications qui ont été introduits dans .NET Framework 4.8 et 4.8.1.

.NET Framework 4.8

Principal

Les classes de chiffrement managées ne lèvent pas d’exception de chiffrement en mode FIPS

Détails

Dans .NET Framework 4.7.2 et versions antérieures, les classes de fournisseur de chiffrement managées comme SHA256Managed lèvent une CryptographicException quand les bibliothèques de chiffrement système sont configurées en mode FIPS. Ces exceptions sont levées parce que les versions managées ne sont pas sous la certification 140-2 FIPS (Federal Information Processing Standards), et dans le but de bloquer les algorithmes de chiffrement qui n’étaient pas considérés comme approuvés selon les règles FIPS. Étant donné que peu de développeurs ont leurs ordinateurs de développement en mode FIPS, ces exceptions sont fréquemment levées sur les systèmes de production uniquement. Les applications qui ciblent .NET Framework 4.8 et versions ultérieures basculent automatiquement vers la stratégie plus récente et plus souple afin qu’une CryptographicException ne soit plus levée par défaut dans ces cas précis. Les classes de chiffrement managées redirigent plutôt les opérations de chiffrement vers une bibliothèque de chiffrement système. Ce changement de stratégie supprime efficacement une différence pouvant potentiellement prêter à confusion entre les environnements de développement et les environnements de production, et permet d’exécuter les composants natifs et les composants managés sous la même stratégie de chiffrement.

Suggestion

Si ce comportement n’est pas souhaitable, vous pouvez choisir de ne plus y adhérer et de rétablir le comportement antérieur pour qu’une CryptographicException soit levée en mode FIPS en ajoutant le paramètre de configuration AppContextSwitchOverrides suivant dans la section <runtime>> du fichier de configuration de l’application :

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

Si votre application cible .NET Framework 4.7.2 ou version antérieure, vous pouvez aussi choisir d’adhérer à ce changement en ajoutant le paramètre de configuration AppContextSwitchOverrides suivant dans la section <runtime>> du fichier de configuration de l’application :

<runtime>
  <AppContextSwitchOverrides value="Switch.System.Security.Cryptography.UseLegacyFipsThrow=false" />
</runtime>
Nom Valeur
Étendue Edge
Version 4.8
Type Reciblage

API affectées

Windows Forms

Améliorations des fonctionnalités d’accessibilité dans les contrôles Windows Forms pour .NET 4.8

Détails

Windows Forms Framework continue d’améliorer la façon dont il utilise les technologies d’accessibilité pour mieux répondre aux besoins de ses clients. Citons notamment les changements suivants :

  • Changements visant à améliorer l’affichage en mode Contraste élevé.
  • Changements apportés à l’interaction avec le Narrateur.
  • Changements dans la hiérarchie accessible (amélioration de la navigation dans l’arborescence UI Automation).

Suggestion

Comment accepter ou refuser ces changements Pour tirer parti de ces changements, l’application doit s’exécuter sous .NET Framework 4.8. Pour que l’application bénéficie de ces changements, procédez de l’une des manières suivantes :

  • Recompilez-la pour qu’elle cible .NET Framework 4.8. Ces changements d’accessibilité sont activés par défaut sur les applications Windows Forms qui ciblent .NET Framework 4.8.
  • Faites-lui cibler .NET Framework version 4.7.2 ou antérieure et cessez d’adhérer aux comportements d’accessibilité existants, en ajoutant le commutateur AppContext suivant dans la section <runtime> du fichier de configuration de l’application et en lui affectant la valeur false, comme dans l’exemple suivant.
<?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>

Notez que pour adhérer aux fonctionnalités d’accessibilité ajoutées à .NET Framework 4.8, vous devez également adhérer aux fonctionnalités d’accessibilité de .NET Framework 4.7.1 et 4.7.2. Si vos applications ciblent .NET Framework 4.8 et que vous souhaitez conserver le comportement d’accessibilité existant, choisissez d’adhérer aux fonctionnalités d’accessibilité existantes en affectant explicitement à ce commutateur AppContext la valeur true. L’activation de la prise en charge de l’appel des info-bulles au clavier demande d’ajouter la ligne Switch.System.Windows.Forms.UseLegacyToolTipDisplay=false à la valeur AppContextSwitchOverrides :

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

Notez que l’activation de cette fonctionnalité demande d’adhérer aux fonctionnalités d’accessibilité susmentionnées de .NET Framework 4.7.1 - 4.8. De plus, si vous n’avez pas adhéré à l’une des fonctionnalités d’accessibilité mais que l’info-bulle affiche le contraire, une NotSupportedException d’exécution est levée la première fois que vous accédez à ces fonctionnalités. Le message de l’exception indique que les info-bulles au clavier nécessitent que les améliorations de l’accessibilité de niveau 3 soient activées.

Utilisation des couleurs définies par le système d’exploitation dans les thèmes à contraste élevé

  • Thèmes à contraste élevé améliorés.

Amélioration de la prise en charge du Narrateur

Prise en charge améliorée de l’accessibilité de CheckedListBox

  • Prise en charge améliorée du Narrateur pour le contrôle CheckedListBox. Quand vous accédez au contrôle CheckedListBox à l’aide du clavier, le Narrateur se focalise sur l’élément CheckedListBox et l’annonce.
  • Un contrôle CheckedListBox vide a maintenant un rectangle dessiné pour un premier élément virtuel quand le contrôle a le focus.

Prise en charge améliorée de l’accessibilité de ComboBox

  • Activation de la prise en charge d’UI Automation pour le contrôle ComboBox, avec la possibilité d’utiliser les notifications UI Automation et autres fonctionnalités UI Automation. Amélioration de la prise en charge de l’accessibilité DataGridView

  • Activation de la prise en charge d’UI Automation pour le contrôle DataGridView avec la possibilité d’utiliser les notifications UI Automation et autres fonctionnalités UI Automation.

  • L’élément UI Automation qui correspond au DataGridViewComboBoxEditingControl ou au DataGridViewTextBoxEditingControl est maintenant un enfant de la cellule d’édition correspondante.

Prise en charge améliorée de l’accessibilité de LinkLabel

  • Amélioration de l’accessibilité du contrôle LinkLabel : le Narrateur annonce l’état désactivé du lien si le contrôle LinkLabel correspondant est désactivé.

Prise en charge améliorée de l’accessibilité de ProgressBar

  • Activation de la prise en charge d’UI Automation pour le contrôle ProgressBar avec la possibilité d’utiliser les notifications UI Automation et autres fonctionnalités UI Automation. Les développeurs peuvent maintenant utiliser les notifications UI Automation que le Narrateur peut annoncer pour indiquer la progression. Pour une vue d’ensemble des événements liés à l’automation de l’interface utilisateur, notamment les événements de notification, consultez la Vue d’ensemble des événements liés à l’automation de l’interface utilisateur.

Prise en charge améliorée de l’accessibilité de PropertyGrid

  • Activation de la prise en charge d’UI Automation pour le contrôle PropertyGrid, avec la possibilité d’utiliser les notifications UI Automation et autres fonctionnalités UI Automation.
  • L’élément UI Automation qui correspond à la propriété en cours de modification est maintenant un enfant de l’élément UI Automation de l’élément de propriété correspondant.
  • L’élément de l’élément de propriété UI Automation est maintenant un enfant de l’élément de catégorie correspondant si le contrôle PropertyGrid parent est défini sur la vue des catégories.

Prise en charge améliorée de ToolStrip

  • Activation de la prise en charge d’UI Automation pour le contrôle ToolStrip, avec la possibilité d’utiliser les notifications UI Automation et autres fonctionnalités UI Automation.
  • Amélioration de la navigation des éléments ToolStrip.
  • En mode Éléments, le focus du Narrateur ne disparaît pas et ne va pas vers les éléments masqués.

Amélioration des signaux visuels

  • Un contrôle CheckedListBox vide affiche maintenant un indicateur de focus quand il reçoit le focus. Remarque : la prise en charge de l’automation de l’interface utilisateur est activée pour les contrôles au moment de l’exécution, mais elle n’est pas utilisée au moment de la conception. Pour une vue d’ensemble d’UI Automation, consultez la Vue d’ensemble d’UI Automation.

Appel des info-bulles des contrôles au clavier

  • Maintenant, vous pouvez utiliser le clavier pour appeler les info-bulles des contrôles en mettant le focus sur le contrôle souhaité. Cette fonctionnalité doit être explicitement activée pour l’application (voir la section « Comment accepter ou refuser ces changements »).
Nom Valeur
Étendue Majeure
Version 4.8
Type Reciblage

Windows Presentation Foundation (WPF)

Améliorations apportées aux fonctionnalités d’accessibilité dans WPF

Détails

Améliorations apportées au mode Contraste élevé

  • Le focus pour le contrôle Expander est désormais visible. Dans les versions précédentes de .NET Framework, ce n’était pas le cas.
  • Quand les contrôles CheckBox et RadioButton sont sélectionnés, le texte qu’ils contiennent est plus facile à voir que dans les versions précédentes du .NET Framework.
  • La bordure d’un ComboBox désactivé est désormais de la même couleur que le texte désactivé. Dans les versions précédentes de .NET Framework, ce n’était pas le cas.
  • Les boutons désactivés et ceux avec le focus utilisent désormais la bonne couleur de thème. Dans les versions précédentes de .NET Framework, ce n’était pas le cas.
  • Le bouton déroulant est désormais visible quand le style d’un contrôle ComboBox est défini sur ToolBar.ComboBoxStyleKey. Dans les versions précédentes de .NET Framework, ce n’était pas le cas.
  • La flèche d’indicateur de tri dans un contrôle DataGrid utilise désormais les couleurs de thème. Dans les versions précédentes de .NET Framework, ce n’était pas le cas.
  • Le style de lien hypertexte par défaut utilise désormais la bonne couleur de thème quand l’utilisateur pointe dessus avec la souris. Dans les versions précédentes de .NET Framework, ce n’était pas le cas.
  • Le focus clavier sur les boutons radio est désormais visible. Dans les versions précédentes de .NET Framework, ce n’était pas le cas.
  • La colonne de cases à cocher du contrôle DataGrid utilise désormais les couleurs attendues pour le focus clavier. Dans les versions précédentes de .NET Framework, ce n’était pas le cas.
  • Les visuels du focus clavier sont désormais visibles sur les contrôles ComboBox et ListBox. Dans les versions précédentes de .NET Framework, ce n’était pas le cas.

Améliorations apportées à l’interaction avec le lecteur d’écran

  • Les contrôles Expander sont maintenant correctement annoncés comme groupes (développer/réduire) par les lecteurs d’écran.
  • Les contrôles DataGridCell sont maintenant correctement annoncés comme cellules de grille de données (version localisée) par les lecteurs d’écran.
  • Les lecteurs d’écran annoncent désormais le nom d’un ComboBox modifiable.
  • Les lecteurs d’écran n’annoncent plus « aucun élément dans la vue » pour décrire les contrôles PasswordBox.

Prise en charge des régions dynamiques

Les lecteurs d’écran, tels que le Narrateur, aident les utilisateurs à se familiariser avec l’interface utilisateur d’une application, généralement en décrivant l’élément d’interface utilisateur qui a actuellement le focus. Toutefois, si un élément de l’interface utilisateur n’a pas le focus et qu’il change à l’écran, l’utilisateur peut passer à côté d’informations importantes s’il n’en est pas informé. Les régions dynamiques sont conçues pour résoudre ce problème. Un développeur peut les utiliser pour informer le lecteur d’écran ou tout autre client UI Automation qu’un changement important a été apporté à un élément d’interface utilisateur. Le lecteur d’écran peut ensuite décider comment et quand informer l’utilisateur de cette modification. La propriété LiveSetting indique également au lecteur d’écran qu’il est important d’informer l’utilisateur du changement apporté à l’interface utilisateur.

Suggestion

Accepter ou refuser ces modifications

L’application doit s’exécuter sur .NET Framework 4.7.1 ou ultérieur pour tirer parti de ces changements. Pour que l’application bénéficie de ces changements, procédez de l’une des manières suivantes :

  • Ciblez .NET Framework 4.7.1. Il s’agit de l’approche recommandée. Ces changements d’accessibilité sont activés par défaut sur les applications WPF qui ciblent .NET Framework 4.7.1 ou ultérieur.

  • Refusez les comportements d’accessibilité hérités en ajoutant le commutateur AppContext suivant à la section <runtime> du fichier de configuration de l’application et en lui affectant la valeur false, comme dans l’exemple suivant.

    <?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>
    

Si votre application cible .NET Framework 4.7.1 ou une version ultérieure et que vous souhaitez conserver le comportement d’accessibilité hérité, choisissez d’utiliser les fonctionnalités d’accessibilité héritées en affectant explicitement à ce commutateur AppContext la valeur true. Pour une vue d’ensemble d’UI Automation, consultez Vue d’ensemble d’UI Automation.

Nom Valeur
Étendue Majeure
Version 4.7.1
Type Reciblage

API affectées

Ajout de la propriété publique SelectionTextBrush à la sélection sans ornement pour TextBox/PasswordBox

Détails

Dans les applications WPF utilisant la sélection de texte sans ornement pour TextBox et PasswordBox, les développeurs peuvent maintenant définir la propriété SelectionTextBrush récemment ajoutée afin de modifier le rendu du texte sélectionné. Par défaut, cette couleur change avec HighlightTextBrushKey. Si la sélection de texte sans ornement n’est pas activée, cette propriété ne fait rien.

Suggestion

Une fois que la sélection de texte sans ornement est activée, vous pouvez utiliser la propriété PasswordBox.SelectionTextBrush et SelectionTextBrush pour changer l’apparence du texte sélectionné. Pour ce faire, vous pouvez utiliser XAML :

<TextBox SelectionBrush="Red" SelectionTextBrush="White"  SelectionOpacity="0.5"
Foreground="Blue" CaretBrush="Blue">
This is some text.
</TextBox>
Nom Valeur
Étendue Majeure
Version 4.8
Type Reciblage

API affectées

HwndHost redimensionne correctement le HWND enfant lors de changements DPI

Détails

Dans .NET Framework 4.7.2 et versions antérieures, quand WPF était exécuté en mode Par moniteur, les contrôles hébergés dans HwndHost n’étaient pas dimensionnés correctement après des changements DPI, par exemple quand vous passiez des applications d’un écran à un autre. Ce correctif garantit que les contrôles hébergés sont dimensionnés correctement.

Suggestion

Pour que l’application tire parti de ces changements, elle doit s’exécuter sur .NET Framework 4.7.2 ou ultérieur et adhérer à ce comportement en définissant le commutateur AppContext suivant de la section <runtime> du fichier de configuration d’application sur false, comme le montre l’exemple suivant.

<?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>
Nom Valeur
Étendue Majeure
Version 4.8
Type Reciblage

Windows Workflow Foundation (WF)

Améliorations de l’accessibilité dans le Concepteur de flux de travail Windows Workflow Foundation (WF)

Détails

Le Concepteur de flux de travail Windows Workflow Foundation (WF) améliore son fonctionnement avec les technologies d’accessibilité. Ces améliorations incluent notamment les changements suivants :

  • L’ordre de tabulation est modifié pour passer de gauche à droite et de haut en bas dans certains contrôles :
  • La fenêtre d’initialisation de la corrélation pour définir les données de corrélation pour l’activité InitializeCorrelation
  • La fenêtre de définition du contenu pour les activités Receive, Send, SendReply et ReceiveReply
  • D’autres fonctions sont disponibles par le biais du clavier :
  • Quand vous modifiez les propriétés d’une activité, les groupes de propriétés peuvent être réduits à l’aide du clavier la première fois qu’ils ont le focus.
  • Des icônes d’avertissement sont désormais accessibles à l’aide du clavier.
  • Le bouton Plus de propriétés de la fenêtre Propriétés est désormais accessible à l’aide du clavier.
  • Les utilisateurs du clavier peuvent désormais accéder aux éléments d’en-tête dans les volets Arguments et Variables du Concepteur de flux de travail.
  • Une meilleure visibilité des éléments ayant le focus, par exemple dans les cas suivants :
  • Ajout de lignes dans des grilles de données utilisées par le Concepteur de flux de travail et les concepteurs d’activités.
  • Déplacement par tabulation dans les champs des activités ReceiveReply et SendReply.
  • Définition de valeurs par défaut pour les variables ou les arguments
  • Les lecteurs d’écran peuvent désormais reconnaître correctement :
  • Les points d’arrêt définis dans le Concepteur de flux de travail.
  • Les activités FlowSwitch<T>, FlowDecision et CorrelationScope.
  • Le contenu de l’activité Receive.
  • Le type cible pour l’activité InvokeMethod.
  • La zone de liste déroulante Exception et la section Finally de l’activité TryCatch.
  • La zone de liste déroulante Type de message, le séparateur dans la fenêtre Ajouter des initialiseurs de corrélation, la fenêtre de définition du contenu et la fenêtre Définition de CorrelatesOn dans les activités de messagerie (Receive, Send, SendReply et ReceiveReply).
  • Transitions d’ordinateur d’état et destination des transitions.
  • Annotations et connecteurs sur les activités FlowDecision.
  • Les menus contextuels (accessibles en cliquant avec le bouton droit) pour les activités.
  • Les éditeurs de valeurs de propriété, le bouton Effacer la recherche, les boutons a catégorie par et boutons de tri Par catégorie et Ordre alphabétique et la boîte de dialogue Éditeur d’expressions dans la grille des propriétés.
  • Le pourcentage de zoom dans le Concepteur de flux de travail.
  • Le séparateur dans les activités Parallel et Pick.
  • L’activité InvokeDelegate.
  • La fenêtre Sélectionner les types pour les activités de dictionnaire (Microsoft.Activities.AddToDictionary<TKey,TValue>, Microsoft.Activities.RemoveFromDictionary<TKey,TValue>, etc.).
  • La fenêtre Rechercher et sélectionner un type .NET.
  • Les barres de navigation dans le Concepteur de flux de travail.
  • Les utilisateurs qui choisissent des thèmes à contraste élevé verront de nombreuses améliorations de la visibilité du Concepteur de flux de travail et de ses contrôles, comme de meilleurs rapports de contraste entre les éléments et des zones de sélection plus visibles utilisées pour les éléments ayant le focus.

Suggestion

Si vous avez une application avec un Concepteur de flux de travail réhébergé, effectuez l’une des actions suivantes pour qu’elle bénéficie de ces changements :

  • Recompilez votre application pour cibler .NET Framework 4.7.1. Ces changements de l’accessibilité sont activés par défaut.
  • Si votre application cible .NET Framework 4.7 ou une version antérieure mais qu’elle s’exécute sur .NET Framework 4.7.1, vous pouvez refuser ces comportements d’accessibilité hérités en ajoutant le commutateur AppContext suivant à la section <runtime> du fichier app.config et en lui affectant la valeur false, comme indiqué dans l’exemple suivant.
<?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>

Si votre application cible .NET Framework 4.7.1 ou une version ultérieure et que vous souhaitez conserver le comportement d’accessibilité hérité, choisissez d’utiliser les fonctionnalités d’accessibilité héritées en affectant explicitement à ce commutateur AppContext la valeur true.

Nom Valeur
Étendue Secondaire
Version 4.7.1
Type Reciblage

Les sommes de contrôle XAML de workflow pour les symboles passent de SHA1 à SHA256

Détails

Pour prendre en charge le débogage avec Visual Studio, l’exécution du workflow génère une somme de contrôle pour un fichier XAML de workflow à l’aide d’un algorithme de hachage. Dans .NET Framework 4.6.2 et les versions antérieures, le hachage de somme de contrôle de flux de travail utilisait l’algorithme MD5, ce qui entraînait des problèmes sur les systèmes compatibles FIPS. À compter de .NET Framework 4.7, l’algorithme par défaut est passé à SHA1. À compter de .NET Framework 4.8, l’algorithme par défaut est passé à SHA256.

Suggestion

Si votre code ne parvient pas à charger des instances de workflow ou ne trouve pas les symboles appropriés en raison d’un échec de la somme de contrôle, essayez de définir le commutateur AppContext « Switch.System.Activities.UseSHA1HashForDebuggerSymbols » sur true. Dans le code :

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

Ou dans la configuration :

<configuration>
  <runtime>
    <AppContextSwitchOverrides value="Switch.System.Activities.UseSHA1HashForDebuggerSymbols=true" />
  </runtime>
</configuration>
Nom Valeur
Étendue Secondaire
Version 4.8
Type Reciblage

La définition XOML du workflow et les clés de cache SqlTrackingService sont passées de MD5 à SHA256

Détails

L’exécution du workflow conserve un cache des définitions de workflow définies en XOML. SqlTrackingService conserve également un cache qui est indexé par des chaînes. Ces caches sont indexés par les valeurs qui incluent la valeur de hachage de la somme de contrôle. Dans .NET Framework 4.7.2 et versions antérieures, le hachage de somme de contrôle utilisait l’algorithme MD5, ce qui entraînait des problèmes sur les systèmes compatibles FIPS. À partir de .NET Framework 4.8, l’algorithme SHA256 est utilisé. Normalement, ce changement ne doit poser aucun problème de compatibilité car les valeurs sont recalculées à chaque lancement de l’exécution du workflow et à chaque démarrage de SqlTrackingService. Toutefois, nous vous proposons des astuces pour permettre aux clients de revenir à l’algorithme de hachage existant, si nécessaire.

Suggestion

Si ce changement présente un problème lors de l’exécution de workflows, essayez de définir un commutateur AppContext ou les deux :

  • « Switch.System.Workflow.Runtime.UseLegacyHashForWorkflowDefinitionDispenserCacheKey » sur true.
  • « Switch.System.Workflow.Runtime.UseLegacyHashForSqlTrackingCacheKey » sur true. Dans le code :
System.AppContext.SetSwitch("Switch.System.Workflow.Runtime.UseLegacyHashForWorkflowDefinitionDispenserCacheKey", true);
System.AppContext.SetSwitch("Switch.System.Workflow.Runtime.UseLegacyHashForSqlTrackingCacheKey", true);

Ou dans le fichier de configuration (cette opération doit avoir lieu dans le fichier de configuration de l’application qui crée l’objet WorkflowRuntime) :

<configuration>
<runtime>
<AppContextSwitchOverrides value="Switch.System.Workflow.Runtime.UseLegacyHashForWorkflowDefinitionDispenserCacheKey=true" />
<AppContextSwitchOverrides value="Switch.System.Workflow.Runtime.UseLegacyHashForSqlTrackingCacheKeytrue" />
</runtime>
</configuration>
Nom Valeur
Étendue Secondaire
Version 4.8
Type Reciblage

Sommes de contrôle du fichier XOML de workflow passées de MD5 à SHA256

Détails

Pour prendre en charge le débogage des workflows XOML avec Visual Studio, lorsque des projets de workflow contenant des fichiers XOML sont générés, une somme de contrôle du contenu du fichier XOML est incluse dans le code généré comme une valeur WorkflowMarkupSourceAttribute.MD5Digest. Dans .NET Framework 4.7.2 et versions antérieures, le hachage de somme de contrôle utilisait l’algorithme MD5, ce qui entraînait des problèmes sur les systèmes compatibles FIPS. À compter de .NET Framework 4.8, l’algorithme utilisé est SHA256. Pour des raisons de compatibilité avec le WorkflowMarkupSourceAttribute.MD5Digest, seuls les 16 premiers octets de la somme de contrôle générée sont utilisés. Cela peut entraîner des problèmes pendant le débogage. Vous aurez peut-être à regénérer votre projet.

Suggestion

Si la regénération de votre projet ne résout pas le problème, essayez en définissant le commutateur AppContext « Switch.System.Workflow.ComponentModel.UseLegacyHashForXomlFileChecksum » sur true. Dans le code, cela donne :

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

Dans un fichier de configuration (qui doit être MSBuild.exe.config pour le MSBuild.exe que vous utilisez), cela donne :

<configuration>
<runtime>
<AppContextSwitchOverrides value="Switch.System.Workflow.ComponentModel.UseLegacyHashForXomlFileChecksum=true" />
</runtime>
</configuration>
Nom Valeur
Étendue Secondaire
Version 4.8
Type Reciblage

.NET Framework 4.8.1

Aucun problème de compatibilité des applications n’a été introduit dans .NET Framework 4.8.1.