Zmiany w czasie wykonywania migracji do programu .NET Framework 4.8.x
W tym artykule wymieniono problemy ze zgodnością aplikacji wprowadzone w programie .NET Framework 4.8 i 4.8.1.
.NET Framework 4.8
ASP.NET
ASP.NET Poprawa obsługi atrybutów InputAttributes i LabelAttributes dla kontrolki CheckBox WebForms
Szczegóły
W przypadku aplikacji przeznaczonych dla platformy .NET Framework 4.7.2 i starszych wersji CheckBox.InputAttributes i CheckBox.LabelAttributes, które są programowo dodawane do kontrolki WebForms CheckBox, zostaną utracone po postbacku. W przypadku aplikacji przeznaczonych dla .NET Framework w wersji 4.8 lub nowszej, dane są zachowywane po wykonaniu postback.
Sugestia
Aby uzyskać poprawne zachowanie podczas zwrotnego przesyłania atrybutów, ustaw targetFrameworkVersion
na 4.8 lub nowszą. Na przykład:
<configuration>
<system.web>
<httpRuntime targetFramework="4.8"/>
</system.web>
</configuration>
Ustawienie go niżej lub nieustawienie w ogóle zachowuje stare, nieprawidłowe działanie.
Nazwa | Wartość |
---|---|
Zakres | Nieznany |
Wersja | 4.8 |
Typ | Czas wykonania |
Interfejsy API, których dotyczy problem
ASP.NET Niepoprawna obsługa wielu części może spowodować utratę danych formularza.
Szczegóły
W aplikacjach przeznaczonych dla programu .NET Framework 4.7.2 i starszych wersji ASP.NET mogą niepoprawnie analizować wartości granic wieloczęściowych, co powoduje niedostępność danych formularza podczas wykonywania żądania. Aplikacje przeznaczone dla programu .NET Framework w wersji 4.8 lub nowszej prawidłowo analizują dane wieloczęściowe, więc wartości formularzy są dostępne podczas wykonywania żądania.
Sugestia
Począwszy od aplikacji działających na platformie .NET Framework 4.8, podczas kierowania na .NET Framework 4.8 lub nowszy przy użyciu elementu targetFrameworkVersion
, domyślne zachowanie zmienia się na usuwanie ograniczników. W przypadku określania wartości docelowych dla poprzednich wersji platformy lub nieużywania targetFrameworkVersion
, końcowe ograniczniki niektórych wartości są nadal zwracane.
To zachowanie można również jawnie kontrolować za pomocą appSetting
:
<configuration>
<appSettings>
...
<add key="aspnet:UseLegacyMultiValueHeaderHandling" value="true"/>
...
</appSettings>
</configuration>
Nazwa | Wartość |
---|---|
Zakres | Nieznany |
Wersja | 4.8 |
Typ | Czas wykonywania |
Interfejsy API, których dotyczy problem
ASP.NET ValidationContext.MemberName nie ma wartości NULL w przypadku używania niestandardowych atrybutów DataAnnotations.ValidationAttribute
Szczegóły
W programie .NET Framework 4.7.2 i starszych wersjach w przypadku używania niestandardowej System.ComponentModel.DataAnnotations.ValidationAttributewłaściwość ValidationContext.MemberName zwraca wartość null
. W wersji .NET Framework 4.8 przed aktualizacją z października 2019 r. zwraca nazwę członka. Począwszy od .NET Framework (wersja zapoznawcza zbiorczej aktualizacji jakości) z października 2019 r. dla .NET Framework 4.8, domyślnie zwraca null
, ale możesz zmienić ustawienie, aby zwrócić nazwę elementu członkowskiego.
Sugestia
Dodaj następujące ustawienie do pliku web.config, aby właściwość mogła zwracać nazwę elementu członkowskiego w .NET Framework w wersji zapoznawczej pakietu zbiorczego jakości z października 2019 r. dla programu .NET Framework 4.8 i nowszych wersji:
<configuration>
<appSettings>
...
<add key="aspnet:GetValidationMemberName" value="true"/>
...
</appSettings>
</configuration>
W programie .NET Framework 4.8 w wersji wcześniejszej niż aktualizacja z października 2019 r. dodanie go do pliku web.config powoduje przywrócenie poprzedniego zachowania, a właściwość zwraca wartość null
.
Nazwa | Wartość |
---|---|
Zakres | Nieznany |
Wersja | 4.8 |
Typ | Czas wykonania |
Interfejsy API, których dotyczy problem
Rdzeń
Program .NET COM pomyślnie marshaluje parametry ByRef SafeArray dla zdarzeń
Szczegóły
W programie .NET Framework 4.7.2 i starszych wersjach parametr ByRef SafeArray w zdarzeniu COM nie może przeprowadzić marshalingu z powrotem do kodu natywnego. Dzięki tej zmianie SafeArray jest teraz pomyślnie przekazywana.
- [ x ] Dziwaczne
Sugestia
Jeśli przekazywanie parametrów typu BezpiecznaTablica jako ByRef w zdarzeniach COM zakłóca wykonanie, możesz wyłączyć ten kod, dodając następujący przełącznik konfiguracji do pliku konfiguracyjnego aplikacji:
<appSettings>
<add key="Switch.System.Runtime.InteropServices.DoNotMarshalOutByrefSafeArrayOnInvoke" value="true" />
</appSettings>
Nazwa | Wartość |
---|---|
Zakres | Małoletni |
Wersja | 4.8 |
Typ | czas wykonania |
Interfejsy API, których dotyczy problem
Nie można wykryć za pośrednictwem analizy interfejsu API.
Interop .NET będzie teraz przeprowadzać wywołanie QueryInterface dla IAgileObject (interfejs WinRT)
Szczegóły
W przypadku korzystania ze zdarzenia WinRT z delegatem platformy .NET, system Windows będzie wyszukiwał IAgileObject, począwszy od wersji .NET Framework 4.8. W poprzednich wersjach programu .NET Framework środowisko uruchomieniowe nie powiodło się w operacji QI i nie można było zasubskrybować zdarzenia.
- [ x ] Nietypowe
Sugestia
Jeśli włączenie QI dla IAgileObject przerywa wykonywanie, możesz zablokować ten kod, ustawiając następującą konfigurację.
Metoda 1. Zmienna środowiskowa
Ustaw następującą zmienną środowiskową: COMPLUS_DisableCCWSupportIAgileObject=1
Ta metoda ma wpływ na każde środowisko, które dziedziczy tę zmienną środowiskową. Może to być tylko jedna sesja konsoli lub może mieć wpływ na całą maszynę, jeśli ustawisz zmienną środowiskową globalnie. Nazwa zmiennej środowiskowej nie uwzględnia wielkości liter.
Metoda 2. Rejestr
Korzystając z Edytora rejestru (regedit.exe), znajdź jeden z następujących podklucza:
- HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft.NETFramework
- HKEY_CURRENT_USER\SOFTWARE\Microsoft.NETFramework
Następnie dodaj następujący wpis:
Nazwa: DisableCCWSupportIAgileObject Typ: DWORD wartość (32-bitowa) (znana również jako REG_DWORD) Dane: 1
Możesz użyć narzędzia windows REG.EXE, aby dodać tę wartość ze środowiska wiersza polecenia lub skryptów. Na przykład:
reg add HKLM\SOFTWARE\Microsoft.NETFramework /v DisableCCWSupportIAgileObject /t REG_DWORD /d 1
W tym przypadku HKLM
jest używana zamiast HKEY_LOCAL_MACHINE
. Użyj reg add /?
, aby wyświetlić pomoc dotyczącą tej składni. Nazwa wartości rejestru nie uwzględnia wielkości liter.
Nazwa | Wartość |
---|---|
Zakres | Krawędź |
Wersja | 4.8 |
Typ | środowisko uruchomieniowe |
Interfejsy API, których dotyczy problem
Nie można wykryć za pośrednictwem analizy interfejsu API.
Windows Communication Foundation (WCF)
Zmiana trybu wysokiego kontrastu w polu wyboru svcTraceViewer
Szczegóły
W narzędziu Microsoft Service Trace Viewerkontrolki ComboBox nie były wyświetlane w prawidłowym kolorze w niektórych motywach o wysokim kontraście. Problem został rozwiązany w programie .NET Framework 4.7.2. Jednak ze względu na wymagania dotyczące zgodności z poprzednimi wersjami zestawu .NET Framework SDK poprawka nie była domyślnie widoczna dla klientów. Wersja .NET 4.8 uwidacznia tę zmianę przez dodanie następujących przełączników konfiguracji AppContext do pliku svcTraceViewer.exe.config:
<AppContextSwitchOverrides value="Switch.UseLegacyAccessibilityFeatures=false;Switch.UseLegacyAccessibilityFeatures.2=false" />
Sugestia
Jeśli nie chcesz mieć zmiany zachowania o dużym kontraście, możesz ją wyłączyć, usuwając następującą sekcję z pliku svcTraceViewer.exe.config:
<AppContextSwitchOverrides value="Switch.UseLegacyAccessibilityFeatures=false;Switch.UseLegacyAccessibilityFeatures.2=false" />
Nazwa | Wartość |
---|---|
Zakres | Edge |
Wersja | 4.8 |
Typ | Czas wykonania |
Interfejsy API, których dotyczy problem
Nie można wykryć za pośrednictwem analizy interfejsu API.
Windows Presentation Foundation (WPF)
Ulepszenie wiązania danych dla kolekcji KeyedCollection
Szczegóły
Naprawiono Binding nieprawidłowe użycie indeksatora IList, gdy obiekt źródłowy deklaruje niestandardowy indeksator z tym samym podpisem (na przykład KeyedCollection<int,TItem>
).
Sugestia
Aby aplikacja przeznaczona dla starszej wersji korzystała z tej zmiany, musi działać w programie .NET Framework 4.8 lub nowszym i musi wyrazić zgodę na zmianę, dodając następujący przełącznik AppContext do sekcji <runtime>
pliku konfiguracji aplikacji i ustawiając ją na 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>
Nazwa | Wartość |
---|---|
Zakres | Major |
Wersja | 4.8 |
Typ | Czas wykonywania |
Interfejsy API, których dotyczy problem
Nie można wykryć za pośrednictwem analizy interfejsu API.
Rozwiązano problem polegający na tym, że ListBox przestaje odpowiadać, jeśli zawiera powielone typy wartości.
Szczegóły
Rozwiązano problem polegający na tym, że wirtualizacja ItemsControl mogła przestać odpowiadać podczas przewijania, gdy kolekcja Items
zawiera zduplikowane obiekty typu wartość.
Nazwa | Wartość |
---|---|
Zakres | Major |
Wersja | 4.8 |
Typ | Czas wykonywania |
Interfejsy API, których dotyczy problem
Nie można wykryć za pośrednictwem analizy interfejsu API.
Ulepszenia algorytmu przydzielania spacji w siatce wierszy gwiazdek
Szczegóły
Usunięto usterkę w algorytmie do przydzielania rozmiarów do) w Grid wprowadzonym w programie .NET Framework 4.7. W niektórych przypadkach, takich jak siatka z Height="Auto"
zawierającymi puste wiersze, wiersze zostały rozmieszczone w niewłaściwej pozycji, prawdopodobnie poza siatką.
Sugestia
Aby aplikacja korzystała z tych zmian, musi działać w programie .NET Framework 4.8 lub nowszym.
Nazwa | Wartość |
---|---|
Zakres | Major |
Wersja | 4.8 |
Typ | Czas wykonywania |
Interfejsy API, których dotyczy problem
Nie można wykryć za pośrednictwem analizy interfejsu API.
Ulepszenie nawigacji klawiaturą w ListBox z hiperłączami
Szczegóły
Naprawiono niepoprawny wynik naciśnięcia strzałki, gdy fokus znajduje się na hiperlinku w elemencie, który nie jest wybranym elementem elementu nadrzędnego ItemsControl.
Nazwa | Wartość |
---|---|
Zakres | Główny |
Wersja | 4.8 |
Typ | Środowisko uruchomieniowe |
Interfejsy API, których dotyczy problem
Nie można wykryć za pośrednictwem analizy interfejsu API.
Poprawa wydajności w drzewie automatyzacji dla grupowania elementów sterujących
Szczegóły
Zwiększono wydajność ponownego kompilowania drzewa automatyzacji ItemsControl, takiego jak ListBox lub DataGrid, w którym włączono grupowanie.
Nazwa | Wartość |
---|---|
Zakres | Major |
Wersja | 4.8 |
Typ | Środowisko wykonawcze |
Interfejsy API, których dotyczy problem
Nie można wykryć za pośrednictwem analizy interfejsu API.
.NET Framework 4.8.1
W programie .NET Framework 4.8.1 nie wprowadzono żadnych problemów ze zgodnością aplikacji.