Zmiany w czasie wykonywania migracji do programu .NET Framework 4.6.x

W tym artykule wymieniono problemy ze zgodnością aplikacji wprowadzone w programie .NET Framework 4.6, 4.6.1 i 4.6.2.

.NET framework 4.6

ASP.NET

Kontrolki GridView z ustawioną wartością AllowCustomPaging na wartość true mogą spowodować wyzwolenie zdarzenia PageIndexChanging po opuszczeniu ostatniej strony widoku

Szczegóły

Usterka w programie .NET Framework 4.5 czasami System.Web.UI.WebControls.GridView.PageIndexChanging nie jest uruchamiana dla System.Web.UI.WebControls.GridViewprogramu s, które włączyły System.Web.UI.WebControls.GridView.AllowCustomPagingfunkcję .

Sugestia

Ten problem został rozwiązany w programie .NET Framework 4.6 i można go rozwiązać przez uaktualnienie do tej wersji programu .NET Framework. W ramach pracy aplikacja może wykonać jawną usługę BindGrid w dowolnym Page_Load przypadku, który osiągnie te warunki (element System.Web.UI.WebControls.GridView znajduje się na ostatniej stronie i Wartość OstatniaSystem.Web.UI.WebControls.GridView.PageSize różni się od System.Web.UI.WebControls.GridView.PageSize). Alternatywnie można zmodyfikować aplikację tak, aby zezwalała na stronicowanie (zamiast niestandardowego stronicowania), ponieważ ten scenariusz nie demonstruje problemu.

Nazwa/nazwisko Wartość
Zakres Mały
Wersja 4.5
Typ Środowisko uruchomieniowe

Dotyczy interfejsów API

Podstawowe funkcje

Element ConcurrentDictionary serializowany w programie .NET Framework 4.5 z parametrem NetDataContractSerializer nie może być deserializowany przez program .NET Framework 4.5.1 lub 4.5.2

Szczegóły

Ze względu na wewnętrzne zmiany typu obiekty, ConcurrentDictionary<TKey,TValue> które są serializowane za pomocą programu .NET Framework 4.5 przy użyciu programu nie mogą być deserializowane w programie .NET Framework 4.5.1 lub w programie .NET Framework 4.5.2.Zwróć uwagę, że przejście w innym kierunku (serializowanie przy użyciu System.Runtime.Serialization.NetDataContractSerializer programu .NET Framework 4.5.x i deserializacji za pomocą programu .NET Framework 4.5) działa. Podobnie nie ma to wpływu na serializacji wszystkich wersji między wersjami 4.x z programem .NET Framework 4.6.Serializowanie i deserializacji z pojedynczą wersją programu .NET Framework.

Sugestia

Jeśli konieczne jest serializowanie i deserializowanie System.Collections.Concurrent.ConcurrentDictionary<TKey,TValue> wartości między programem .NET Framework 4.5 i .NET Framework 4.5.1/4.5.2, należy użyć System.Runtime.Serialization.NetDataContractSerializerinnego serializatora, takiego jak System.Runtime.Serialization.DataContractSerializer . Alternatywnie, ponieważ ten problem został rozwiązany w programie .NET Framework 4.6, można go rozwiązać przez uaktualnienie do tej wersji programu .NET Framework.

Nazwa/nazwisko Wartość
Zakres Mały
Wersja 4.5.1
Typ Środowisko uruchomieniowe

Dotyczy interfejsów API

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

Element AppDomainSetup.DynamicBase nie jest już randomizowany przez useRandomizedStringHashAlgorithm

Szczegóły

Przed programem .NET Framework 4.6 wartość DynamicBase elementu byłaby losowa między domenami aplikacji lub między procesami, jeśli parametr UseRandomizedStringStringHashAlgorithm został włączony w pliku konfiguracji aplikacji. Począwszy od programu .NET Framework 4.6, DynamicBase zwróci stabilny wynik między różnymi wystąpieniami uruchomionej aplikacji i między różnymi domenami aplikacji. Bazy dynamiczne nadal będą się różnić w przypadku różnych aplikacji; ta zmiana usuwa tylko losowy element nazewnictwa dla różnych wystąpień tej samej aplikacji.

Sugestia

Należy pamiętać, że włączenie UseRandomizedStringHashAlgorithm nie spowoduje DynamicBase losowania. Jeśli potrzebna jest losowa baza, musi zostać utworzona w kodzie aplikacji, a nie za pośrednictwem tego interfejsu API.

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

Dotyczy interfejsów API

Wywoływanie atrybutów Attribute.GetCustomAttributes we właściwości indeksatora nie zgłasza już wyjątku AmbiguousMatchException, jeśli niejednoznaczność może zostać rozpoznana przez typ indeksu

Szczegóły

Przed programem .NET Framework 4.6 wywołanie GetCustomAttribute(s) właściwości indeksatora, która różniła się od innej właściwości tylko przez typ indeksu, spowodowałoby wystąpienie System.Reflection.AmbiguousMatchExceptionklasy . Począwszy od programu .NET Framework 4.6, atrybuty właściwości zostaną poprawnie zwrócone.

Sugestia

Należy pamiętać, że polecenia GetCustomAttribute będą działać częściej. Jeśli aplikacja wcześniej polegała na System.Reflection.AmbiguousMatchExceptionobiekcie , odbicie powinno być teraz używane do jawnego wyszukiwania wielu indeksatorów, zamiast tego.

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

Dotyczy interfejsów API

COR_PRF_GC_ROOT_HANDLEs nie są wyliczane przez profileery

Szczegóły

W programie .NET Framework w wersji 4.5.1 interfejs API RootReferences2() profilowania jest niepoprawnie nigdy nie zwracany COR_PRF_GC_ROOT_HANDLE (są zwracane jako COR_PRF_GC_ROOT_OTHER zamiast tego). Ten problem został rozwiązany począwszy od programu .NET Framework 4.6.

Sugestia

Ten problem został rozwiązany w programie .NET Framework 4.6 i można go rozwiązać przez uaktualnienie do tej wersji programu .NET Framework.

Nazwa/nazwisko Wartość
Zakres Mały
Wersja 4.5.1
Typ Środowisko uruchomieniowe

Dotyczy interfejsów API

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

EtW EventListeners nie przechwytują zdarzeń od dostawców za pomocą jawnych słów kluczowych (takich jak dostawca TPL)

Szczegóły

EtW EventListeners z pustą maską słowa kluczowego nie przechwytuje prawidłowo zdarzeń od dostawców z jawnymi słowami kluczowymi. W programie .NET Framework 4.5 dostawca TPL zaczął dostarczać jawne słowa kluczowe i wyzwolił ten problem. W programie .NET Framework 4.6 program EventListeners został zaktualizowany, aby nie mieć już tego problemu.

Sugestia

