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 Rozwiązywanie problemów z obsługą atrybutów InputAttributes i LabelAttributes dla kontrolki CheckBox webForms

Szczegóły

W przypadku aplikacji przeznaczonych dla programu .NET Framework 4.7.2 i starszych wersji, CheckBox.InputAttributesCheckBox.LabelAttributes które są programowo dodawane do kontrolki WebForms CheckBox , zostaną utracone po zakończeniu ogłaszania zwrotnego. W przypadku aplikacji przeznaczonych dla programu .NET Framework w wersji 4.8 lub nowszej są one zachowywane po zakończeniu ogłaszania zwrotnego.

Sugestia

Aby uzyskać poprawne zachowanie podczas przywracania atrybutów po powłoce, ustaw wartość na 4.8 lub nowszą targetFrameworkVersion . Na przykład:

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

Ustawienie go w dół lub w ogóle nie powoduje zachowania starego nieprawidłowego zachowania.

Nazwa/nazwisko Wartość
Zakres Nieznane
Wersja 4.8
Typ Środowisko uruchomieniowe

Dotyczy interfejsów API

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, w przypadku określania wartości docelowej programu .NET Framework 4.8 lub nowszej targetFrameworkVersion przy użyciu elementu domyślne zachowanie zmienia się na ograniczniki. W przypadku określania wartości docelowych dla poprzednich wersji platformy lub nie używania targetFrameworkVersionograniczników końcowych niektórych wartości nadal są zwracane.

To zachowanie można również jawnie kontrolować za pomocą polecenia appSetting:

<configuration>
<appSettings>
...
<add key="aspnet:UseLegacyMultiValueHeaderHandling"  value="true"/>
...
</appSettings>
</configuration>
Nazwa/nazwisko Wartość
Zakres Nieznane
Wersja 4.8
Typ Środowisko uruchomieniowe

Dotyczy interfejsów API

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 niestandardowego System.ComponentModel.DataAnnotations.ValidationAttributeValidationContext.MemberName właściwość zwraca wartość null. W wersji .NET Framework 4.8 przed aktualizacją z października 2019 r. zwraca nazwę elementu członkowskiego. Począwszy od programu .NET Framework z października 2019 r. (wersja zapoznawcza pakietu zbiorczego jakości dla programu .NET Framework 4.8), jest on zwracany null domyślnie, ale zamiast tego możesz wyrazić zgodę na zwrócenie nazwy elementu członkowskiego.

Sugestia

