Runtimeänderungen für die Migration zu .NET Framework 4.8.x

In diesem Artikel werden App-Kompatibilitätsprobleme aufgeführt, die in .NET Framework 4.8 und 4.8.1 auftreten.

.NET Framework 4.8

ASP.NET

Behandlung von Korrekturen in ASP.NET bei InputAttributes und LabelAttributes für WebForms CheckBox-Steuerelemente

Details

Bei Anwendungen, die .NET Framework 4.7.2 und frühere Versionen nutzen, gehen CheckBox.InputAttributes und CheckBox.LabelAttributes, die einem WebForms CheckBox-Steuerelement programmgesteuert hinzugefügt wurden, nach einem Postback verloren. Bei Anwendungen, die .NET Framework 4.8 oder höhere Versionen verwenden, bleiben sie nach einem Postback erhalten.

Vorschlag

Wenn Sie bei der Wiederherstellung nach einem Postback das richtige Verhalten erzielen möchten, legen Sie targetFrameworkVersion auf 4.8 oder höher fest. Zum Beispiel:

<configuration>
<system.web>
<httpRuntime targetFramework="4.8"/>
</system.web>
</configuration>

Wenn Sie eine frühere oder gar keine Version angeben, wird das alte falsche Verhalten beibehalten.

name Wert
Bereich Unbekannt
Version 4.8
Typ Laufzeit

Betroffene APIs

Falsche Behandlung von mehrteiligen Elementen in ASP.NET kann zu Datenverlusten bei Formularen führen.

Details

In Anwendungen für .NET Framework 4.7.2 und früher werden mehrteilige Grenzwerte von ASP.NET möglicherweise falsch analysiert, was dazu führt, dass Formulardaten bei der Ausführung einer Anforderung nicht verfügbar sind. Anwendungen, die .NET Framework 4.8 oder höhere Versionen gezielt nutzen, analysieren mehrteilige Daten ordnungsgemäß, sodass Formularwerte bei der Ausführung von Anforderungen verfügbar sind.

Vorschlag

Ab Anwendungen, die unter .NET Framework 4.8 ausgeführt werden, ändert sich das Standardverhalten bei gezielter Nutzung von .NET Framework 4.8 oder höher durch Verwenden des targetFrameworkVersion-Elements, und Trennzeichen werden entfernt. Wenn frühere Framework-Versionen gezielt genutzt oder targetFrameworkVersion nicht verwendet wird, werden weiterhin für einige Werte nachstehende Trennzeichen zurückgegeben.

Dieses Verhalten kann auch explizit mit einer appSetting gesteuert werden:

<configuration>
<appSettings>
...
<add key="aspnet:UseLegacyMultiValueHeaderHandling"  value="true"/>
...
</appSettings>
</configuration>
Name Wert
Bereich Unbekannt
Version 4.8
Typ Laufzeit

Betroffene APIs

ASP.NET ValidationContext.MemberName ist bei Verwendung des benutzerdefinierten DataAnnotations.ValidationAttribute nicht NULL

Details

Wenn in .NET Framework 4.7.2 und früheren Versionen ein benutzerdefiniertes System.ComponentModel.DataAnnotations.ValidationAttribute verwendet wurde, wurde von der ValidationContext.MemberName-Eigenschaft null zurückgegeben. In der .NET Framework 4.8-Version vor dem Update vom Oktober 2019 wird der Membername zurückgegeben. Ab der Vorschauversion des Qualitätsrollups für .NET Framework vom Oktober 2019 für .NET Framework 4.8 wird standardmäßig null zurückgegeben, aber Sie können sich dafür entscheiden, stattdessen den Membernamen zurückzugeben.

Vorschlag

Fügen Sie die folgende Einstellung zu Ihrer Datei web.config hinzu, damit die Eigenschaft den Membernamen in der Vorschauversion des Qualitätsrollups für .NET Framework vom Oktober 2019 für .NET Framework 4.8 und spätere Versionen zurückgibt:

<configuration>
<appSettings>
...
<add key="aspnet:GetValidationMemberName"  value="true"/>
...
</appSettings>
</configuration>

