Changements de runtime 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
ASP.NET
Correctif ASP.NET sur la gestion de InputAttributes et LabelAttributes du contrôle WebForms CheckBox
Détails
Pour les applications qui ciblent .NET Framework 4.7.2 et versions antérieures, CheckBox.InputAttributes et CheckBox.LabelAttributes qui sont ajoutés programmatiquement à un contrôle CheckBox WebForms sont perdus après la publication (postback). Pour les applications qui ciblent .NET Framework 4.8 ou versions ultérieures, ils sont conservés après la publication (postback).
Suggestion
Pour obtenir le bon comportement de restauration des attributs lors de la publication (postback), définissez targetFrameworkVersion
sur 4.8 ou ultérieur. Par exemple :
<configuration>
<system.web>
<httpRuntime targetFramework="4.8"/>
</system.web>
</configuration>
La définir avec une version antérieure ou ne pas la définir du tout revient à conserver l’ancien comportement incorrect.
Nom | Valeur |
---|---|
Étendue | Unknown |
Version | 4.8 |
Type | Runtime |
API affectées
La mauvaise gestion multipartite d’ASP.NET peut entraîner la perte de données de formulaire.
Détails
Dans les applications qui ciblent .NET Framework 4.7.2 et versions antérieures, ASP.NET risque de mal analyser les valeurs limites multipartites, ce qui entraîne l’indisponibilité de données de formulaire pendant l’exécution de la requête. Les applications qui ciblent .NET Framework 4.8 ou versions ultérieures analysent correctement les données multipartites pour que les valeurs de formulaire soient disponibles lors de l’exécution de la requête.
Suggestion
À compter des applications qui s’exécutent sur .NET Framework 4.8, quand vous ciblez .NET Framework 4.8 ou ultérieur à l’aide de l’élément targetFrameworkVersion
, le comportement par défaut change pour supprimer les délimiteurs. Lorsque vous ciblez des versions de Framework précédentes ou n’utilisez pas targetFrameworkVersion
, les délimiteurs de fin pour certaines valeurs sont toujours retournés.
Ce comportement peut également être contrôlé explicitement avec un appSetting
:
<configuration>
<appSettings>
...
<add key="aspnet:UseLegacyMultiValueHeaderHandling" value="true"/>
...
</appSettings>
</configuration>
Nom | Valeur |
---|---|
Étendue | Unknown |
Version | 4.8 |
Type | Runtime |
API affectées
ASP.NET ValidationContext.MemberName n’est pas NULL lors de l’utilisation d’un DataAnnotations.ValidationAttribute personnalisé
Détails
Dans .NET Framework 4.7.2 et versions antérieures, quand vous utilisez un System.ComponentModel.DataAnnotations.ValidationAttribute personnalisé, la propriété ValidationContext.MemberName retourne null
. Dans les versions de .NET Framework 4.8 antérieures à la mise à jour d’octobre 2019, elle retourne le nom du membre. À compter de .NET Framework October 2019 Preview of Quality Rollup pour .NET Framework 4.8, elle retourne par défaut null
, mais vous pouvez choisir de retourner le nom du membre.
Suggestion
Ajoutez le paramètre suivant à votre fichier web.config pour que la propriété retourne le nom du membre dans .NET Framework 2019 Preview of Quality Rollup pour NET Framework 4.8 et ultérieur :
<configuration>
<appSettings>
...
<add key="aspnet:GetValidationMemberName" value="true"/>
...
</appSettings>
</configuration>
Dans les versions de .NET Framework 4.8 antérieures à la mise à jour d’octobre 2019, cet ajout à votre fichier web.config restaure le comportement précédent et la propriété retourne null
.
Nom | Valeur |
---|---|
Étendue | Unknown |
Version | 4.8 |
Type | Runtime |
API affectées
Core
.NET COM marshale avec succès les paramètres ByRef SafeArray sur les événements
Détails
Dans .NET Framework 4.7.2 et versions antérieures, le marshaling en code natif d’un paramètre ByRef SafeArray sur un événement COM était voué à l’échec. Avec cette modification, le SafeArray est maintenant correctement marshalé.
- [ x ] Quirked
Suggestion
Si les paramètres ByRef SafeArray correctement marshalés sur des événements COM interromptent l’exécution, vous pouvez désactiver ce code en ajoutant le commutateur de configuration suivant à la configuration de votre application :
<appSettings>
<add key="Switch.System.Runtime.InteropServices.DoNotMarshalOutByrefSafeArrayOnInvoke" value="true" />
</appSettings>
Nom | Valeur |
---|---|
Étendue | Secondaire |
Version | 4.8 |
Type | Runtime |
API affectées
Non détectable via l’analyse des API.
.NET Interop effectue désormais un QI pour IAgileObject (interface WinRT)
Détails
Lorsque vous utilisez un événement WinRT avec un délégué .NET, Windows effectue un QI (QueryInterface) pour IAgileObject à compter de .NET Framework 4.8. Dans les versions précédentes de .NET Framework, le runtime échouait et l’événement ne pouvait pas être inscrit.
- [ x ] Quirked
Suggestion
Si l’activation de QI pour IAgileObject arrête l’exécution, vous pouvez désactiver ce code en définissant la configuration suivante.
Méthode 1 : Variable d’environnement
Définissez la variable d’environnement suivante : COMPLUS_DisableCCWSupportIAgileObject=1
Cette méthode affecte tout environnement qui hérite de cette variable d’environnement. Elle peut affecter juste une session de console ou affecter l’ordinateur entier si vous définissez la variable d’environnement de façon globale. Le nom de la variable d’environnement ne respecte pas la casse.
Méthode 2 : Registre
À l’aide de l’Éditeur de Registre (regedit.exe), recherchez l’une des sous-clés suivantes :
- HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft.NETFramework
- HKEY_CURRENT_USER\SOFTWARE\Microsoft.NETFramework
Ajoutez ensuite l’entrée suivante :
Nom : DisableCCWSupportIAgileObject Type : Valeur DWORD (32 bits) (également appelée REG_DWORD) Données : 1
Vous pouvez utiliser l’outil Windows REG.EXE pour ajouter cette valeur à partir d’une ligne de commande ou d’un environnement de script. Par exemple :
reg add HKLM\SOFTWARE\Microsoft.NETFramework /v DisableCCWSupportIAgileObject /t REG_DWORD /d 1
Dans ce cas, HKLM
peut être utilisé à la place de HKEY_LOCAL_MACHINE
. Utilisez reg add /?
pour afficher l’aide sur cette syntaxe. Le nom de la valeur de Registre ne respecte pas la casse.
Nom | Valeur |
---|---|
Étendue | Edge |
Version | 4.8 |
Type | Runtime |
API affectées
Non détectable via l’analyse des API.
Windows Communication Foundation (WCF)
Changement du contraste élevé des contrôles ComboBox svcTraceViewer
Détails
Dans l’outil Microsoft Service Trace Viewer, les contrôles ComboBox n’étaient pas affichés dans la bonne couleur dans certains thèmes à contraste élevé. Le problème a été résolu dans .NET Framework 4.7.2. Toutefois, en raison des besoins de compatibilité descendante des kits SDK du .NET Framework, le correctif n’était pas visible pour les clients par défaut. .NET 4.8 fait apparaître ce changement en ajoutant les commutateurs de configuration AppContext suivants dans le fichier svcTraceViewer.exe.config :
<AppContextSwitchOverrides value="Switch.UseLegacyAccessibilityFeatures=false;Switch.UseLegacyAccessibilityFeatures.2=false" />
Suggestion
Si vous ne voulez pas accepter ce changement de comportement du contraste élevé, vous pouvez le désactiver en supprimant la section suivante du fichier svcTraceViewer.exe.config :
<AppContextSwitchOverrides value="Switch.UseLegacyAccessibilityFeatures=false;Switch.UseLegacyAccessibilityFeatures.2=false" />
Nom | Valeur |
---|---|
Étendue | Edge |
Version | 4.8 |
Type | Runtime |
API affectées
Non détectable via l’analyse des API.
Windows Presentation Foundation (WPF)
Amélioration de la liaison de données pour KeyedCollection
Détails
Correction d’une mauvaise utilisation de Binding par l’indexeur IList quand l’objet source déclare un indexeur personnalisé avec la même signature (par exemple, KeyedCollection<int,TItem>
).
Suggestion
Pour qu’une application ciblant une ancienne version tire parti de ce changement, elle doit s’exécuter sur .NET Framework 4.8 ou ultérieur et accepter le changement en ajoutant le commutateur AppContext suivant à la section <runtime>
du fichier de configuration d’application et en le définissant sur 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>
Nom | Valeur |
---|---|
Étendue | Majeure |
Version | 4.8 |
Type | Runtime |
API affectées
Non détectable via l’analyse des API.
Correction d’un problème où ListBox cesse de répondre s’il contient des types de valeurs en doublon
Détails
Correction d’un problème où un ItemsControl de virtualisation peut cesser de répondre pendant le défilement quand sa collection Items
contient des objets de valeurs en doublon.
Nom | Valeur |
---|---|
Étendue | Majeure |
Version | 4.8 |
Type | Runtime |
API affectées
Non détectable via l’analyse des API.
Améliorations de l’algorithme d’allocation d’espace aux lignes étoile d’une grille
Détails
Correction d’un bogue dans l’algorithme d’allocation de tailles à ) dans une Grid introduite dans .NET Framework 4.7. Dans certains cas, comme dans une grille avec Height="Auto"
contenant des lignes vides, les lignes ont été réorganisées à la mauvaise position, peut-être même en dehors de la grille.
Suggestion
L’application doit s’exécuter sur .NET Framework 4.8 ou ultérieur pour tirer parti de ces changements.
Nom | Valeur |
---|---|
Étendue | Majeure |
Version | 4.8 |
Type | Runtime |
API affectées
Non détectable via l’analyse des API.
Amélioration de la navigation au clavier dans ListBox avec des liens hypertexte
Détails
Correction du résultat d’un appui sur une touche de direction quand le focus est sur un lien hypertexte dans un élément qui n’est pas l’élément sélectionné du ItemsControl parent.
Nom | Valeur |
---|---|
Étendue | Majeure |
Version | 4.8 |
Type | Runtime |
API affectées
Non détectable via l’analyse des API.
Amélioration des performances dans l’arborescence Automation pour regrouper les ItemsControls
Détails
Performances améliorées de la reconstruction de l’arborescence Automation d’un ItemsControl, tel qu’un ListBox ou un DataGrid, dans lequel le regroupement est activé.
Nom | Valeur |
---|---|
Étendue | Majeure |
Version | 4.8 |
Type | Runtime |
API affectées
Non détectable via l’analyse des API.
.NET Framework 4.8.1
Aucun problème de compatibilité des applications n’a été introduit dans .NET Framework 4.8.1.