Aby obejść ten problem, zastąp wywołania wywołaniami EnableEvents(EventSource, EventLevel) przeciążenia EnableEvents, które jawnie określa maskę "dowolnych słów kluczowych" do użycia: EnableEvents(eventSource, level, unchecked((EventKeywords)0xFFFFffffFFFFffff)).

Alternatywnie ten problem został rozwiązany w programie .NET Framework 4.6 i może zostać rozwiązany przez uaktualnienie do tej wersji programu .NET Framework.

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

Dotyczy interfejsów API

Kalendarz perski używa teraz algorytmu słońca Hidżri

Szczegóły

Począwszy od programu .NET Framework 4.6, System.Globalization.PersianCalendar klasa używa algorytmu słonecznego Hidżri. Konwertowanie dat między System.Globalization.PersianCalendar kalendarzami i innymi może spowodować nieco inny wynik rozpoczynający się od programu .NET Framework 4.6 dla dat wcześniejszych niż 1800 lub nowszych niż 2023 (Gregorian). PersianCalendar.MinSupportedDateTime Ponadto jest teraz March 22, 0622 zamiast March 21, 0622.

Sugestia

Należy pamiętać, że w przypadku korzystania z platformy PerCalendar w programie .NET Framework 4.6 niektóre daty wcześniejsze lub późne mogą się nieco różnić. Ponadto w przypadku serializacji dat między procesami, które mogą być uruchamiane w różnych wersjach programu .NET Framework, nie przechowuj ich jako ciągów dat PerCalendar (ponieważ te wartości mogą być inne).

Nazwa/nazwisko Wartość
Zakres Mały
Wersja 4.6
Typ Środowisko uruchomieniowe

Dotyczy interfejsów API

obiekty Emocje ion nie mogą być już przekazywane z kodu zarządzanego do klientów DCOM poza procesem

Szczegóły

obiekty Emocje ion nie mogą być już przekazywane z kodu zarządzanego do klientów DCOM poza procesem. Dotyczy to następujących typów:

Wywołania IMarshal obiektu zwracają wartość E_NOINTERFACE.

Sugestia

Zaktualizuj marshaling kodu, aby pracować z obiektami nieodbicia.

Nazwa/nazwisko Wartość
Zakres Mały
Wersja 4.6
Typ Środowisko uruchomieniowe

Dotyczy interfejsów API

TargetFrameworkName dla domyślnej domeny aplikacji nie jest już domyślnie równa null, jeśli nie zostanie ustawiona

Szczegóły

Wartość System.AppDomainSetup.TargetFrameworkName była wcześniej zerowa w domyślnej domenie aplikacji, chyba że została jawnie ustawiona. Począwszy od wersji 4.6, System.AppDomainSetup.TargetFrameworkName właściwość domyślnej domeny aplikacji będzie miała wartość domyślną pochodzącą z elementu TargetFrameworkAttribute (jeśli istnieje). Domeny aplikacji innych niż domyślne będą nadal dziedziczyć je System.AppDomainSetup.TargetFrameworkName z domyślnej domeny aplikacji (która nie będzie domyślnie mieć wartości null w wersji 4.6), chyba że zostanie jawnie zastąpiona.

Sugestia

Kod powinien być aktualizowany tak, aby nie był zależny TargetFrameworkName od wartości domyślnej do wartości null. Jeśli ta właściwość będzie nadal oceniać wartość null, można ją jawnie ustawić na tę wartość.

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

Dotyczy interfejsów API

X509Certificate2.ToString(Wartość logiczna) nie zgłasza się teraz, gdy platforma .NET nie może obsłużyć certyfikatu

Szczegóły

W programie .NET Framework 4.5.2 i starszych wersjach ta metoda zgłosiłaby błąd, gdyby true przekazano pełny parametr i zainstalowano certyfikaty, które nie były obsługiwane przez program .NET Framework. Teraz metoda powiedzie się i zwróci prawidłowy ciąg, który pomija niedostępne części certyfikatu.

Sugestia

Każdy kod w zależności od X509Certificate2.ToString(Boolean) powinien zostać zaktualizowany, aby oczekiwać, że zwrócony ciąg może wykluczyć niektóre dane certyfikatu (takie jak klucz publiczny, klucz prywatny i rozszerzenia) w niektórych przypadkach, w których interfejs API zostałby wcześniej zgłoszony.

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

Dotyczy interfejsów API

Data

Próba nawiązania połączenia TCP/IP z bazą danych programu SQL Server, która kończy się localhost niepowodzeniem

Szczegóły

W programie .NET Framework 4.6 i 4.6.1 podjęto próbę połączenia TCP/IP z bazą danych programu SQL Server, która rozwiązuje problem localhost z błędem "Wystąpił błąd związany z siecią lub wystąpieniem podczas nawiązywania połączenia z programem SQL Server. Serwer nie został znaleziony lub był niedostępny. Sprawdź, czy nazwa wystąpienia jest prawidłowa oraz czy program SQL Server skonfigurowano tak, aby zezwalał na połączenia zdalne. (dostawca: Interfejsy sieciowe SQL, błąd: 26 — błąd podczas lokalizowania określonego serwera/wystąpienia)"

Sugestia

Ten problem został rozwiązany i poprzednie zachowanie przywrócone w programie .NET Framework 4.6.2. Aby nawiązać połączenie z bazą danych programu SQL Server rozpoznawaną jako localhost, uaktualnij program do programu .NET Framework 4.6.2.

Nazwa/nazwisko Wartość
Zakres Mały
Wersja 4.6
Typ Środowisko uruchomieniowe

Dotyczy interfejsów API

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

Debuger

Wartości węglowe o wartości null nie są widoczne w debugerze do momentu późniejszego kroku

Szczegóły

Usterka w programie .NET Framework 4.5 powoduje, że wartości ustawione za pośrednictwem operacji łączenia wartości null nie są widoczne w debugerze natychmiast po wykonaniu operacji przypisania w 64-bitowej wersji struktury.

Sugestia

Krok po raz dodatkowy w debugerze spowoduje poprawne zaktualizowanie wartości lokalnego/pola. Ponadto ten problem został rozwiązany w programie .NET Framework 4.6; uaktualnienie do tej wersji programu Framework powinno rozwiązać ten problem.

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

Dotyczy interfejsów API

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

Sieć

Funkcja ContentDisposition DateTimes zwraca nieco inny ciąg

Szczegóły

Reprezentacje ciągów System.Net.Mime.ContentDispositionelementu "s zostały zaktualizowane, począwszy od wersji 4.6, aby zawsze reprezentować składnik godziny obiektu System.DateTime z dwiema cyframi. Jest to zgodne z RFC822 i RFC2822. Powoduje ToString() to zwrócenie nieco innego ciągu w wersji 4.6 w scenariuszach, w których jeden z elementów czasu dyspozycji był wcześniejszy niż 10:00. Należy pamiętać, że obiekty ContentDispositions są czasami serializowane za pośrednictwem konwertowania ich na ciągi, więc należy przejrzeć wszystkie ToString() operacje, serializacji lub wywołania GetHashCode.

