Sdílet prostřednictvím


Změny modulu runtime pro migraci na rozhraní .NET Framework 4.8.x

Tento článek obsahuje seznam problémů s kompatibilitou aplikací, které byly zavedeny v rozhraní .NET Framework 4.8 a 4.8.1.

.NET Framework 4.8

ASP.NET

ASP.NET Oprava zpracování inputAttributes a LabelAttributes pro ovládací prvek WebForms CheckBox

Detaily

U aplikací, které cílí na rozhraní .NET Framework 4.7.2 a starší verze a CheckBox.InputAttributesCheckBox.LabelAttributes které jsou programově přidány do ovládacího prvku WebForms CheckBox , se po zpětném odeslání ztratí. U aplikací, které cílí na rozhraní .NET Framework 4.8 nebo novější verze, se zachovají po zpětném odeslání.

Návrh

Správné chování pro obnovení atributů v postbacku nastavte targetFrameworkVersion na hodnotu 4,8 nebo vyšší. Příklad:

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

Nastavení na nižší nebo vůbec nezachová staré nesprávné chování.

Jméno Hodnota
Obor Neznámý
Verze 4.8
Typ Šablona běhového prostředí

Ovlivněná rozhraní API

ASP.NET nesprávné zpracování více částí může vést ke ztrátě dat formuláře.

Detaily

V aplikacích, které cílí na rozhraní .NET Framework 4.7.2 a starší verze, ASP.NET mohou nesprávně parsovat hodnoty hranic s více částmi, což vede k nedostupnosti dat formuláře během provádění požadavku. Aplikace, které cílí na rozhraní .NET Framework 4.8 nebo novější verze, správně parsují data s více částmi, takže hodnoty formulářů jsou k dispozici během provádění požadavku.

Návrh

Počínaje aplikacemi spuštěnými v rozhraní .NET Framework 4.8 při cílení na rozhraní .NET Framework 4.8 nebo novější pomocí elementu targetFrameworkVersion se výchozí chování změní na oddělovače pruhů. Při cílení na předchozí verze architektury nebo použití targetFrameworkVersion, koncové oddělovače pro některé hodnoty jsou stále vráceny.

Toto chování lze také explicitně řídit pomocí appSetting:

<configuration>
<appSettings>
...
<add key="aspnet:UseLegacyMultiValueHeaderHandling"  value="true"/>
...
</appSettings>
</configuration>
Jméno Hodnota
Obor Neznámý
Verze 4.8
Typ Šablona běhového prostředí

Ovlivněná rozhraní API

ASP.NET ValidationContext.MemberName nemá hodnotu NULL při použití vlastní hodnoty DataAnnotations.ValidationAttribute

Detaily

V rozhraní .NET Framework 4.7.2 a starších verzích při použití vlastního System.ComponentModel.DataAnnotations.ValidationAttributerozhraní ValidationContext.MemberName vrátí nullvlastnost . V rozhraní .NET Framework 4.8 verze před aktualizací z října 2019 vrátí název člena. Počínaje rozhraním .NET Framework říjen 2019 ve verzi Preview kumulativní aktualizace pro zvýšení kvality pro .NET Framework 4.8 se vrátí null ve výchozím nastavení, ale místo toho se můžete přihlásit k vrácení názvu člena.

Návrh

Do souboru web.config pro vlastnost přidejte následující nastavení, které vrátí název člena v rozhraní .NET Framework říjen 2019 Preview kumulativní aktualizace pro zvýšení kvality pro .NET Framework 4.8 a novější verze:

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

V rozhraní .NET Framework 4.8 verze před aktualizací z října 2019 toto přidání do souboru web.config obnoví předchozí chování a vlastnost vrátí null.

Jméno Hodnota
Obor Neznámý
Verze 4.8
Typ Šablona běhového prostředí

Ovlivněná rozhraní API

Základ

.NET COM úspěšně zařazuje ByRef Sejf Array parametry u událostí

Detaily

V rozhraní .NET Framework 4.7.2 a starších verzích by parametr ByRef Sejf Array v události COM se nepodařilo zařadit zpět do nativního kódu. Při této změně je nyní Sejf Array úspěšně zařazován.

  • [ x ] Quirked

Návrh

Pokud správně zařazování byRef Sejf Array parametry na událostech modelu COM přeruší provádění, můžete tento kód zakázat přidáním následujícího přepínače konfigurace do konfigurace aplikace:

<appSettings>
  <add key="Switch.System.Runtime.InteropServices.DoNotMarshalOutByrefSafeArrayOnInvoke" value="true" />
</appSettings>
Jméno Hodnota
Obor Vedlejší
Verze 4.8
Typ Šablona běhového prostředí

Ovlivněná rozhraní API

Nedetekovatelné prostřednictvím analýzy rozhraní API.

Interop .NET teď bude QueryInterface pro IAgileObject (rozhraní WinRT)

Detaily

Při použití události WinRT s delegátem .NET bude Systém Windows QI pro IAgileObject počínaje rozhraním .NET Framework 4.8. V předchozích verzích rozhraní .NET Framework by modul runtime selhal, že QI a událost se nedá přihlásit k odběru.

  • [ x ] Quirked

Návrh

Pokud povolení QI pro IAgileObject přeruší provádění, můžete tento kód zakázat nastavením následující konfigurace.

Metoda 1: Proměnná prostředí

Nastavte následující proměnnou prostředí: COMPLUS_DisableCCWSupportIAgileObject=1