Dodaj następujące ustawienie do pliku web.config dla właściwości , aby zwrócić nazwę elementu członkowskiego w programie .NET Framework październik 2019 (wersja zapoznawcza pakietu zbiorczego jakości 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 przywraca poprzednie zachowanie, a właściwość zwraca wartość null.

Nazwa/nazwisko Wartość
Zakres Nieznane
Wersja 4.8
Typ Środowisko uruchomieniowe

Dotyczy interfejsów API

Podstawowe funkcje

Program .NET COM pomyślnie marshaluje parametry ByRef Sejf Array dla zdarzeń

Szczegóły

W programie .NET Framework 4.7.2 i starszych wersjach parametr ByRef Sejf Array w zdarzeniu COM nie może przeprowadzić marshalingu z powrotem do kodu natywnego. Dzięki tej zmianie Sejf Array jest teraz pomyślnie marshalled.

  • [ x ] Dziwaczne

Sugestia

Jeśli prawidłowo marshalling ByRef Sejf Array parametrów w zdarzeniach COM przerywa wykonywanie, możesz wyłączyć ten kod, dodając następujący przełącznik konfiguracji do konfiguracji aplikacji:

<appSettings>
  <add key="Switch.System.Runtime.InteropServices.DoNotMarshalOutByrefSafeArrayOnInvoke" value="true" />
</appSettings>
Nazwa/nazwisko Wartość
Zakres Mały
Wersja 4.8
Typ Środowisko uruchomieniowe

Dotyczy interfejsów API

Nie można wykryć za pośrednictwem analizy interfejsu API.

Interop .NET będzie teraz queryInterface dla IAgileObject (interfejs WinRT)

Szczegóły

W przypadku korzystania ze zdarzenia WinRT z delegatem platformy .NET system Windows będzie qi dla obiektu IAgileObject, począwszy od programu .NET Framework 4.8. W poprzednich wersjach programu .NET Framework środowisko uruchomieniowe nie powiodło się, że qi i nie można zasubskrybować zdarzenia.

  • [ x ] Dziwaczne

Sugestia

Jeśli włączenie qi dla IAgileObject przerywa wykonywanie, możesz wyłączyć 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 Type: DWORD (32-bitowa) wartość (nazywana również 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żywany zamiast HKEY_LOCAL_MACHINE. Użyj reg add /? polecenia , aby wyświetlić pomoc dotyczącą tej składni. Nazwa wartości rejestru nie uwzględnia wielkości liter.

Nazwa/nazwisko Wartość
Zakres Edge
Wersja 4.8
Typ Środowisko uruchomieniowe

Dotyczy interfejsów API

Nie można wykryć za pośrednictwem analizy interfejsu API.

Windows Communication Foundation (WCF)

Zmiana dużego kontrastu svcTraceViewer ComboBox

Szczegóły

W narzędziu Microsoft Service Trace Viewer kontrolki 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. Program .NET 4.8 przedstawia tę zmianę, dodając następujące przełączniki konfiguracji AppContext do pliku svcTraceViewer.exe.config:

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

Sugestia

Jeśli nie chcesz mieć zmiany zachowania dużego kontrastu, możesz go wyłączyć, usuwając następującą sekcję z pliku svcTraceViewer.exe.config:

<AppContextSwitchOverrides value="Switch.UseLegacyAccessibilityFeatures=false;Switch.UseLegacyAccessibilityFeatures.2=false" />
Nazwa/nazwisko Wartość
Zakres Edge
Wersja 4.8
Typ Środowisko uruchomieniowe

Dotyczy interfejsów API

Nie można wykryć za pośrednictwem analizy interfejsu API.

Windows Presentation Foundation (WPF)

Ulepszenie powią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 <runtime> sekcji pliku konfiguracji aplikacji i ustawiając go 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/nazwisko Wartość
Zakres Główna
Wersja 4.8
Typ Środowisko uruchomieniowe

Dotyczy interfejsów API

Nie można wykryć za pośrednictwem analizy interfejsu API.

Rozwiązano problem polegający na tym, że polecenie ListBox przestaje odpowiadać, jeśli zawiera zduplikowane typy wartości

Szczegóły

Rozwiązano problem polegający na tym, że wirtualizacja ItemsControl mogła przestać odpowiadać podczas przewijania, gdy Items kolekcja zawiera zduplikowane obiekty typizowane przez wartość.

Nazwa/nazwisko Wartość
Zakres Główna
Wersja 4.8
Typ Środowisko uruchomieniowe

Dotyczy interfejsów API

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 przydzielania rozmiarów do) wprowadzoną Grid w programie .NET Framework 4.7. W niektórych przypadkach, takich jak siatka zawierająca Height=&quot;Auto&quot; puste wiersze, wiersze zostały ułożone 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/nazwisko Wartość
Zakres Główna
Wersja 4.8
Typ Środowisko uruchomieniowe

Dotyczy interfejsów API

Nie można wykryć za pośrednictwem analizy interfejsu API.

Szczegóły

Naprawiono niepoprawny wynik naciśnięcia klawisza strzałki, gdy fokus znajduje się na hiperlinku w elemencie, który nie jest wybranym elementem elementu nadrzędnego ItemsControl.

Nazwa/nazwisko Wartość
Zakres Główna
Wersja 4.8
Typ Środowisko uruchomieniowe

Dotyczy interfejsów API

Nie można wykryć za pośrednictwem analizy interfejsu API.

Poprawa wydajności drzewa automatyzacji na potrzeby grupowania kontrolek Elementów

Szczegóły

Zwiększono wydajność ponownego kompilowania drzewa automatyzacji obiektu ItemsControl, takiego jak ListBox lub DataGrid, w którym włączono grupowanie.

Nazwa/nazwisko Wartość
Zakres Główna
Wersja 4.8
Typ Środowisko uruchomieniowe

Dotyczy interfejsów API

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.