Sugestia

Nie należy oczekiwać, że reprezentacje ciągów elementów ContentDispositions z różnych wersji programu .NET Framework będą poprawnie porównywane ze sobą. Przed przeprowadzeniem porównania przekonwertuj ciągi z powrotem na obiekty ContentDispositions.

Nazwa/nazwisko Wartość
Zakres Mały
Wersja 4.6
Typ Środowisko uruchomieniowe

Dotyczy interfejsów API

Serializacja

Komunikat o wyjątku został zmieniony dla nieudanej serializacji DataContract w przypadku nieznanego typu

Szczegóły

Począwszy od programu .NET Framework 4.6, komunikat o wyjątku podany w przypadku System.Runtime.Serialization.DataContractSerializer serializacji lub System.Runtime.Serialization.Json.DataContractJsonSerializer deserializacji lub deserializacji z powodu braku "znanych typów" został wyjaśniony.

Sugestia

Aplikacje nie powinny zależeć od określonych komunikatów o wyjątkach. Jeśli aplikacja zależy od tego komunikatu, zaktualizuj ją, aby oczekiwać nowej wiadomości lub (najlepiej) zmienić ją tak, aby była zależna tylko od typu wyjątku.

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

Dotyczy interfejsów API

Konfigurowanie i wdrażanie

Zmiany wersji produktu w programie .NET Framework 4.6 lub nowszym

Szczegóły

Przechowywanie wersji produktu zmieniło się z poprzednich wersji programu .NET Framework, a zwłaszcza z programu .NET Framework 4, 4.5, 4.5.1 i 4.5.2. Poniżej przedstawiono szczegółowe zmiany:

  • Wartość Version wpisu w kluczu HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Full została zmieniona na 4.6.xxxxx dla programu .NET Framework 4.6 i jego wersji punktów oraz dla 4.7.xxxxx programu .NET Framework 4.7 i 4.7.1. W programie .NET Framework 4.5, 4.5.1 i 4.5.2 miał format 4.5.xxxxx.
  • Przechowywanie wersji plików .NET Framework i plików programu .NET Framework zmieniło się z wcześniejszego schematu przechowywania wersji 4.0.30319.x na 4.6.X.0 dla programu .NET Framework 4.6 i jego wydań punktów oraz do wersji 4.7.X.0 dla programu .NET Framework 4.7 i 4.7.1. Te nowe wartości można zobaczyć po kliknięciu prawym przyciskiem myszy pliku właściwości pliku.
  • Atrybuty AssemblyFileVersionAttribute i AssemblyInformationalVersionAttribute dla zestawów zarządzanych mają wartości Wersji w postaci 4.6.X.0 dla programu .NET Framework 4.6 i jego wersji punktów oraz 4.7.X.0 dla programu .NET Framework 4.7 i 4.7.1.
  • W programie .NET Framework 4.6, 4.6.1, 4.6.2, 4.7 i 4.7.1 Environment.Version właściwość zwraca stały ciąg 4.0.30319.42000wersji . W programie .NET Framework 4, 4.5, 4.5.1 i 4.5.2 zwraca ciągi wersji w formacie 4.0.30319.xxxxx (na przykład "4.0.30319.18010"). Pamiętaj, że nie zalecamy stosowania kodu aplikacji, który przyjmuje nową zależność od właściwości Environment.Version.

Aby uzyskać więcej informacji, zobacz Instrukcje: określanie, które wersje programu .NET Framework są zainstalowane.

Sugestia

Ogólnie rzecz biorąc, aplikacje powinny zależeć od zalecanych technik wykrywania takich elementów, jak wersja środowiska uruchomieniowego programu .NET Framework i katalog instalacyjny:

Ważne

Nazwa podklucza to NET Framework Setup, a nie .NET Framework Setup.

  • Aby określić ścieżkę katalogu do środowiska uruchomieniowego języka wspólnego programu .NET Framework, wywołaj metodę RuntimeEnvironment.GetRuntimeDirectory() .
  • Aby uzyskać wersję środowiska CLR, wywołaj metodę RuntimeEnvironment.GetSystemVersion() . W przypadku programu .NET Framework 4 i jego wersji punktów (.NET Framework 4.5, 4.5.1, 4.5.2 i .NET Framework 4.6, 4.6.1, 4.6.2, 4.7 i 4.7.1) zwraca ciąg w wersji 4.0.30319.
Nazwa/nazwisko Wartość
Zakres Mały
Wersja 4.6
Typ Środowisko uruchomieniowe

Dotyczy interfejsów API

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

Program .NET Framework 4.6 nie używa wersji 4.5.x.x podczas rejestrowania się w rejestrze

Szczegóły

Jak można się spodziewać, klucz wersji ustawiony w rejestrze (w punkcie HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\NET Framework Setup\NDP\v4\Full) dla programu .NET Framework 4.6 zaczyna się od "4.6", a nie "4.5". Aplikacje, które zależą od tych kluczy rejestru, aby wiedzieć, które wersje programu .NET Framework są zainstalowane na maszynie, należy zaktualizować, aby zrozumieć, że wersja 4.6 jest nową możliwą wersją i zgodną z poprzednimi wersjami 4.5.x.

Sugestia

Zaktualizuj sondowanie aplikacji dla instalacji programu .NET Framework 4.5, wyszukując klucze rejestru 4.5, aby również zaakceptować 4.6.

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

Dotyczy interfejsów API

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

Windows Communication Foundation (WCF)

Usługi WCF korzystające z narzędzia NETTCP z zabezpieczeniami SSL i uwierzytelnianiem certyfikatu MD5

Szczegóły

Program .NET Framework 4.6 dodaje protokoły TLS 1.1 i TLS 1.2 do domyślnej listy protokołów SSL WCF. Jeśli na komputerach klienckich i serwerowych jest zainstalowany program .NET Framework 4.6 lub nowszy, protokół TLS 1.2 jest używany do negocjacji. Protokół TLS 1.2 nie obsługuje uwierzytelniania certyfikatu MD5. W związku z tym, jeśli klient korzysta z certyfikatu MD5, klient programu WCF nie może nawiązać połączenia z usługą WCF.

Sugestia

Ten problem można obejść, aby klient programu WCF mógł nawiązać połączenie z serwerem WCF, wykonując dowolną z następujących czynności:

  • Zaktualizuj certyfikat, aby nie używał algorytmu MD5. Jest to zalecane rozwiązanie.
  • Jeśli powiązanie nie jest konfigurowane dynamicznie w kodzie źródłowym, zaktualizuj plik konfiguracji aplikacji, aby używać protokołu TLS 1.1 lub starszej wersji protokołu. Dzięki temu można nadal używać certyfikatu z algorytmem skrótu MD5.