Tato metoda ovlivňuje jakékoli prostředí, které dědí tuto proměnnou prostředí. Může se jednat pouze o jednu relaci konzoly nebo může mít vliv na celý počítač, pokud nastavíte proměnnou prostředí globálně. Název proměnné prostředí nerozlišuje malá a velká písmena.

Metoda 2: Registr

Pomocí Editoru registru (regedit.exe) vyhledejte jeden z následujících podklíčů:

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

Pak přidejte následující položku:

Název: DisableCCWSupportIAgileObject Type: DWORD (32bitová) hodnota (označovaná také jako REG_DWORD) Data: 1

Tuto hodnotu můžete přidat z příkazového řádku nebo skriptovacího prostředí pomocí nástroje prostředí Windows RE G.EXE. Příklad:

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

V tomto případě HKLM se používá místo HKEY_LOCAL_MACHINE. Slouží reg add /? k zobrazení nápovědy k této syntaxi. Název hodnoty registru nerozlišuje velká a malá písmena.

Jméno Hodnota
Obor Edge
Verze 4.8
Typ Šablona běhového prostředí

Ovlivněná rozhraní API

Nedetekovatelné prostřednictvím analýzy rozhraní API.

WCF (Windows Communication Foundation)

svcTraceViewer ComboBox s vysokou kontrastní změnou

Detaily

V nástroji Microsoft Service Trace Viewer nebyly ovládací prvky ComboBox zobrazeny ve správné barvě v určitých motivech s vysokým kontrastem. Problém byl opraven v rozhraní .NET Framework 4.7.2. Vzhledem k požadavkům na zpětnou kompatibilitu sady .NET Framework SDK však nebyla oprava ve výchozím nastavení viditelná pro zákazníky. .NET 4.8 tuto změnu zobrazí přidáním následujících konfiguračních přepínačů AppContext do souboru svcTraceViewer.exe.config:

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

Návrh

Pokud nechcete, aby se změnilo chování vysokého kontrastu, můžete ho zakázat odebráním následující části ze souboru svcTraceViewer.exe.config:

<AppContextSwitchOverrides value="Switch.UseLegacyAccessibilityFeatures=false;Switch.UseLegacyAccessibilityFeatures.2=false" />
Jméno Hodnota
Obor Edge
Verze 4.8
Typ Šablona běhového prostředí

Ovlivněná rozhraní API

Nedetekovatelné prostřednictvím analýzy rozhraní API.

Windows Presentation Foundation (WPF)

Vylepšení datových vazeb pro KeyedCollection

Detaily

Opravili jsme Binding nesprávné použití indexeru IList, když zdrojový objekt deklaruje vlastní indexer se stejným podpisem (například KeyedCollection<int,TItem>).

Návrh

Aby aplikace, která cílí na starší verzi, mohla tuto změnu využívat, musí běžet na rozhraní .NET Framework 4.8 nebo novějším a musí se k této změně přihlásit přidáním následujícího přepínače AppContext do <runtime> části konfiguračního souboru aplikace a nastavením této možnosti: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>
Jméno Hodnota
Obor Hlavní verze
Verze 4.8
Typ Šablona běhového prostředí

Ovlivněná rozhraní API

Nedetekovatelné prostřednictvím analýzy rozhraní API.

Opravili jsme problém, kdy ListBox přestal reagovat, pokud obsahuje duplicitní typy hodnot.

Detaily

Opravili jsme problém, kdy virtualizace ItemsControl během posouvání přestala reagovat, když její Items kolekce obsahuje duplicitní objekty typu hodnota.

Jméno Hodnota
Obor Hlavní verze
Verze 4.8
Typ Šablona běhového prostředí

Ovlivněná rozhraní API

Nedetekovatelné prostřednictvím analýzy rozhraní API.

Vylepšení algoritmu přidělování mezer mezi řádky hvězdicové mřížky

Detaily

Opravili jsme chybu v algoritmu pro přidělování velikostí) v Grid rozhraní .NET Framework 4.7. V některých případech, například mřížka s prázdnými Height=&quot;Auto&quot; řádky, byly řádky uspořádány na nesprávné pozici, pravděpodobně mimo mřížku úplně.

Návrh

Aby aplikace mohla tyto změny využívat, musí běžet v rozhraní .NET Framework 4.8 nebo novějším.

Jméno Hodnota
Obor Hlavní verze
Verze 4.8
Typ Šablona běhového prostředí

Ovlivněná rozhraní API

Nedetekovatelné prostřednictvím analýzy rozhraní API.

Detaily

Opravili jsme nesprávný výsledek stisknutí klávesy se šipkou, když je fokus na hypertextovém odkazu v položce, která není vybranou položkou nadřazené ItemsControlpoložky.

Jméno Hodnota
Obor Hlavní verze
Verze 4.8
Typ Šablona běhového prostředí

Ovlivněná rozhraní API

Nedetekovatelné prostřednictvím analýzy rozhraní API.

Vylepšení výkonu ve stromu Automation pro seskupení ItemsControls

Detaily

Vylepšili jsme výkon opětovného sestavení stromu automatizace objektu ItemsControl, například ListBox nebo DataGrid, ve kterém je povolené seskupení.

Jméno Hodnota
Obor Hlavní verze
Verze 4.8
Typ Šablona běhového prostředí

Ovlivněná rozhraní API

Nedetekovatelné prostřednictvím analýzy rozhraní API.

.NET Framework 4.8.1

V rozhraní .NET Framework 4.8.1 nebyly zavedeny žádné problémy s kompatibilitou aplikací.