In der .NET Framework 4.8-Version vor dem Update von Oktober 2019 wird durch das Hinzufügen dieser Einstellung zu Ihrer Datei web.config das vorherige Verhalten wiederhergestellt, und die Eigenschaft gibt null zurück.

Name Wert
Bereich Unbekannt
Version 4.8
Typ Laufzeit

Betroffene APIs

Core

.NET COM hat die ByRef-SafeArray-Parameter für Ereignisse erfolgreich gemarshallt.

Details

In .NET Framework 4.7.2 und früheren Version konnte der ByRef-SafeArray-Parameter für ein COM-Ereignis nicht wieder in nativen Code gemarshallt werden. Durch diese Änderung wird der SafeArray-Parameter wieder erfolgreich gemarshallt.

  • [X] Quirking

Vorschlag

Wenn ein ordnungsgemäßes Marshalling des ByRef-SafeArray-Parameters bei COM-Ereignissen die Ausführung unterbricht, können Sie diesen Code deaktivieren, indem Sie die folgende Konfigurationsoption Ihrer Anwendungskonfiguration hinzufügen:

<appSettings>
  <add key="Switch.System.Runtime.InteropServices.DoNotMarshalOutByrefSafeArrayOnInvoke" value="true" />
</appSettings>
name Wert
Bereich Gering
Version 4.8
Typ Laufzeit

Betroffene APIs

Nicht über API-Analyse erkennbar.

.NET Interop verwendet jetzt QueryInterface für IAgileObject (eine WinRT-Oberfläche)

Details

Wenn ein WinRT-Ereignis mit einem .NET-Delegaten verwendet wird, nutzt Windows ab .NET Framework 4.8 QI für IAgileObject. In früheren Versionen von .NET Framework ist bei QI zur Laufzeit ein Fehler aufgetreten, und das Ereignis konnte nicht abonniert werden.

  • [X] Quirking

Vorschlag

Wenn die QI für IAgileObject die Ausführung unterbricht, können Sie diesen Code deaktivieren, indem Sie die folgende Konfiguration festlegen.

Methode 1: Umgebungsvariable

Legen Sie die folgende Umgebungsvariable fest: COMPLUS_DisableCCWSupportIAgileObject=1

Diese Methode wirkt sich auf jede Umgebung aus, die diese Umgebungsvariable erbt. Dabei kann es sich um eine einzelne Konsolensitzung handeln oder, wenn Sie die Umgebungsvariable global festlegen, um den gesamten Computer. Beim Namen der Umgebungsvariablen muss die Groß-/Kleinschreibung nicht beachtet werden.

Methode 2: Registrierung

Suchen Sie mithilfe des Registrierungs-Editors („regedit.exe“) einen der folgenden Unterschlüssel:

  • HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft.NETFramework
  • HKEY_CURRENT_USER\SOFTWARE\Microsoft.NETFramework

Fügen Sie dann den folgenden Eintrag hinzu:

Name: DisableCCWSupportIAgileObject Type: DWORD (32-bit) value (auch als REG_DWORD bezeichnet) Data: 1

Mit dem Windows-Tool „REG.EXE“ können Sie diesen Wert über eine Befehlszeilen- oder Skriptumgebung hinzufügen. Zum Beispiel:

reg add HKLM\SOFTWARE\Microsoft.NETFramework /v DisableCCWSupportIAgileObject /t REG_DWORD /d 1

In diesem Fall wird HKLM anstelle von HKEY_LOCAL_MACHINE verwendet. Verwenden Sie reg add /?, um Hilfe zu dieser Syntax zu erhalten. Beim Namen des Registrierungswerts wird die Groß-/Kleinschreibung nicht beachtet.

name Wert
Bereich Microsoft Edge
Version 4.8
Typ Laufzeit

Betroffene APIs

Nicht über API-Analyse erkennbar.

Windows Communication Foundation (WCF)

Änderungen bei ComboBox in svcTraceViewer

Details

Bei bestimmten Designs mit hohem Kontrast wurden ComboBox-Steuerelemente im Tool Microsoft Service Trace Viewer nicht in der richtigen Farbe angezeigt. Dieses Problem wurde in .NET Framework 4.7.2 behoben. Aufgrund der für .NET Framework SDK geltenden Abwärtskompatibilitätsanforderungen war die Korrektur für Kunden nicht standardmäßig sichtbar. In .NET 4.8 zeigt sich diese Änderung nun, da der Datei „svcTraceViewer.exe.config“ die folgenden AppContext-Konfigurationsswitches hinzugefügt wurden:

<AppContextSwitchOverrides value="Switch.UseLegacyAccessibilityFeatures=false;Switch.UseLegacyAccessibilityFeatures.2=false" />

Vorschlag

Wenn Sie die Änderung im Verhalten bei hohem Kontrast nicht wünschen, können Sie diese deaktivieren, indem Sie den folgenden Abschnitt in der Konfigurationsdatei „svcTraceViewer.exe.config“ entfernen:

<AppContextSwitchOverrides value="Switch.UseLegacyAccessibilityFeatures=false;Switch.UseLegacyAccessibilityFeatures.2=false" />
name Wert
Bereich Microsoft Edge
Version 4.8
Typ Laufzeit

Betroffene APIs

Nicht über API-Analyse erkennbar.

Windows Presentation Foundation (WPF)

Verbesserung der Datenbindung für KeyedCollection

Details

Korrektur von Binding: Falsche Verwendung von IList-Indexer, wenn das Quellobjekt einen benutzerdefinierten Indexer mit derselben Signatur (z. B. KeyedCollection<int,TItem>) deklariert.

Vorschlag

Damit eine Anwendung für eine ältere Version von dieser Änderung profitiert, muss sie unter .NET Framework 4.8 oder höher ausgeführt werden. Zudem muss die Änderung aktiviert werden, indem der folgende AppContext-Switch zum <runtime>-Abschnitt der Konfigurationsdatei der Anwendung hinzugefügt und auf false festgelegt wird:

<?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>
name Wert
Bereich Hauptversion
Version 4.8
Typ Laufzeit

Betroffene APIs

Nicht über API-Analyse erkennbar.

Ein Problem wurde behoben, bei dem ListBox nicht mehr reagiert, wenn sie doppelte Werttypen enthält.

Details

Es wurde ein Problem behoben, das dazu führen kann, dass ein virtualisierendes ItemsControl beim Scrollen nicht mehr reagiert, wenn die zugehörige Items-Sammlung Objekte mit doppelter Werttypisierung enthält.

Name Wert
Bereich Hauptversion
Version 4.8
Typ Laufzeit

Betroffene APIs

Nicht über API-Analyse erkennbar.

Verbesserungen für den Algorithmus zur Speicherplatzreservierung bei Grid-Sternzeilen

Details

Es wurde ein Fehler im Algorithmus zur Größenzuordnung behoben, der in einem Grid in .NET Framework 4.7 eingeführt wurde. Wenn ein Grid dieser Art mit Height=&quot;Auto&quot; leere Zeilen enthielt, wurden Zeilen gelegentlich an der falschen Position, möglicherweise sogar außerhalb des Grids angeordnet.

Vorschlag

Damit die Anwendung von diesen Änderungen profitieren kann, muss sie unter .NET Framework 4.8 oder höher ausgeführt werden.

name Wert
Bereich Hauptversion
Version 4.8
Typ Laufzeit

Betroffene APIs

Nicht über API-Analyse erkennbar.

Details

Das Problem eines falschen Ergebnisses beim Drücken einer Pfeiltaste, wenn der Fokus auf einem Link in einem Element liegt, bei dem es sich nicht um das ausgewählte Element des übergeordneten Elements ItemsControl handelt, wurde behoben.

name Wert
Bereich Hauptversion
Version 4.8
Typ Laufzeit

Betroffene APIs

Nicht über API-Analyse erkennbar.

Verbesserte Leistung in der Automatisierungsstruktur für die Gruppierung von ItemsControls

Details

Die Leistung beim Neuerstellen der Automatisierungsstruktur einer ItemsControl, wie ListBox oder DataGrid, bei aktivierter Gruppierung wurde verbessert.

name Wert
Bereich Hauptversion
Version 4.8
Typ Laufzeit

Betroffene APIs

Nicht über API-Analyse erkennbar.

.NET Framework 4.8.1

In .NET Framework 4.8.1 wurden keine App-Kompatibilitätsprobleme eingeführt.