Udostępnij za pośrednictwem


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=&quot;Auto&quot; 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.

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.