Ostrzeżenie

To obejście nie jest zalecane, ponieważ certyfikat z algorytmem skrótu MD5 jest uznawany za niezabezpieczony.

Poniższy plik konfiguracji wykonuje następujące czynności:

<configuration>
  <system.serviceModel>
    <bindings>
      <netTcpBinding>
        <binding>
          <security mode= "None/Transport/Message/TransportWithMessageCredential" >
            <transport clientCredentialType="None/Windows/Certificate"
                       protectionLevel="None/Sign/EncryptAndSign"
                       sslProtocols="Ssl3/Tls1/Tls11">
            </transport>
          </security>
        </binding>
      </netTcpBinding>
    </bindings>
  </system.ServiceModel>
</configuration>

Ostrzeżenie

To obejście nie jest zalecane, ponieważ certyfikat z algorytmem skrótu MD5 jest uznawany za niezabezpieczony.

Nazwa/nazwisko Wartość
Zakres Mały
Wersja 4.6
Typ Środowisko uruchomieniowe

Dotyczy interfejsów API

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

Windows Presentation Foundation (WPF)

Uzyskiwanie dostępu do wybranych elementów usługi WPF DataGrid z programu obsługi zdarzenia UnloadingRow usługi DataGrid może spowodować wyjątek NullReferenceException

Szczegóły

Ze względu na usterkę w programie .NET Framework 4.5 programy obsługi zdarzeń dla DataGrid zdarzeń obejmujących usunięcie wiersza mogą spowodować zgłoszenie elementu , System.NullReferenceException jeśli uzyskują dostęp do DataGridSystem.Windows.Controls.Primitives.Selector.SelectedItem właściwości lub System.Windows.Controls.Primitives.MultiSelector.SelectedItems .

Sugestia

Ten problem został rozwiązany w programie .NET Framework 4.6 i można go rozwiązać przez uaktualnienie do tej wersji programu .NET Framework.

Nazwa/nazwisko Wartość
Zakres Mały
Wersja 4.5
Typ Środowisko uruchomieniowe

Dotyczy interfejsów API

Wywoływanie elementów.Refresh w WPF ListBox, ListView lub DataGrid z zaznaczonymi elementami może spowodować, że w elemecie pojawią się zduplikowane elementy

Szczegóły

W programie .NET Framework 4.5 wywołanie metody ListBox.Items.Refresh z kodu, gdy elementy są zaznaczone w obiekcie System.Windows.Controls.ListBox , mogą spowodować zduplikowanie wybranych elementów na liście. Podobny problem występuje z elementami System.Windows.Controls.ListView i System.Windows.Controls.DataGrid. Jest to naprawione w programie .NET Framework 4.6.

Sugestia

Ten problem można obejść przez programowe anulowanie zaznaczania elementów przed System.Windows.Data.CollectionView.Refresh() wywołaniem, a następnie ponowne wybranie ich po zakończeniu wywołania. Alternatywnie ten problem został rozwiązany w programie .NET Framework 4.6 i może zostać rozwiązany przez uaktualnienie do tej wersji programu .NET Framework.

Wartość
Scope Mały
Wersja 4.5
Type Środowisko uruchomieniowe

Dotyczy interfejsów API

CoerceIsSelectionBoxHighlighted

Szczegóły

Niektóre sekwencje akcji obejmujących obiekt System.Windows.Controls.ComboBox i jego źródło danych mogą spowodować wyświetlenie obiektu System.NullReferenceException.

Sugestia

Jeśli to możliwe, przeprowadź uaktualnienie do programu .NET Framework 4.6.2.

Nazwa/nazwisko Wartość
Zakres Mały
Wersja 4.6
Typ Środowisko uruchomieniowe

Dotyczy interfejsów API

Problem z powiązaniem ListBoxItem IsSelected z funkcją ObservableCollection<T>. Przenieść

Szczegóły

Wywoływanie Move(Int32, Int32) lub MoveItem(Int32, Int32) w kolekcji powiązanej System.Windows.Controls.ListBox z wybranymi elementami może prowadzić do niekonsekwentnego zachowania z przyszłym wyborem lub usunięciem zaznaczenia System.Windows.Controls.ListBox elementów.

Sugestia

Wywołanie System.Collections.ObjectModel.Collection<T>.Remove(T) metody i System.Collections.ObjectModel.Collection<T>.Insert(Int32, T) zamiast Move(Int32, Int32) obejść ten problem. Alternatywnie ten problem został rozwiązany w programie .NET Framework 4.6 i może zostać rozwiązany przez uaktualnienie do tej wersji programu .NET Framework.

Nazwa/nazwisko Wartość
Zakres Mały
Wersja 4.5
Typ Środowisko uruchomieniowe

Dotyczy interfejsów API

Kliknięcie prawym przyciskiem myszy nagłówka wiersza usługi WPF DataGrid spowoduje zmianę wyboru DataGrid

Szczegóły

Kliknięcie prawym przyciskiem myszy zaznaczonego nagłówka wiersza, podczas gdy wiele wierszy jest zaznaczonych System.Windows.Controls.DataGrid powoduje System.Windows.Controls.DataGridzmianę zaznaczenia na tylko ten wiersz.

Sugestia

Ten problem został rozwiązany w programie .NET Framework 4.6 i można go rozwiązać przez uaktualnienie do tej wersji programu .NET Framework.

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

Dotyczy interfejsów API

WPF powoduje proces wisptis.exe, który może zablokować mysz

Szczegóły

Problem został wprowadzony w wersji 4.5.2, który powoduje wisptis.exe , że może blokować wprowadzanie myszy.

Sugestia

Poprawka tego problemu jest dostępna w wersji obsługi programu .NET Framework 4.5.2 (pakiet zbiorczy poprawek 3026376) lub przez uaktualnienie do programu .NET Framework 4.6

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

Dotyczy interfejsów API

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

Sprawdzanie pisowni WPF w kontrolkach z obsługą tekstu nie będzie działać w systemie Windows 10 dla języków, które nie znajdują się na liście języków wejściowych systemu operacyjnego

Szczegóły

W przypadku uruchamiania w systemie Windows 10 narzędzie sprawdzania pisowni może nie działać w przypadku kontrolek z obsługą tekstu WPF, ponieważ funkcje sprawdzania pisowni platformy są dostępne tylko dla języków znajdujących się na liście języków wejściowych. W systemie Windows 10 po dodaniu języka do listy dostępnych klawiatur system Windows automatycznie pobiera i instaluje odpowiedni pakiet funkcji na żądanie (FOD), który zapewnia funkcje sprawdzania pisowni. Dodanie języka do listy języków wejściowych spowoduje, że moduł sprawdzania pisowni będzie obsługiwany.

