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
- Attribute.GetCustomAttribute(MemberInfo, Type)
- Attribute.GetCustomAttribute(MemberInfo, Type, Boolean)
- Attribute.GetCustomAttributes(MemberInfo)
- Attribute.GetCustomAttributes(MemberInfo, Boolean)
- Attribute.GetCustomAttributes(MemberInfo, Type)
- Attribute.GetCustomAttributes(MemberInfo, Type, Boolean)
- CustomAttributeExtensions.GetCustomAttribute(MemberInfo, Type)
- CustomAttributeExtensions.GetCustomAttribute(MemberInfo, Type, Boolean)
- CustomAttributeExtensions.GetCustomAttribute<T>(MemberInfo)
- CustomAttributeExtensions.GetCustomAttribute<T>(MemberInfo, Boolean)
- CustomAttributeExtensions.GetCustomAttributes(MemberInfo)
- CustomAttributeExtensions.GetCustomAttributes(MemberInfo, Boolean)
- CustomAttributeExtensions.GetCustomAttributes(MemberInfo, Type)
- CustomAttributeExtensions.GetCustomAttributes(MemberInfo, Type, Boolean)
- CustomAttributeExtensions.GetCustomAttributes<T>(MemberInfo)
- CustomAttributeExtensions.GetCustomAttributes<T>(MemberInfo, Boolean)
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:
- System.Reflection.Assembly
- System.Reflection.MemberInfo (i jego typy pochodne, w tym System.Reflection.FieldInfo, System.Reflection.MethodInfo, System.Typei System.Reflection.TypeInfo)
- System.Reflection.MethodBody
- System.Reflection.Module
- System.Reflection.ParameterInfo
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
- System.Reflection.Assembly
- System.Reflection.FieldInfo
- System.Reflection.MemberInfo
- System.Reflection.MethodBody
- System.Reflection.MethodInfo
- System.Reflection.Module
- System.Reflection.ParameterInfo
- System.Reflection.TypeInfo
- System.Type
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
- DataContractJsonSerializer(Type)
- DataContractJsonSerializer(Type, IEnumerable<Type>)
- DataContractJsonSerializer(Type, DataContractJsonSerializerSettings)
- DataContractJsonSerializer(Type, String)
- DataContractJsonSerializer(Type, String, IEnumerable<Type>)
- DataContractJsonSerializer(Type, XmlDictionaryString)
- DataContractJsonSerializer(Type, XmlDictionaryString, IEnumerable<Type>)
- DataContractJsonSerializer(Type, IEnumerable<Type>, Int32, Boolean, IDataContractSurrogate, Boolean)
- DataContractJsonSerializer(Type, String, IEnumerable<Type>, Int32, Boolean, IDataContractSurrogate, Boolean)
- DataContractJsonSerializer(Type, XmlDictionaryString, IEnumerable<Type>, Int32, Boolean, IDataContractSurrogate, Boolean)
- DataContractSerializer(Type)
- DataContractSerializer(Type, DataContractSerializerSettings)
- DataContractSerializer(Type, IEnumerable<Type>)
- DataContractSerializer(Type, String, String)
- DataContractSerializer(Type, String, String, IEnumerable<Type>)
- DataContractSerializer(Type, XmlDictionaryString, XmlDictionaryString)
- DataContractSerializer(Type, XmlDictionaryString, XmlDictionaryString, IEnumerable<Type>)
- DataContractSerializer(Type, IEnumerable<Type>, Int32, Boolean, Boolean, IDataContractSurrogate)
- DataContractSerializer(Type, IEnumerable<Type>, Int32, Boolean, Boolean, IDataContractSurrogate, DataContractResolver)
- DataContractSerializer(Type, String, String, IEnumerable<Type>, Int32, Boolean, Boolean, IDataContractSurrogate)
- DataContractSerializer(Type, String, String, IEnumerable<Type>, Int32, Boolean, Boolean, IDataContractSurrogate, DataContractResolver)
- DataContractSerializer(Type, XmlDictionaryString, XmlDictionaryString, IEnumerable<Type>, Int32, Boolean, Boolean, IDataContractSurrogate)
- DataContractSerializer(Type, XmlDictionaryString, XmlDictionaryString, IEnumerable<Type>, Int32, Boolean, Boolean, IDataContractSurrogate, DataContractResolver)
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 kluczuHKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Full
została zmieniona na4.6.xxxxx
dla programu .NET Framework 4.6 i jego wersji punktów oraz dla4.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ł format4.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.42000
wersji . W programie .NET Framework 4, 4.5, 4.5.1 i 4.5.2 zwraca ciągi wersji w formacie4.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:
- Aby wykryć wersję środowiska uruchomieniowego programu .NET Framework, zobacz Instrukcje: określanie, które wersje programu .NET Framework są zainstalowane.
- Aby określić ścieżkę instalacji dla programu .NET Framework, użyj wartości
InstallPath
wpisu w kluczuHKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Full
.
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>
- Jeśli powiązanie jest dynamicznie konfigurowane w kodzie źródłowym, zaktualizuj TcpTransportSecurity.SslProtocols właściwość tak, aby używała protokołu TLS 1.1 (SslProtocols.Tls11 lub starszej wersji protokołu w kodzie źródłowym.
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
- Char.GetUnicodeCategory(Char)
- CharUnicodeInfo.GetUnicodeCategory(Char)
- CharUnicodeInfo.GetUnicodeCategory(String, Int32)
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
- DSACng(CngKey)
- DSACng.Key
- DSACng.LegalKeySizes
- DSACng.CreateSignature(Byte[])
- DSACng.VerifySignature(Byte[], Byte[])
- RSACng(CngKey)
- RSACng.Key
- RSACng.Decrypt(Byte[], RSAEncryptionPadding)
- RSACng.SignHash(Byte[], HashAlgorithmName, RSASignaturePadding)
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
- System.Security.Cryptography.Xml.Transform
- System.Security.Cryptography.Xml.XmlDsigXPathTransform
- System.Security.Cryptography.Xml.XmlDsigXsltTransform
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.