Sugestia

Należy pamiętać, że język lub tekst do sprawdzania pisowni należy dodać jako język wejściowy sprawdzania pisowni, aby działał w systemie Windows 10.

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

Dotyczy interfejsów API

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

Okna WPF są renderowane bez wycinków podczas rozszerzania poza pojedynczy monitor

Szczegóły

W programie .NET Framework 4.6 uruchomionym w systemie Windows 8 lub nowszym całe okno jest renderowane bez wycinków, gdy wykracza poza pojedynczy wyświetlacz w scenariuszu z wieloma monitorami. Różni się to od poprzednich wersji programu .NET Framework, które wycinek okien WPF wykracza poza pojedynczy wyświetlacz.

Sugestia

To zachowanie (bez względu na to, czy chcesz wyciąć, czy nie) można jawnie ustawić przy użyciu <EnableMultiMonitorDisplayClipping> elementu w <appSettings> pliku konfiguracji aplikacji lub przez ustawienie EnableMultiMonitorDisplayClipping właściwości podczas uruchamiania aplikacji.

Nazwa/nazwisko Wartość
Zakres Mały
Wersja 4.6
Typ Środowisko uruchomieniowe

Dotyczy interfejsów API

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

.NET Framework 4.6.1

Narzędzia

Contract.Invariant lub Contract.Requires<TException> nie należy traktować parametru String.IsNullOrEmpty jako czystego

Szczegóły

W przypadku aplikacji przeznaczonych dla programu .NET Framework 4.6.1, jeśli niezmienny kontrakt Contract.Invariant dla metody lub kontrakt warunków wstępnych dla Requires wywołań String.IsNullOrEmpty metody, autor emituje ostrzeżenie kompilatora CC1036: "Wykryto wywołanie metody System.String.IsNullOrWhiteSpace(System.String)" bez metody [Pure]. Jest to ostrzeżenie kompilatora, a nie błąd kompilatora.

Sugestia

To zachowanie zostało rozwiązane w problemie usługi GitHub nr 339. Aby wyeliminować to ostrzeżenie, możesz pobrać i skompilować zaktualizowaną wersję kodu źródłowego dla narzędzia Code Contracts z usługi GitHub. Informacje o pobieraniu znajdują się w dolnej części strony.

Nazwa/nazwisko Wartość
Zakres Mały
Wersja 4.6.1
Typ Środowisko uruchomieniowe

Dotyczy interfejsów API

Windows Presentation Foundation (WPF)

Przewijanie elementu płaskiej listy z elementami o różnej wysokości pikseli

Szczegóły

Gdy kolekcja jest wyświetlana System.Windows.Controls.ItemsControl przy użyciu wirtualizacji (IsVirtualizing=true) i przewijania elementów (ScrollUnit=Item), a gdy kontrolka przewija się w celu wyświetlenia elementu, którego wysokość w pikselach różni się od jego sąsiadów, System.Windows.Controls.VirtualizingStackPanel iteruje wszystkie elementy w kolekcji. Interfejs użytkownika nie odpowiada podczas tej iteracji. Iteracja występuje w innych okolicznościach, nawet w poprzednich wersjach programu .NET Framework. Na przykład występuje podczas przewijania pikseli (ScrollUnit=Pixel) po napotkaniu elementu o innej wysokości pikseli oraz podczas przewijania elementów (takich jak System.Windows.Controls.TreeView lub System.Windows.Controls.ItemsControl z włączonym grupowaniem) po napotkaniu elementu o innej liczbie elementów podrzędnych niż jej sąsiedzi. W przypadku przewijania elementów i innej wysokości pikseli iteracja została wprowadzona w programie .NET Framework 4.6.1, aby naprawić błędy w układzie danych hierarchicznych. Nie jest to konieczne, jeśli dane są płaskie (bez hierarchii), a program .NET Framework 4.6.2 nie robi tego w tym przypadku.

Sugestia

Jeśli iteracja występuje w programie .NET Framework 4.6.1, ale nie we wcześniejszych wersjach — oznacza to, że jeśli System.Windows.Controls.ItemsControl element jest elementem— przewijanie płaskiej listy z elementami o różnej wysokości pikseli — istnieją dwa środki zaradcze:

  • Zainstaluj program .NET Framework 4.6.2.
  • Zainstaluj poprawkę HR 1605 dla programu .NET Framework 4.6.1.
Nazwa/nazwisko Wartość
Zakres Mały
Wersja 4.6.1
Typ Środowisko uruchomieniowe

Dotyczy interfejsów API

ObjectDisposedException zgłoszony przez spellchecker WPF

Szczegóły

Aplikacje WPF od czasu do czasu ulegają awarii podczas zamykania aplikacji z zgłaszanym System.ObjectDisposedException przez spellchecker. Jest to naprawione w programie .NET Framework 4.7 WPF przez bezproblemowe obsługę wyjątku, a tym samym zapewnienie, że aplikacje nie będą już niekorzystnie wpływać. Należy zauważyć, że sporadyczne wyjątki pierwszej szansy nadal będą obserwowane w aplikacjach działających w debugerze.

Sugestia

Uaktualnianie do programu .NET Framework 4.7

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

Dotyczy interfejsów API

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

Sprawdzanie pisowni WPF kończy się niepowodzeniem w nieoczekiwany sposób

Szczegóły

Obejmuje to szereg problemów z modułem sprawdzania pisowni WPF:

  • Narzędzie sprawdzania pisowni WPF czasami zgłasza System.Runtime.InteropServices.COMException
  • Narzędzie sprawdzania pisowni WPF kończy się niepowodzeniem, UnauthorizedAccessException gdy aplikacje są uruchamiane przy użyciu polecenia "uruchom jako inny użytkownik"
  • Narzędzie sprawdzania pisowni WPF niepoprawnie identyfikuje błędy pisowni w złożonych słowach, takich jak "Hausnummer" w języku niemieckim.

Sugestia

Problem nr 1 — ten problem został rozwiązany w programie .NET Framework 4.6.2 Problem #2 — Narzędzie sprawdzania pisowni WPF nie jest już obsługiwane, gdy aplikacje są uruchamiane przy użyciu polecenia "Uruchom jako inny użytkownik". Począwszy od programu .NET Framework 4.6.2, aplikacje uruchamiane w ten sposób nie będą już nieoczekiwanie ulegać awarii — zamiast tego moduł sprawdzania pisowni zostanie dyskretnie wyłączony. Problem nr 3 — ten problem został rozwiązany w programie .NET Framework 4.6.2.

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

Dotyczy interfejsów API

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

.NET Framework 4.6.2

Data

Próba nawiązania połączenia TCP/IP z bazą danych programu SQL Server, która kończy się localhost niepowodzeniem

Szczegóły

W programie .NET Framework 4.6 i 4.6.1 podjęto próbę połączenia TCP/IP z bazą danych programu SQL Server, która rozwiązuje problem localhost z błędem "Wystąpił błąd związany z siecią lub wystąpieniem podczas nawiązywania połączenia z programem SQL Server. Serwer nie został znaleziony lub był niedostępny. Sprawdź, czy nazwa wystąpienia jest prawidłowa oraz czy program SQL Server skonfigurowano tak, aby zezwalał na połączenia zdalne. (dostawca: Interfejsy sieciowe SQL, błąd: 26 — błąd podczas lokalizowania określonego serwera/wystąpienia)"

Sugestia

Ten problem został rozwiązany i poprzednie zachowanie przywrócone w programie .NET Framework 4.6.2. Aby nawiązać połączenie z bazą danych programu SQL Server rozpoznawaną jako localhost, uaktualnij program do programu .NET Framework 4.6.2.

Nazwa/nazwisko Wartość
Zakres Mały
Wersja 4.6
Typ Środowisko uruchomieniowe

Dotyczy interfejsów API

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

Okres blokowania puli Połączenie ion dla baz danych Azure SQL Database jest usuwany

Szczegóły

Począwszy od programu .NET Framework 4.6.2, w przypadku żądań otwarcia połączenia do znanych baz danych Azure SQL Database (*.database.windows.net, *.database.chinacloudapi.cn, *.database.usgovcloudapi.net, *.database.cloudapi.de), okres blokowania puli połączeń jest usuwany, a błędy otwierania połączenia nie są buforowane. Próby ponawiania próby otwarcia połączenia będą wykonywane niemal natychmiast po przejściowych błędach połączenia. Ta zmiana umożliwia natychmiastowe ponowienia próby otwarcia połączenia dla baz danych Azure SQL Database, co zwiększa wydajność aplikacji z obsługą chmury. W przypadku wszystkich innych prób połączenia okres blokowania puli połączeń nadal jest wymuszany.

W programie .NET Framework 4.6.1 i starszych wersjach aplikacja napotka przejściowy błąd połączenia podczas nawiązywania połączenia z bazą danych, nie można szybko ponowić próby nawiązania połączenia, ponieważ pula połączeń buforuje błąd i ponownie zgłasza ją przez 5 sekund do 1 minuty. Aby uzyskać więcej informacji, zobacz Sql Server Połączenie ion Pooling (ADO.NET). To zachowanie jest problematyczne w przypadku połączeń z bazami danych Azure SQL Database, które często kończą się niepowodzeniem z powodu błędów przejściowych, które są zwykle odzyskiwane z poziomu kilku sekund. Funkcja blokowania puli połączeń oznacza, że aplikacja nie może nawiązać połączenia z bazą danych przez długi okres, mimo że baza danych jest dostępna, a aplikacja musi być renderowana w ciągu kilku sekund.

Sugestia

Jeśli to zachowanie jest niepożądane, można skonfigurować okres blokowania puli połączeń, ustawiając System.Data.SqlClient.SqlConnectionStringBuilder.PoolBlockingPeriod właściwość wprowadzoną w programie .NET Framework 4.6.2. Wartość właściwości jest elementem członkowskim System.Data.SqlClient.PoolBlockingPeriod wyliczenia, które może przyjmować jedną z trzech wartości:

Poprzednie zachowanie można przywrócić, ustawiając System.Data.SqlClient.SqlConnectionStringBuilder.PoolBlockingPeriod właściwość na AlwaysBlock.

Nazwa/nazwisko Wartość
Zakres Mały
Wersja 4.6.2
Typ Środowisko uruchomieniowe

Dotyczy interfejsów API

Globalizacja

Obsługiwane są kategorie Standard Unicode w wersji 8.0

Szczegóły

W programie .NET Framework 4.6.2 dane Unicode zostały uaktualnione ze standardu Unicode w wersji 6.3 do wersji 8.0. Podczas żądania kategorii znaków Unicode w programie .NET Framework 4.6.2 niektóre wyniki mogą nie być zgodne z wynikami w poprzednich wersjach programu .NET Framework. Ta zmiana dotyczy głównie sylab Cherokee i new Tai Lue znaki vowels i znaki tonu.

Sugestia

Przejrzyj kod i usuń/zmień logikę, która zależy od trwale zakodowanych kategorii znaków Unicode.

Nazwa/nazwisko Wartość
Zakres Mały
Wersja 4.6.2
Typ Środowisko uruchomieniowe

Dotyczy interfejsów API

Zabezpieczenia

RsACng i DSACng są po raz kolejny przydatne w scenariuszach częściowego zaufania

Szczegóły

CngLightup (używane w kilku interfejsach API kryptograficznych wyższego poziomu, takich jak System.Security.Cryptography.Xml.EncryptedXml) i System.Security.Cryptography.RSACng w niektórych przypadkach polegają na pełnym zaufaniu. Obejmują one żądania P/Invoke bez potwierdzenia SecurityPermissionFlag.UnmanagedCode uprawnień i ścieżki kodu, w których System.Security.Cryptography.CngKey ma wymagania dotyczące uprawnień.SecurityPermissionFlag.UnmanagedCode Począwszy od programu .NET Framework 4.6.2, CngLightup był używany do przełączania się do System.Security.Cryptography.RSACng wszędzie tam, gdzie to możliwe. W związku z tym częściowe aplikacje zaufania, które pomyślnie korzystały System.Security.Cryptography.Xml.EncryptedXml , zaczęły prowadzić do awarii i zgłaszać SecurityException wyjątki. Ta zmiana dodaje wymagane potwierdzenia, aby wszystkie funkcje korzystające z CngLightup miały wymagane uprawnienia.

Sugestia

Jeśli ta zmiana w programie .NET Framework 4.6.2 ma negatywny wpływ na aplikacje częściowo zaufane, przeprowadź uaktualnienie do programu .NET Framework 4.7.1.

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

Dotyczy interfejsów API

RsACng.VerifyHash zwraca teraz wartość False dla dowolnego niepowodzenia weryfikacji

Szczegóły

Począwszy od programu .NET Framework 4.6.2, ta metoda zwraca wartość False , jeśli sam podpis jest źle sformatowany. Teraz zwraca wartość false dla dowolnego niepowodzenia weryfikacji. W programach .NET Framework 4.6 i 4.6.1 metoda zgłasza System.Security.Cryptography.CryptographicException błąd, jeśli sam podpis jest nieprawidłowo sformatowany.

Sugestia

Każdy kod, którego wykonanie zależy od obsługi, System.Security.Cryptography.CryptographicException zamiast tego należy wykonać, jeśli walidacja zakończy się niepowodzeniem, a metoda zwróci wartość False.

Nazwa/nazwisko Wartość
Zakres Mały
Wersja 4.6.2
Typ Środowisko uruchomieniowe

Dotyczy interfejsów API

Zmiany powodujące niezgodność w formacie SignedXml i EncryptedXml

Szczegóły

W programie .NET Framework 4.6.2 poprawki zabezpieczeń w System.Security.Cryptography.Xml.SignedXml systemie i System.Security.Cryptography.Xml.EncryptedXml prowadzą do różnych zachowań czasu wykonywania. Na przykład:

  • Jeśli dokument ma wiele elementów z tym samym id atrybutem i podpisem jest przeznaczonych dla jednego z tych elementów jako katalogu głównego podpisu, dokument będzie teraz uważany za nieprawidłowy.
  • Dokumenty korzystające z nie kanonicznych algorytmów przekształcania XPath w odwołaniach są teraz uznawane za nieprawidłowe.
  • Dokumenty korzystające z nie kanonicznych algorytmów przekształcania XSLT w odwołaniach są teraz uznane za nieprawidłowe.
  • Każdy program korzystający z sygnatur odłączonych od zasobów zewnętrznych nie będzie mógł tego zrobić.

Sugestia

Deweloperzy mogą chcieć przejrzeć użycie elementów XmlDsigXsltTransform i XmlDsigXsltTransform, a także typy pochodzące od Transform , ponieważ odbiorca dokumentu może nie być w stanie go przetworzyć.

Nazwa/nazwisko Wartość
Zakres Mały
Wersja 4.6.2
Typ Środowisko uruchomieniowe

Dotyczy interfejsów API

Windows Communication Foundation (WCF)

Usuwanie protokołu Ssl3 z elementu TransportDefaults programu WCF

Szczegóły

W przypadku korzystania z narzędzia NetTcp z zabezpieczeniami transportu i typu poświadczeń certyfikatu protokół SSL 3 nie jest już domyślnym protokołem używanym do negocjowania bezpiecznego połączenia. W większości przypadków nie powinno mieć wpływu na istniejące aplikacje, ponieważ protokół TLS 1.0 zawsze znajduje się na liście protokołów dla platformy NetTcp. Wszyscy istniejący klienci powinni mieć możliwość negocjowania połączenia przy użyciu co najmniej protokołu TLS1.0.

Sugestia

Jeśli protokół Ssl3 jest wymagany, użyj jednego z następujących mechanizmów konfiguracji, aby dodać protokół Ssl3 do listy wynegocjowanych protokołów.

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

Dotyczy interfejsów API

Windows Presentation Foundation (WPF)

Zmiana właściwości IsEnabled elementu nadrzędnego kontrolki TextBlock wpływa na wszystkie kontrolki podrzędne

Szczegóły

Począwszy od programu .NET Framework 4.6.2, zmiana System.Windows.UIElement.IsEnabled właściwości elementu nadrzędnego System.Windows.Controls.TextBlock kontrolki wpływa na wszystkie kontrolki podrzędne (takie jak hiperlinki i przyciski) kontrolki System.Windows.Controls.TextBlock . W programie .NET Framework 4.6.1 i starszych wersjach kontrolki wewnątrz System.Windows.Controls.TextBlock elementu nie zawsze odzwierciedlały stan System.Windows.UIElement.IsEnabled właściwości elementu nadrzędnego System.Windows.Controls.TextBlock .

Sugestia

Brak. Ta zmiana jest zgodna z oczekiwanym zachowaniem kontrolek wewnątrz kontrolki System.Windows.Controls.TextBlock .

Nazwa/nazwisko Wartość
Zakres Mały
Wersja 4.6.2
Typ Środowisko uruchomieniowe

Dotyczy interfejsów API

CoerceIsSelectionBoxHighlighted

Szczegóły

Niektóre sekwencje akcji obejmujących obiekt System.Windows.Controls.ComboBox i jego źródło danych mogą spowodować wyświetlenie obiektu System.NullReferenceException.

Sugestia

Jeśli to możliwe, przeprowadź uaktualnienie do programu .NET Framework 4.6.2.

Nazwa/nazwisko Wartość
Zakres Mały
Wersja 4.6
Typ Środowisko uruchomieniowe

Dotyczy interfejsów API

Element DataGridCellsPanel.BringIndexIntoView zgłasza wyjątek ArgumentOutOfRangeException

Szczegóły

ScrollIntoView(Object) funkcja będzie działać asynchronicznie, gdy wirtualizacja kolumn jest włączona, ale nie określono jeszcze szerokości kolumn. Jeśli kolumny zostaną usunięte przed wykonaniem pracy asynchronicznej, System.ArgumentOutOfRangeException może wystąpić.

Sugestia

Dowolna z następujących czynności:

  • Uaktualnij do programu .NET Framework 4.7.
  • Zainstaluj najnowszą poprawkę obsługi dla programu .NET Framework 4.6.2.
  • Unikaj usuwania kolumn, dopóki nie zostanie ukończona asynchroniczna odpowiedź ScrollIntoView(Object) .
Nazwa/nazwisko Wartość
Zakres Edge
Wersja 4.6.2
Typ Środowisko uruchomieniowe

Dotyczy interfejsów API

Przewijanie w poziomie i wirtualizacja

Szczegóły

Ta zmiana dotyczy elementu, który wykonuje własną System.Windows.Controls.ItemsControl wirtualizację w kierunku ortogonalnym do głównego kierunku przewijania (głównym przykładem jest System.Windows.Controls.DataGrid enableColumnVirtualization="True"). Wynik niektórych operacji przewijania poziomego został zmieniony w celu uzyskania wyników, które są bardziej intuicyjne i bardziej analogiczne do wyników porównywalnych operacji pionowych.

Operacje obejmują "Przewiń tutaj" i "Prawa krawędź", aby użyć nazw z menu uzyskanego przez kliknięcie prawym przyciskiem myszy poziomego paska przewijania. Oba te obliczenia obliczają przesunięcie kandydata i wywołaj metodę SetHorizontalOffset(Double).

Po przewinięciu do nowego przesunięcia pojęcie "here" lub "right edge" mogło ulec zmianie, ponieważ nowo zwirtualizowana zawartość zmieniła wartość .System.Windows.Controls.Primitives.IScrollInfo.ExtentWidth

Przed programem .NET Framework 4.6.2 operacja przewijania po prostu używa przesunięcia kandydata, mimo że nie może to być "tutaj" ani na prawej krawędzi. Powoduje to efekty, takie jak "odbijanie" kciuka przewijania, najlepiej zilustrowane przez przykład. Załóżmy, że element System.Windows.Controls.DataGrid ma wartość ExtentWidth=1000 i Width=200. Przewinięcie do pozycji "Prawa krawędź" używa przesunięcia 1000–200 = 800. Podczas przewijania do tego przesunięcia nowe kolumny są dewirtualizowane; Załóżmy, że są one bardzo szerokie, tak aby zmiany w System.Windows.Controls.Primitives.IScrollInfo.ExtentWidth 2000 roku. Przewijanie kończy się ciągiem HorizontalOffset=800, a kciuk "odbija się" w pobliżu środka paska przewijania — dokładnie o 800/2000 = 40%.

Zmiana polega na ponownym skompilacji nowego przesunięcia kandydata w przypadku wystąpienia tej sytuacji i ponów próbę. (W ten sposób przewijanie w pionie działa już).

Zmiana generuje bardziej przewidywalne i intuicyjne środowisko dla użytkownika końcowego, ale może również mieć wpływ na dowolną aplikację, która zależy od dokładnej System.Windows.Controls.Primitives.IScrollInfo.HorizontalOffset wartości po przewinięciu poziomym, niezależnie od tego, czy jest wywoływana przez użytkownika końcowego, czy przez jawne wywołanie metody SetHorizontalOffset(Double).

Sugestia

Aplikacja, która używa przewidywanej wartości, System.Windows.Controls.Primitives.IScrollInfo.HorizontalOffset powinna zostać zmieniona w celu pobrania rzeczywistej wartości (i wartości System.Windows.Controls.Primitives.IScrollInfo.ExtentWidth) po każdym przewinięciu poziomym, który może ulec zmianie System.Windows.Controls.Primitives.IScrollInfo.ExtentWidth z powodu anulowania wirtualizacji.

Nazwa/nazwisko Wartość
Zakres Mały
Wersja 4.6.2
Typ Środowisko uruchomieniowe

Dotyczy interfejsów API

Items.Clear nie usuwa duplikatów z elementu SelectedItems

Szczegóły

Załóżmy, że selektor (z włączonym wielokrotnym zaznaczeniem) ma duplikaty w swojej System.Windows.Controls.Primitives.MultiSelector.SelectedItems kolekcji — ten sam element jest wyświetlany więcej niż raz. Usunięcie tych elementów ze źródła danych (np. przez wywołanie elementu Items.Clear) nie może ich usunąć z System.Windows.Controls.Primitives.MultiSelector.SelectedItems; tylko pierwsze wystąpienie zostanie usunięte. Ponadto późniejsze użycie System.Windows.Controls.Primitives.MultiSelector.SelectedItems elementu (np. SelectedItems.Clear()) może napotkać problemy, takie jak System.ArgumentException, ponieważ System.Windows.Controls.Primitives.MultiSelector.SelectedItems zawiera elementy, które nie znajdują się już w źródle danych.

Sugestia

Uaktualnij, jeśli to możliwe, do programu .NET Framework 4.6.2.

Nazwa/nazwisko Wartość
Zakres Mały
Wersja 4.5
Typ Środowisko uruchomieniowe

Dotyczy interfejsów API

Przewijanie elementu płaskiej listy z elementami o różnej wysokości pikseli

Szczegóły

Gdy kolekcja jest wyświetlana System.Windows.Controls.ItemsControl przy użyciu wirtualizacji (IsVirtualizing=true) i przewijania elementów (ScrollUnit=Item), a gdy kontrolka przewija się w celu wyświetlenia elementu, którego wysokość w pikselach różni się od jego sąsiadów, System.Windows.Controls.VirtualizingStackPanel iteruje wszystkie elementy w kolekcji. Interfejs użytkownika nie odpowiada podczas tej iteracji. Iteracja występuje w innych okolicznościach, nawet w poprzednich wersjach programu .NET Framework. Na przykład występuje podczas przewijania pikseli (ScrollUnit=Pixel) po napotkaniu elementu o innej wysokości pikseli oraz podczas przewijania elementów (takich jak System.Windows.Controls.TreeView lub System.Windows.Controls.ItemsControl z włączonym grupowaniem) po napotkaniu elementu o innej liczbie elementów podrzędnych niż jej sąsiedzi. W przypadku przewijania elementów i innej wysokości pikseli iteracja została wprowadzona w programie .NET Framework 4.6.1, aby naprawić błędy w układzie danych hierarchicznych. Nie jest to konieczne, jeśli dane są płaskie (bez hierarchii), a program .NET Framework 4.6.2 nie robi tego w tym przypadku.

Sugestia

Jeśli iteracja występuje w programie .NET Framework 4.6.1, ale nie we wcześniejszych wersjach — oznacza to, że jeśli System.Windows.Controls.ItemsControl element jest elementem— przewijanie płaskiej listy z elementami o różnej wysokości pikseli — istnieją dwa środki zaradcze:

  • Zainstaluj program .NET Framework 4.6.2.
  • Zainstaluj poprawkę HR 1605 dla programu .NET Framework 4.6.1.
Nazwa/nazwisko Wartość
Zakres Mały
Wersja 4.6.1
Typ Środowisko uruchomieniowe

Dotyczy interfejsów API

Tło grupy wstążki jest ustawione na przezroczyste w zlokalizowanych kompilacjach

Szczegóły

System.Windows.Controls.Ribbon.RibbonGroup tło na zlokalizowanych kompilacjach było zawsze malowane z przezroczystym pędzlem, co skutkuje słabym środowiskiem interfejsu użytkownika. Jest to naprawione w poprawce programu .NET Framework 4.7 WPF przez zaktualizowanie zlokalizowanych zasobów dla System.Windows.Controls.Ribbon.RibbonGroupprogramu , co z kolei gwarantuje, że wybrano poprawną szczotkę.

Sugestia

Uaktualnianie do programu .NET Framework 4.7

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

Dotyczy interfejsów API

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

Sprawdzanie pisowni WPF kończy się niepowodzeniem w nieoczekiwany sposób

Szczegóły

Obejmuje to szereg problemów z modułem sprawdzania pisowni WPF:

  • Narzędzie sprawdzania pisowni WPF czasami zgłasza System.Runtime.InteropServices.COMException
  • Narzędzie sprawdzania pisowni WPF kończy się niepowodzeniem, UnauthorizedAccessException gdy aplikacje są uruchamiane przy użyciu polecenia "uruchom jako inny użytkownik"
  • Narzędzie sprawdzania pisowni WPF niepoprawnie identyfikuje błędy pisowni w złożonych słowach, takich jak "Hausnummer" w języku niemieckim.

Sugestia

Problem nr 1 — ten problem został rozwiązany w programie .NET Framework 4.6.2 Problem #2 — Narzędzie sprawdzania pisowni WPF nie jest już obsługiwane, gdy aplikacje są uruchamiane przy użyciu polecenia "Uruchom jako inny użytkownik". Począwszy od programu .NET Framework 4.6.2, aplikacje uruchamiane w ten sposób nie będą już nieoczekiwanie ulegać awarii — zamiast tego moduł sprawdzania pisowni zostanie dyskretnie wyłączony. Problem nr 3 — ten problem został rozwiązany w programie .NET Framework 4.6.2.

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

Dotyczy interfejsów API

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