Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Tento článek obsahuje seznam problémů s kompatibilitou aplikací, které byly zavedeny v rozhraní .NET Framework 4.6, 4.6.1 a 4.6.2.
.NET Framework 4.6
ASP.NET
GridView s AllowCustomPaging nastaveno na true může aktivovat událost PageIndexChanging při opuštění poslední stránky zobrazení.
Podrobnosti
Chyba v .NET Framework 4.5 způsobuje, že se System.Web.UI.WebControls.GridView.PageIndexChanging někdy nespustí pro System.Web.UI.WebControls.GridViews, které mají povolené System.Web.UI.WebControls.GridView.AllowCustomPaging.
Návrh
Tento problém je opravený v rozhraní .NET Framework 4.6 a je možné ho vyřešit upgradem na tuto verzi rozhraní .NET Framework. Jako alternativní řešení může aplikace provést explicitní BindGrid na libovolném Page_Load , který by dosáhl těchto podmínek ( System.Web.UI.WebControls.GridView je na poslední stránce a PosledníSystem.Web.UI.WebControls.GridView.PageSize se liší od System.Web.UI.WebControls.GridView.PageSize). Případně můžete aplikaci upravit tak, aby umožňovala stránkování (místo vlastního stránkování), protože tento scénář problém neukazuje.
| Název | Hodnota |
|---|---|
| Scope | Nezletilý |
| Verze | 4.5 |
| Typ | Provozní doba |
Ovlivněná rozhraní API
Základ
ConcurrentDictionary serializovaný v rozhraní .NET Framework 4.5 s NetDataContractSerializer nelze deserializovat rozhraním .NET Framework 4.5.1 nebo 4.5.2
Podrobnosti
Vzhledem k interním změnám typu ConcurrentDictionary<TKey,TValue> nelze objekty serializované pomocí rozhraní .NET Framework 4.5 pomocí System.Runtime.Serialization.NetDataContractSerializer deserializovat v rozhraní .NET Framework 4.5.1 nebo v rozhraní .NET Framework 4.5.2.Všimněte si, že přechod v opačném směru (serializace s rozhraním .NET Framework 4.5.x a deserializace s rozhraním .NET Framework 4.5) funguje. Podobně všechna serializace 4.x napříč verzemi funguje s rozhraním .NET Framework 4.6.Serializace a deserializace s jedinou verzí rozhraní .NET Framework není ovlivněna.
Návrh
Pokud je nutné serializovat a deserializovat System.Collections.Concurrent.ConcurrentDictionary<TKey,TValue> mezi rozhraním .NET Framework 4.5 a .NET Framework 4.5.1/4.5.2, měl by být použit jiný serializátor, například System.Runtime.Serialization.DataContractSerializer místo System.Runtime.Serialization.NetDataContractSerializer. Alternativně, protože tento problém je vyřešen v rozhraní .NET Framework 4.6, může být vyřešen upgradem na tuto verzi rozhraní .NET Framework.
| Název | Hodnota |
|---|---|
| Scope | Nezletilý |
| Verze | 4.5.1 |
| Typ | Provozní doba |
Ovlivněná rozhraní API
Nedetekovatelné prostřednictvím analýzy rozhraní API.
AppDomainSetup.DynamicBase už není randomizován metodou UseRandomizedStringHashAlgorithm
Podrobnosti
Před rozhraním .NET Framework 4.6 by byla hodnota DynamicBase randomizována mezi doménami aplikace nebo mezi procesy, pokud byl v konfiguračním souboru aplikace povolen parametr UseRandomizedStringHashAlgorithm. Počínaje rozhraním .NET Framework 4.6 DynamicBase vrátí stabilní výsledek mezi různými instancemi spuštěné aplikace a mezi různými doménami aplikace. Dynamické základny se budou nadále lišit pro různé aplikace; tato změna odebere pouze náhodný prvek pojmenování pro různé instance stejné aplikace.
Návrh
Mějte na paměti, že povolení UseRandomizedStringHashAlgorithm nebude mít za DynamicBase následek randomizaci. Pokud je potřeba náhodný základ, musí se vytvořit v kódu vaší aplikace, nikoli prostřednictvím tohoto rozhraní API.
| Název | Hodnota |
|---|---|
| Scope | Edge |
| Verze | 4.6 |
| Typ | Provozní doba |
Ovlivněná rozhraní API
Volání Attribute.GetCustomAttributes u vlastnosti indexeru už nevyvolá AmbiguousMatchException, pokud lze nejednoznačnost vyřešit podle typu indexu.
Podrobnosti
Před rozhraním .NET Framework 4.6 by volání GetCustomAttribute(s) na vlastnost indexeru, která se liší od jiné vlastnosti pouze typem indexu, mělo za výsledek System.Reflection.AmbiguousMatchException. Počínaje rozhraním .NET Framework 4.6 se atributy vlastnosti vrátí správně.
Návrh
Mějte na paměti, že GetCustomAttribute(s) budou nyní fungovat častěji. Pokud se aplikace dříve spoléhala na System.Reflection.AmbiguousMatchException, nyní by se místo toho měla použít reflexe pro explicitní vyhledání více indexerů.
| Název | Hodnota |
|---|---|
| Scope | Edge |
| Verze | 4.6 |
| Typ | Provozní doba |
Ovlivněná rozhraní 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)
Profilátory neprovádějí enumeraci COR_PRF_GC_ROOT_HANDLEs.
Podrobnosti
V rozhraní .NET Framework v4.5.1 se rozhraní API RootReferences2() pro profilaci chybně nikdy nevrací COR_PRF_GC_ROOT_HANDLE (místo toho se chybně vrací jako COR_PRF_GC_ROOT_OTHER). Tento problém je opravený od rozhraní .NET Framework 4.6.
Návrh
Tento problém je opravený v rozhraní .NET Framework 4.6 a je možné ho vyřešit upgradem na tuto verzi rozhraní .NET Framework.
| Název | Hodnota |
|---|---|
| Scope | Nezletilý |
| Verze | 4.5.1 |
| Typ | Provozní doba |
Ovlivněná rozhraní API
Nedetekovatelné prostřednictvím analýzy rozhraní API.
ETW EventListeners nezachytávají události od poskytovatelů s explicitními klíčovými slovy (jako je poskytovatel TPL).
Podrobnosti
Posluchače událostí ETW s prázdnou maskou klíčových slov nezachytávají správně události od poskytovatelů s explicitními klíčovými slovy. V rozhraní .NET Framework 4.5 začal poskytovatel TPL poskytovat explicitní klíčová slova a aktivoval tento problém. V rozhraní .NET Framework 4.6 byly EventListeners aktualizovány tak, aby už tento problém neměly.
Návrh
Chcete-li tento problém obejít, nahraďte volání EnableEvents(EventSource, EventLevel) voláním přetížení EnableEvents, které explicitně určuje masku „any keywords“, která se má použít: EnableEvents(eventSource, level, unchecked((EventKeywords)0xFFFFffffFFFFffff)).
Případně je tento problém opravený v rozhraní .NET Framework 4.6 a je možné ho vyřešit upgradem na tuto verzi rozhraní .NET Framework.
| Název | Hodnota |
|---|---|
| Scope | Edge |
| Verze | 4.5 |
| Typ | Provozní doba |
Ovlivněná rozhraní API
Perský kalendář nyní používá sluneční algoritmus Hidžra
Podrobnosti
Počínaje rozhraním .NET Framework 4.6 používá System.Globalization.PersianCalendar třída sluneční algoritmus Hidžra. Převod kalendářních dat mezi System.Globalization.PersianCalendar a jinými kalendáři může od verze .NET Framework 4.6 produkovat mírně odlišné výsledky pro data před rokem 1800 nebo po roce 2023 (Gregoriánský). Také PersianCalendar.MinSupportedDateTime je nyní March 22, 0622 místo March 21, 0622.
Návrh
Mějte na paměti, že při použití perského kalendáře v rozhraní .NET Framework 4.6 se některá časná nebo pozdní data mohou mírně lišit. Při serializaci kalendářních dat mezi procesy, které se můžou spouštět v různých verzích rozhraní .NET Framework, je neukládejte jako řetězce kalendářních dat PerskýCalendar (protože tyto hodnoty mohou být odlišné).
| Název | Hodnota |
|---|---|
| Scope | Nezletilý |
| Verze | 4.6 |
| Typ | Provozní doba |
Ovlivněná rozhraní API
Objekty reflexe již nelze předávat ze spravovaného kódu do klientů DCOM mimo proces.
Podrobnosti
Objekty reflexe už nelze předávat ze spravovaného kódu do meziprocesových DCOM klientů. Ovlivněny jsou následující typy:
- System.Reflection.Assembly
- System.Reflection.MemberInfo (a jeho odvozené typy, včetně System.Reflection.FieldInfo, System.Reflection.MethodInfo, System.Typea System.Reflection.TypeInfo)
- System.Reflection.MethodBody
- System.Reflection.Module
- System.Reflection.ParameterInfo
Volání pro objekt IMarshal se vrací E_NOINTERFACE.
Návrh
Aktualizujte marshalingový kód tak, aby fungoval s objekty bez reflexe.
| Název | Hodnota |
|---|---|
| Scope | Nezletilý |
| Verze | 4.6 |
| Typ | Provozní doba |
Ovlivněná rozhraní 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 pro výchozí doménu aplikace již automaticky nenastaví na null, pokud není explicitně zadán.
Podrobnosti
Ve výchozí doméně aplikace bylo System.AppDomainSetup.TargetFrameworkName dříve nastaveno na null, pokud nebylo explicitně nastaveno jinak. Od verze 4.6 System.AppDomainSetup.TargetFrameworkName bude mít vlastnost výchozí domény aplikace výchozí hodnotu odvozenou od TargetFrameworkAttribute (pokud existuje). Jiné než výchozí domény aplikace budou nadále dědit svou konkrétní hodnotu System.AppDomainSetup.TargetFrameworkName z výchozí domény aplikace (která ve verzi 4.6 nebude mít za výchozí hodnotu null), pokud není explicitně přepsána.
Návrh
Kód by se měl aktualizovat tak, aby nezávisí na TargetFrameworkName výchozím nastavení null. Pokud je nutné, aby tato vlastnost nadále vyhodnocovala hodnotu null, může být explicitně nastavena na tuto hodnotu.
| Název | Hodnota |
|---|---|
| Scope | Edge |
| Verze | 4.6 |
| Typ | Provozní doba |
Ovlivněná rozhraní API
X509Certificate2.ToString(Boolean) se teď nevyvolá, když .NET nemůže zpracovat certifikát
Podrobnosti
V rozhraní .NET Framework 4.5.2 a starších verzích by tato metoda vyvolá, pokud true byla předána pro podrobný parametr a byly nainstalovány certifikáty, které rozhraní .NET Framework nepodporuje. Teď bude metoda úspěšná a vrátí platný řetězec, který vynechá nepřístupné části certifikátu.
Návrh
Každý kód závislý na X509Certificate2.ToString(Boolean) by měl být aktualizován tak, aby očekával, že vrácený řetězec může v některých případech vyloučit některá data certifikátu (například veřejný klíč, privátní klíč a rozšíření), kdy by rozhraní API dříve vyvolalo chybu.
| Název | Hodnota |
|---|---|
| Scope | Edge |
| Verze | 4.6 |
| Typ | Provozní doba |
Ovlivněná rozhraní API
Údaje
Pokus o připojení TCP/IP k databázi SQL Serveru, která se překládá jako localhost neúspěšná
Podrobnosti
V rozhraní .NET Framework 4.6 a 4.6.1 se při pokusu o připojení TCP/IP k databázi SQL Serveru, která se vyřeší localhost, končí chybou: "Došlo k chybě související se sítí nebo specifickou instancí při navazování připojení k SQL Serveru." Server nebyl nalezen nebo nebyl přístupný. Ověřte, že je název instance správný a zda je SQL Server nakonfigurovaný tak, aby povoloval vzdálená připojení. (zprostředkovatel: Síťová rozhraní SQL, chyba: 26 – Chyba při zjišťování zadaného serveru nebo instance)"
Návrh
Tento problém byl vyřešen a předchozí chování obnovené v rozhraní .NET Framework 4.6.2. Pokud se chcete připojit k databázi SQL Serveru, která se vyhodnocuje na localhost, upgradujte na rozhraní .NET Framework 4.6.2.
| Název | Hodnota |
|---|---|
| Scope | Nezletilý |
| Verze | 4.6 |
| Typ | Provozní doba |
Ovlivněná rozhraní API
Nedetekovatelné prostřednictvím analýzy rozhraní API.
Debugger
Hodnoty nulového coalesceru nejsou v ladicím programu viditelné až do jednoho kroku později.
Podrobnosti
Chyba v rozhraní .NET Framework 4.5 způsobí, že hodnoty nastavené prostřednictvím operace sloučování s hodnotou null nebudou viditelné v ladicím programu ihned po spuštění operace přiřazení při spuštění v 64bitové verzi rozhraní Framework.
Návrh
Při dalším krokování v ladicím programu se hodnota lokální proměnné/pole správně aktualizuje. Tento problém byl opraven také v rozhraní .NET Framework 4.6; tento problém by měl vyřešit upgradem na danou verzi rozhraní.
| Název | Hodnota |
|---|---|
| Scope | Edge |
| Verze | 4.5 |
| Typ | Provozní doba |
Ovlivněná rozhraní API
Nedetekovatelné prostřednictvím analýzy rozhraní API.
Sítě
ContentDisposition DateTimes vrací mírně odlišný řetězec.
Podrobnosti
Řetězcové reprezentace System.Net.Mime.ContentDisposition byly aktualizovány od verze 4.6 tak, aby vždy představovaly hodinovou složku System.DateTime se dvěma číslicemi. To je v souladu s RFC822 a RFC2822. To způsobí, že ToString() vrátí mírně odlišný řetězec ve verzi 4.6 ve scénářích, kdy jeden z časových prvků nastavení byl před 10:00 dopoledne. Všimněte si, že někdy dochází k serializaci ContentDispositions převodem na řetězce, takže všechny operace ToString(), serializace nebo volání GetHashCode by se měly zkontrolovat.
Návrh
Neočekávejte, že řetězcové reprezentace ContentDispositions z různých verzí rozhraní .NET Framework se správně porovnávají s ostatními. Pokud je to možné, převeďte řetězce zpět na ContentDispositions před provedením porovnání.
| Název | Hodnota |
|---|---|
| Scope | Nezletilý |
| Verze | 4.6 |
| Typ | Provozní doba |
Ovlivněná rozhraní API
Serializace
Zpráva o výjimce se změnila pro neúspěšnou serializaci DataContract v případě neznámého typu
Podrobnosti
Počínaje rozhraním .NET Framework 4.6 byla zpráva o výjimce objasněna, pokud se serializace nebo deserializace System.Runtime.Serialization.DataContractSerializer nebo System.Runtime.Serialization.Json.DataContractJsonSerializer nezdaří kvůli chybějícím "známým typům".
Návrh
Aplikace by neměly záviset na konkrétních zprávách výjimek. Pokud aplikace závisí na této zprávě, buď ji aktualizujte, aby očekávala novou zprávu, nebo ji (pokud možno) změňte tak, aby závisela jenom na typu výjimky.
| Název | Hodnota |
|---|---|
| Scope | Edge |
| Verze | 4.6 |
| Typ | Provozní doba |
Ovlivněná rozhraní 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)
Nastavení a nasazení
Změny verzí produktu v rozhraní .NET Framework 4.6 a novějších verzích
Podrobnosti
Verzování produktu se změnilo oproti předchozím verzím rozhraní .NET Framework, a zejména oproti rozhraní .NET Framework 4, 4.5, 4.5.1 a 4.5.2. Následují podrobné změny:
- Hodnota
Versionpoložky vHKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Fullklíči se změnila na4.6.xxxxxpro rozhraní .NET Framework 4.6 a jeho bodové verze a na4.7.xxxxx.NET Framework 4.7 a 4.7.1. V rozhraní .NET Framework 4.5, 4.5.1 a 4.5.2 měl formát4.5.xxxxx. - Verzování souborů a produktu pro soubory rozhraní .NET Framework se změnilo z dřívějšího schématu verzování 4.0.30319.x na 4.6.X.0 pro rozhraní .NET Framework 4.6 a jeho dílčí verze, a na 4.7.X.0 pro rozhraní .NET Framework 4.7 a 4.7.1. Tyto nové hodnoty můžete zobrazit při zobrazení vlastností souboru po kliknutí pravým tlačítkem myši na soubor.
- Atributy AssemblyFileVersionAttribute a AssemblyInformationalVersionAttribute spravovaných sestavení mají hodnoty verze ve formátu 4.6.X.0 pro .NET Framework 4.6 a jeho dílčí verze, a 4.7.X.0 pro .NET Framework 4.7 a 4.7.1.
- V rozhraní .NET Framework 4.6, 4.6.1, 4.6.2, 4.7 a 4.7.1 vrací vlastnost Environment.Version řetězec pevné verze
4.0.30319.42000. V rozhraní .NET Framework 4, 4.5, 4.5.1 a 4.5.2 vrátí řetězce verzí ve formátu4.0.30319.xxxxx(například 4.0.30319.18010). Všimněte si, že nedoporučujeme kód aplikace, který přebírá novou závislost na vlastnosti Environment.Version.
Další informace naleznete v tématu Postupy: Určení, které verze rozhraní .NET Framework jsou nainstalovány.
Návrh
Obecně platí, že aplikace by měly záviset na doporučených technikách pro detekci takových věcí, jako je verze modulu runtime rozhraní .NET Framework a instalačního adresáře:
- Pokud chcete zjistit verzi modulu runtime rozhraní .NET Framework, přečtěte si téma Postupy: Určení nainstalovaných verzí rozhraní .NET Framework.
- Chcete-li určit instalační cestu pro rozhraní .NET Framework, použijte hodnotu
InstallPathpoložky v klíčiHKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Full.
Důležité
Název podklíče je NET Framework Setup, ne .NET Framework Setup.
- Chcete-li určit cestu k adresáři rozhraní common language runtime .NET Framework, zavolejte metodu RuntimeEnvironment.GetRuntimeDirectory().
- Pokud chcete získat verzi CLR, zavolejte metodu RuntimeEnvironment.GetSystemVersion() . Pro rozhraní .NET Framework 4 a jeho bodové verze (rozhraní .NET Framework 4.5, 4.5.1, 4.5.2 a .NET Framework 4.6, 4.6.1, 4.6.2, 4.7 a 4.7.1) vrátí řetězec v4.0.30319.
| Název | Hodnota |
|---|---|
| Scope | Nezletilý |
| Verze | 4.6 |
| Typ | Provozní doba |
Ovlivněná rozhraní API
Nedetekovatelné prostřednictvím analýzy rozhraní API.
Rozhraní .NET Framework 4.6 při registraci v registru nepoužívá verzi 4.5.x.x.
Podrobnosti
Jak se dá očekávat, klíč verze nastavený v registru na HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\NET Framework Setup\NDP\v4\Full pro rozhraní .NET Framework 4.6 začíná '4.6', nikoli '4.5'. Aplikace, které závisí na těchto klíčích registru, aby věděly, které verze rozhraní .NET Framework jsou nainstalované na počítači, by se měly aktualizovat, aby pochopili, že verze 4.6 je nová možná verze a ta, která je kompatibilní s předchozími verzemi 4.5.x.
Návrh
Aplikace, které zjišťují instalaci rozhraní .NET Framework 4.5 vyhledáním klíčů registru 4.5, aktualizujte také tak, aby přijímaly verzi 4.6.
| Název | Hodnota |
|---|---|
| Scope | Edge |
| Verze | 4.6 |
| Typ | Provozní doba |
Ovlivněná rozhraní API
Nedetekovatelné prostřednictvím analýzy rozhraní API.
WCF (Windows Communication Foundation)
Služby WCF, které používají NETTCP se zabezpečením SSL a ověřováním certifikátů MD5
Podrobnosti
Rozhraní .NET Framework 4.6 přidává protokol TLS 1.1 a TLS 1.2 do seznamu výchozích protokolů WCF SSL. Pokud mají klientské i serverové počítače nainstalované rozhraní .NET Framework 4.6 nebo novější, použije se pro vyjednávání protokol TLS 1.2. Protokol TLS 1.2 nepodporuje ověřování certifikátů MD5. V důsledku toho, pokud zákazník používá certifikát MD5, klient WCF se nepodaří připojit ke službě WCF.
Návrh
Tento problém můžete vyřešit tak, aby se klient WCF mohl připojit k serveru WCF provedením některého z následujících kroků:
- Aktualizujte certifikát tak, aby nepoužít algoritmus MD5. Toto je doporučené řešení.
- Pokud není vazba dynamicky nakonfigurovaná ve zdrojovém kódu, aktualizujte konfigurační soubor aplikace tak, aby používal protokol TLS 1.1 nebo starší verzi protokolu. Díky tomu můžete dál používat certifikát s algoritmem hash MD5.
Výstraha
Toto alternativní řešení se nedoporučuje, protože certifikát s hashovacím algoritmem MD5 se považuje za nezabezpečený.
Tento konfigurační soubor provede následující:
<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>
- Pokud je vazba dynamicky nakonfigurovaná ve zdrojovém kódu, aktualizujte TcpTransportSecurity.SslProtocols vlastnost tak, aby používala protokol TLS 1.1 (SslProtocols.Tls11 nebo starší verzi protokolu ve zdrojovém kódu.
Výstraha
Toto alternativní řešení se nedoporučuje, protože certifikát s hashovacím algoritmem MD5 se považuje za nezabezpečený.
| Název | Hodnota |
|---|---|
| Scope | Nezletilý |
| Verze | 4.6 |
| Typ | Provozní doba |
Ovlivněná rozhraní API
Nedetekovatelné prostřednictvím analýzy rozhraní API.
Windows Presentation Foundation (WPF)
Přístup k vybraným položkám WPF DataGridu z obslužné rutiny události DataGrid's UnloadingRow může způsobit nullReferenceException
Podrobnosti
Kvůli chybě v rozhraní .NET Framework 4.5 mohou obslužné rutiny událostí pro DataGrid události související s odebráním řádku způsobit vyvolání System.NullReferenceException, pokud přistupují k vlastnostem DataGrid, jako jsou System.Windows.Controls.Primitives.Selector.SelectedItem nebo System.Windows.Controls.Primitives.MultiSelector.SelectedItems.
Návrh
Tento problém je opravený v rozhraní .NET Framework 4.6 a je možné ho vyřešit upgradem na tuto verzi rozhraní .NET Framework.
| Název | Hodnota |
|---|---|
| Scope | Nezletilý |
| Verze | 4.5 |
| Typ | Provozní doba |
Ovlivněná rozhraní API
Volání Items.Refresh ve WPF ListBox, ListView nebo DataGrid s vybranými položkami může způsobit, že se v elementu zobrazí duplicitní položky.
Podrobnosti
Ve verzi .NET Framework 4.5 může volání ListBox.Items.Refresh z kódu, zatímco jsou v System.Windows.Controls.ListBox vybrány položky, způsobit duplikování vybraných položek v seznamu. K podobnému problému dochází s System.Windows.Controls.ListView a System.Windows.Controls.DataGrid. Toto je opraveno v rozhraní .NET Framework 4.6.
Návrh
Tento problém může být vyřešen programovým zrušením výběru položek před System.Windows.Data.CollectionView.Refresh() voláním a jejich opětovným výběrem po dokončení hovoru. Případně je tento problém opravený v rozhraní .NET Framework 4.6 a je možné ho vyřešit upgradem na tuto verzi rozhraní .NET Framework.
| Hodnota | |
|---|---|
| Rozsah | Nezletilý |
| Verze | 4.5 |
| Typ | Provozní doba |
Ovlivněná rozhraní API
VynutitJeVýběrovýBoxZvýrazněn
Podrobnosti
Určité posloupnosti akcí zahrnující System.Windows.Controls.ComboBox a jeho zdroj dat mohou mít za následek System.NullReferenceException.
Návrh
Pokud je to možné, upgradujte na rozhraní .NET Framework 4.6.2.
| Název | Hodnota |
|---|---|
| Scope | Nezletilý |
| Verze | 4.6 |
| Typ | Provozní doba |
Ovlivněná rozhraní API
Problém s vazbou ListBoxItem IsSelected u ObservableCollection<T>.Move
Podrobnosti
Volání Move(Int32, Int32) nebo MoveItem(Int32, Int32) na kolekci vázanou na System.Windows.Controls.ListBox s vybranými položkami může vést k nepravidelnému chování při budoucím výběru nebo odebrání výběru System.Windows.Controls.ListBox položek.
Návrh
Volání System.Collections.ObjectModel.Collection<T>.Remove(T) a System.Collections.ObjectModel.Collection<T>.Insert(Int32, T) místo Move(Int32, Int32) vyřeší tento problém. Případně je tento problém opravený v rozhraní .NET Framework 4.6 a je možné ho vyřešit upgradem na tuto verzi rozhraní .NET Framework.
| Název | Hodnota |
|---|---|
| Scope | Nezletilý |
| Verze | 4.5 |
| Typ | Provozní doba |
Ovlivněná rozhraní API
Kliknutí pravým tlačítkem myši na záhlaví řádku WPF DataGrid změní výběr DataGridu.
Podrobnosti
Kliknutím pravým tlačítkem myši na záhlaví vybraného System.Windows.Controls.DataGrid řádku, zatímco je vybráno více řádků, se změní výběr System.Windows.Controls.DataGrid pouze na tento řádek.
Návrh
Tento problém je opravený v rozhraní .NET Framework 4.6 a je možné ho vyřešit upgradem na tuto verzi rozhraní .NET Framework.
| Název | Hodnota |
|---|---|
| Scope | Edge |
| Verze | 4.5 |
| Typ | Provozní doba |
Ovlivněná rozhraní API
WPF vytvoří proces wisptis.exe, který může zaseknout myš.
Podrobnosti
Ve verzi 4.5.2 byl zaveden problém, který způsobuje wisptis.exe, že může zamrznout vstup myši.
Návrh
Oprava tohoto problému je k dispozici v servisní verzi rozhraní .NET Framework 4.5.2 (kumulativní oprava hotfix 3026376) nebo upgradem na rozhraní .NET Framework 4.6
| Název | Hodnota |
|---|---|
| Scope | Hlavní |
| Verze | 4.5.2 |
| Typ | Provozní doba |
Ovlivněná rozhraní API
Nedetekovatelné prostřednictvím analýzy rozhraní API.
Kontrola pravopisu WPF v ovládacích prvcích s povoleným textem nebude ve Windows 10 fungovat pro jazyky, které nejsou v seznamu jazyků zadávání operačního systému.
Podrobnosti
Při spuštění ve Windows 10 nemusí kontrola pravopisu fungovat u ovládacích prvků s podporou textu WPF, protože funkce kontroly pravopisu platformy jsou dostupné jenom pro jazyky, které jsou přítomné v seznamu vstupních jazyků. Když se ve Windows 10 přidá jazyk do seznamu dostupných klávesnic, Systém Windows automaticky stáhne a nainstaluje odpovídající balíček funkce na vyžádání (FOD), který poskytuje funkce kontroly pravopisu. Přidáním jazyka do seznamu vstupních jazyků bude kontrola pravopisu podporována.
Návrh
Mějte na paměti, že jazyk nebo text, který se má kontrolovat pravopisem, musí být přidán jako vstupní jazyk, aby kontrola pravopisu fungovala ve Windows 10.
| Název | Hodnota |
|---|---|
| Scope | Edge |
| Verze | 4.6 |
| Typ | Provozní doba |
Ovlivněná rozhraní API
Nedetekovatelné prostřednictvím analýzy rozhraní API.
Okna WPF se vykreslují bez výřezu při rozšíření mimo jeden monitor.
Podrobnosti
V rozhraní .NET Framework 4.6 spuštěném ve Windows 8 a novějším se zobrazí celé okno bez výřezu, když se rozšíří mimo jeden displej ve scénáři s více monitory. To se liší od předchozích verzí rozhraní .NET Framework, které by ořížily okna WPF, která se prodloužila nad rámec jednoho displeje.
Návrh
Toto chování (bez ohledu na to, jestli chcete klipovat nebo ne), je možné explicitně nastavit pomocí elementu <EnableMultiMonitorDisplayClipping> v <appSettings> konfiguračním souboru aplikace nebo nastavením EnableMultiMonitorDisplayClipping vlastnosti při spuštění aplikace.
| Název | Hodnota |
|---|---|
| Scope | Nezletilý |
| Verze | 4.6 |
| Typ | Provozní doba |
Ovlivněná rozhraní API
Nedetekovatelné prostřednictvím analýzy rozhraní API.
.NET Framework 4.6.1
Nářadí
Contract.Invariant nebo Contract.Requires<TException> nepovažují String.IsNullOrEmpty za čistý
Podrobnosti
U aplikací, které cílí na rozhraní .NET Framework 4.6.1, pokud invariantní smlouva pro Contract.Invariant nebo předběžná podmínka pro Requires volá metodu String.IsNullOrEmpty, přepisovač vygeneruje upozornění kompilátoru CC1036: "Bylo zjištěno volání metody 'System.String.IsNullOrWhiteSpace(System.String)' bez [Pure] v metodě." Jedná se o upozornění kompilátoru, nikoli o chybu kompilátoru.
Návrh
Toto chování bylo vyřešeno v problému GitHubu č. 339. Pokud chcete toto upozornění odstranit, můžete si stáhnout a zkompilovat aktualizovanou verzi zdrojového kódu pro nástroj Code Contracts z GitHubu. Informace o stažení najdete v dolní části stránky.
| Název | Hodnota |
|---|---|
| Scope | Nezletilý |
| Verze | 4.6.1 |
| Typ | Provozní doba |
Ovlivněná rozhraní API
Windows Presentation Foundation (WPF)
Posouvání plochého seznamu s položkami s jinou výškou pixelů
Podrobnosti
System.Windows.Controls.ItemsControl Když se zobrazí kolekce pomocí virtualizace (IsVirtualizing=true) a posouvání položek (ScrollUnit=Item) a když se ovládací prvek posune a zobrazí položku, jejíž výška v pixelech se liší od jejích sousedů, System.Windows.Controls.VirtualizingStackPanel postupně prochází všechny položky v kolekci. Uživatelské rozhraní během této iterace nereaguje. Iterace probíhá za jiných okolností, a to i v předchozích verzích rozhraní .NET Framework. Například při posouvání v pixelech (ScrollUnit=Pixel) při zobrazení položky s jinou výškou pixelu a při posouvání hierarchických dat (například System.Windows.Controls.TreeView nebo System.Windows.Controls.ItemsControl s povoleným seskupením) při výskytu položky s jiným počtem následnických položek, než jsou jeho sousedé. V případě posouvání položek a jiné výšky pixelů byla iterace zavedena v rozhraní .NET Framework 4.6.1, aby se opravily chyby v rozložení hierarchických dat. Není potřeba, pokud jsou data plochá (žádná hierarchie) a rozhraní .NET Framework 4.6.2 je v takovém případě neprovede.
Návrh
Pokud k iteraci dochází v rozhraní .NET Framework 4.6.1, ale ne v dřívějších verzích — to znamená, že System.Windows.Controls.ItemsControl prochází položky při posouvání plochého seznamu s položkami s různou výškou pixelů — existují dva nápravné prostředky:
- Nainstalujte rozhraní .NET Framework 4.6.2.
- Nainstalujte opravu hotfix HR 1605 pro rozhraní .NET Framework 4.6.1.
| Název | Hodnota |
|---|---|
| Scope | Nezletilý |
| Verze | 4.6.1 |
| Typ | Provozní doba |
Ovlivněná rozhraní API
ObjectDisposedException vyvolaný kontrolou pravopisu WPF
Podrobnosti
Aplikace WPF se občas chybově ukončují během vypnutí aplikace s System.ObjectDisposedException vyvolaným kontrolou pravopisu. Tento problém je opravený v rozhraní .NET Framework 4.7 WPF tím, že řádně zpracovává výjimku, a tím zajišťuje, aby aplikace již nebyly nepříznivě ovlivněny. Je třeba poznamenat, že občasné výjimky s první šancí budou nadále pozorovány v aplikacích spuštěných v ladicím programu.
Návrh
Upgrade na rozhraní .NET Framework 4.7
| Název | Hodnota |
|---|---|
| Scope | Edge |
| Verze | 4.6.1 |
| Typ | Provozní doba |
Ovlivněná rozhraní API
Nedetekovatelné prostřednictvím analýzy rozhraní API.
Kontrola pravopisu WPF selhává neočekávanými způsoby
Podrobnosti
To zahrnuje řadu problémů s kontrolou pravopisu WPF:
- Kontrola pravopisu WPF někdy vyhazuje System.Runtime.InteropServices.COMException
- Kontrola pravopisu WPF selže, když se aplikace spustí pomocí příkazu 'Spustit jako jiný uživatel' UnauthorizedAccessException.
- Kontrola pravopisu WPF nesprávně identifikuje pravopisné chyby ve složených slovech, jako je "Hausnummer" v němčině.
Návrh
Problém č. 1 – Tento problém je opravený v rozhraní .NET Framework 4.6.2 # 2 – Kontrola pravopisu WPF už není podporována při spuštění aplikací s použitím příkazu Spustit jako jiný uživatel. Počínaje rozhraním .NET Framework 4.6.2 aplikace spouštěné tímto způsobem již nebudou neočekávaně ukončeny - místo toho bude kontrola pravopisu tiše deaktivována. Problém č. 3 – Tento problém je opravený v rozhraní .NET Framework 4.6.2.
| Název | Hodnota |
|---|---|
| Scope | Edge |
| Verze | 4.6.1 |
| Typ | Provozní doba |
Ovlivněná rozhraní API
Nedetekovatelné prostřednictvím analýzy rozhraní API.
.NET Framework 4.6.2
Údaje
Pokus o připojení TCP/IP k databázi SQL Serveru, která se překládá jako localhost neúspěšná
Podrobnosti
V rozhraní .NET Framework 4.6 a 4.6.1 se při pokusu o připojení TCP/IP k databázi SQL Serveru, která se vyřeší localhost, končí chybou: "Došlo k chybě související se sítí nebo specifickou instancí při navazování připojení k SQL Serveru." Server nebyl nalezen nebo nebyl přístupný. Ověřte, že je název instance správný a zda je SQL Server nakonfigurovaný tak, aby povoloval vzdálená připojení. (zprostředkovatel: Síťová rozhraní SQL, chyba: 26 – Chyba při zjišťování zadaného serveru nebo instance)"
Návrh
Tento problém byl vyřešen a předchozí chování obnovené v rozhraní .NET Framework 4.6.2. Pokud se chcete připojit k databázi SQL Serveru, která se vyhodnocuje na localhost, upgradujte na rozhraní .NET Framework 4.6.2.
| Název | Hodnota |
|---|---|
| Scope | Nezletilý |
| Verze | 4.6 |
| Typ | Provozní doba |
Ovlivněná rozhraní API
Nedetekovatelné prostřednictvím analýzy rozhraní API.
Období blokování fondu připojení pro databáze Azure SQL se odebere.
Podrobnosti
Počínaje rozhraním .NET Framework 4.6.2 se pro žádosti o otevření připojení ke známým databázím Azure SQL (*.database.windows.net, *.database.chinacloudapi.cn, *.database.usgovcloudapi.net, *.database.cloudapi.de), období blokování fondu připojení odebere a chyby otevření připojení se neukládají do mezipaměti. Pokusy o opakování žádostí o otevření připojení budou probíhat téměř okamžitě po přechodných chybách připojení. Tato změna umožňuje okamžitě opakovat pokus o otevření připojení pro databáze Azure SQL, čímž se zlepší výkon aplikací s podporou cloudu. U všech ostatních pokusů o připojení se období blokování fondu připojení nadále vynucuje.
Pokud v rozhraní .NET Framework 4.6.1 a starších verzích dojde při připojování k databázi k přechodnému selhání připojení, pokus o připojení se nedá rychle opakovat, protože fond připojení uloží chybu do mezipaměti a znovu ji načítá po dobu 5 sekund až 1 minutu. Další informace najdete v tématu sdružování připojení SQL Serveru (ADO.NET). Toto chování je problematické pro připojení k databázím Azure SQL, které často selžou s přechodnými chybami, které se obvykle obnovují během několika sekund. Funkce blokování fondu připojení znamená, že se aplikace nemůže připojit k databázi po dlouhou dobu, i když je databáze dostupná a aplikace se musí vykreslit během několika sekund.
Návrh
Pokud je toto chování nežádoucí, můžete nakonfigurovat blokovací období poolu připojení nastavením vlastnosti System.Data.SqlClient.SqlConnectionStringBuilder.PoolBlockingPeriod, která byla zavedena v rozhraní .NET Framework 4.6.2. Hodnota vlastnosti je členem System.Data.SqlClient.PoolBlockingPeriod výčtu, který může mít některou ze tří hodnot:
Předchozí chování můžete obnovit nastavením vlastnosti System.Data.SqlClient.SqlConnectionStringBuilder.PoolBlockingPeriod na AlwaysBlock.
| Název | Hodnota |
|---|---|
| Scope | Nezletilý |
| Verze | 4.6.2 |
| Typ | Provozní doba |
Ovlivněná rozhraní API
Globalizace
Podporované kategorie standardu Unicode verze 8.0
Podrobnosti
V rozhraní .NET Framework 4.6.2 se data Unicode upgradovala z Unicode Standard verze 6.3 na verzi 8.0. Při vyžádání kategorií znaků Unicode v rozhraní .NET Framework 4.6.2 nemusí některé výsledky odpovídat výsledkům v předchozích verzích rozhraní .NET Framework. Tato změna většinou ovlivňuje cherokeeské slabiky a samohlásky a značky tónu písma Nové Tai Lue.
Návrh
Zkontrolujte kód a odeberte nebo změňte logiku, která závisí na pevně zakódovaných kategoriích znaků Unicode.
| Název | Hodnota |
|---|---|
| Scope | Nezletilý |
| Verze | 4.6.2 |
| Typ | Provozní doba |
Ovlivněná rozhraní API
- Char.GetUnicodeCategory(Char)
- CharUnicodeInfo.GetUnicodeCategory(Char)
- CharUnicodeInfo.GetUnicodeCategory(String, Int32)
Zabezpečení
RsACng a DSACng jsou opět použitelné ve scénářích částečné důvěryhodnosti.
Podrobnosti
CngLightup (používá se v několika kryptografických rozhraních vyšší úrovně, například System.Security.Cryptography.Xml.EncryptedXml) a System.Security.Cryptography.RSACng v některých případech spoléhá na plnou důvěru. Patří sem volání nespravovaného kódu SecurityPermissionFlag.UnmanagedCode bez uplatnění oprávnění a cesty kódu, kde System.Security.Cryptography.CngKey obsahuje požadavky na oprávnění SecurityPermissionFlag.UnmanagedCode. Počínaje rozhraním .NET Framework 4.6.2 byl použit CngLightup k přechodu na System.Security.Cryptography.RSACng kdekoliv to bylo možné. Výsledkem je, že aplikace s částečnou důvěryhodností, které úspěšně používaly System.Security.Cryptography.Xml.EncryptedXml, začaly selhávat a vyvolávat SecurityException výjimky. Tato změna přidává potřebné ověření, aby každá funkce používající CngLightup měla požadovaná oprávnění.
Návrh
Pokud tato změna v rozhraní .NET Framework 4.6.2 negativně ovlivnila vaše aplikace s částečnou důvěryhodností, upgradujte na rozhraní .NET Framework 4.7.1.
| Název | Hodnota |
|---|---|
| Scope | Edge |
| Verze | 4.6.2 |
| Typ | Provozní doba |
Ovlivněná rozhraní 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 teď vrací hodnotu False pro případ selhání ověření.
Podrobnosti
Počínaje rozhraním .NET Framework 4.6.2 tato metoda vrátí hodnotu False , pokud je samotný podpis špatně formátován. Teď vrátí hodnotu false pro jakékoli selhání ověření. V rozhraní .NET Framework 4.6 a 4.6.1 vyvolá metoda System.Security.Cryptography.CryptographicException chybu, pokud je samotný podpis špatně formátován.
Návrh
Jakýkoli kód, jehož spuštění závisí na zpracování System.Security.Cryptography.CryptographicException by se mělo místo toho spustit, pokud ověření selže a metoda vrátí False.
| Název | Hodnota |
|---|---|
| Scope | Nezletilý |
| Verze | 4.6.2 |
| Typ | Provozní doba |
Ovlivněná rozhraní API
SignedXml a EncryptedXml – Zásadní změny
Podrobnosti
V rozhraní .NET Framework 4.6.2 vedou opravy zabezpečení System.Security.Cryptography.Xml.SignedXml a System.Security.Cryptography.Xml.EncryptedXml k různým způsobům chování za běhu. Například:
- Pokud má dokument více prvků se stejným
idatributem a podpis cílí na jeden z těchto prvků jako kořen podpisu, bude dokument nyní považován za neplatný. - Dokumenty používající ne kanonické transformační algoritmy XPath v odkazech jsou nyní považovány za neplatné.
- Dokumenty používající ne kanonické transformační algoritmy XSLT v odkazech se nyní považují za neplatné.
- Žádný program využívající podpisy odpojené od externích zdrojů nebude schopen to provést.
Návrh
Vývojáři můžou chtít zkontrolovat použití XmlDsigXsltTransform a XmlDsigXsltTransform, stejně jako typy odvozené od Transform, protože příjemce dokumentu je možná nebude moct zpracovat.
| Název | Hodnota |
|---|---|
| Scope | Nezletilý |
| Verze | 4.6.2 |
| Typ | Provozní doba |
Ovlivněná rozhraní API
- System.Security.Cryptography.Xml.Transform
- System.Security.Cryptography.Xml.XmlDsigXPathTransform
- System.Security.Cryptography.Xml.XmlDsigXsltTransform
WCF (Windows Communication Foundation)
Odebrání ssl3 ze služby WCF TransportDefaults
Podrobnosti
Pokud používáte NetTcp se zabezpečením přenosu a typem certifikátu přihlašovacích údajů, protokol SSL 3 už není výchozím protokolem používaným pro vyjednávání zabezpečeného připojení. Ve většině případů by nemělo mít žádný vliv na stávající aplikace, protože protokol TLS 1.0 byl vždy součástí seznamu protokolů pro NetTcp. Všichni stávající klienti by měli mít možnost vyjednat připojení s použitím alespoň protokolu TLS1.0.
Návrh
Pokud se vyžaduje ssl3, použijte jeden z následujících mechanismů konfigurace k přidání Ssl3 do seznamu vyjednaných protokolů.
| Název | Hodnota |
|---|---|
| Scope | Edge |
| Verze | 4.6.2 |
| Typ | Provozní doba |
Ovlivněná rozhraní API
Windows Presentation Foundation (WPF)
Změna vlastnosti IsEnabled u nadřazeného ovládacího prvku TextBlock ovlivní všechny jeho podřízené ovládací prvky.
Podrobnosti
Počínaje rozhraním .NET Framework 4.6.2 má změna System.Windows.UIElement.IsEnabled vlastnosti nadřazeného System.Windows.Controls.TextBlock ovládacího prvku vliv na všechny podřízené ovládací prvky (například hypertextové odkazy a tlačítka) System.Windows.Controls.TextBlock ovládacího prvku. V rozhraní .NET Framework 4.6.1 a starších verzích ovládací prvky uvnitř System.Windows.Controls.TextBlock neodráží vždy stav System.Windows.UIElement.IsEnabled vlastnosti nadřazeného objektu System.Windows.Controls.TextBlock .
Návrh
Žádné. Tato změna odpovídá očekávanému chování ovládacích prvků uvnitř System.Windows.Controls.TextBlock ovládacího prvku.
| Název | Hodnota |
|---|---|
| Scope | Nezletilý |
| Verze | 4.6.2 |
| Typ | Provozní doba |
Ovlivněná rozhraní API
VynutitJeVýběrovýBoxZvýrazněn
Podrobnosti
Určité posloupnosti akcí zahrnující System.Windows.Controls.ComboBox a jeho zdroj dat mohou mít za následek System.NullReferenceException.
Návrh
Pokud je to možné, upgradujte na rozhraní .NET Framework 4.6.2.
| Název | Hodnota |
|---|---|
| Scope | Nezletilý |
| Verze | 4.6 |
| Typ | Provozní doba |
Ovlivněná rozhraní API
DataGridCellsPanel.BringIndexIntoView vyvolá ArgumentOutOfRangeException
Podrobnosti
ScrollIntoView(Object) bude fungovat asynchronně, pokud je povolená virtualizace sloupců, ale šířky sloupců ještě nebyly určeny. Pokud se sloupce odeberou před tím, než dojde k asynchronní práci, může dojít k System.ArgumentOutOfRangeException.
Návrh
Některou z následujících možností:
- Upgradujte na rozhraní .NET Framework 4.7.
- Nainstalujte nejnovější servisní opravu pro rozhraní .NET Framework 4.6.2.
- Vyhněte se odebírání sloupců, dokud nebude asynchronní odpověď na ScrollIntoView(Object) dokončena.
| Název | Hodnota |
|---|---|
| Scope | Edge |
| Verze | 4.6.2 |
| Typ | Provozní doba |
Ovlivněná rozhraní API
Vodorovné posouvání a virtualizace
Podrobnosti
Tato změna se vztahuje na System.Windows.Controls.ItemsControl, který virtualizuje ve směru kolmém k hlavnímu směru posouvání (hlavním příkladem je System.Windows.Controls.DataGrid s EnableColumnVirtualization="True"). Výsledek některých vodorovných operací posouvání byl změněn tak, aby vytvářel výsledky, které jsou intuitivnější a analogičtější k výsledkům srovnatelných vertikálních operací.
Operace zahrnují "Scroll Here" a "Right Edge", aby bylo možné použít názvy z nabídky získané kliknutím pravým tlačítkem myši na vodorovný posuvník. Obě tyto vypočítají kandidátský posun a zavolají SetHorizontalOffset(Double).
Po posunutí na nový offset se může změnit význam pojmů "zde" nebo "pravý okraj", protože nový devirtualizovaný obsah změnil hodnotu System.Windows.Controls.Primitives.IScrollInfo.ExtentWidth.
Před rozhraním .NET Framework 4.6.2 operace posouvání prostě používá kandidátský offset, i když už nemusí být „tady“ nebo na „pravém okraji“. Výsledkem jsou efekty, jako je "poskakování" posuvníku palce, což je nejlépe ilustrováno příkladem. Předpokládejme, System.Windows.Controls.DataGrid že má ExtentWidth=1000 a Width=200. Posun k pravému okraji používá kandidátský posun 1000 – 200 = 800. Při posouvání na tuto pozici jsou nové sloupce de-virtualizovány; předpokládejme, že jsou velmi široké, takže System.Windows.Controls.Primitives.IScrollInfo.ExtentWidth se změní na 2000. Posuvník končí s HorizontalOffset=800 a palec "odrazí" zpět blízko středu posuvníku - přesně na 800/2000 = 40%.
Změna spočívá v přepočítání nového kandidátního posunu, když dojde k této situaci, a zopakujte akci. (Takto už funguje svislé posouvání.)
Tato změna vytváří předvídatelnější a intuitivnější prostředí pro koncového uživatele, ale může to mít vliv také na libovolnou aplikaci, která závisí na přesné hodnotě System.Windows.Controls.Primitives.IScrollInfo.HorizontalOffset po vodorovném posouvání, ať už je vyvolána koncovým uživatelem nebo explicitním voláním SetHorizontalOffset(Double).
Návrh
Aplikace, která používá předpokládanou hodnotu System.Windows.Controls.Primitives.IScrollInfo.HorizontalOffset, by měla být změněna tak, aby po libovolném horizontálním posunu, který může změnit System.Windows.Controls.Primitives.IScrollInfo.ExtentWidth v důsledku devirtualizace, načítala skutečnou hodnotu a hodnotu System.Windows.Controls.Primitives.IScrollInfo.ExtentWidth.
| Název | Hodnota |
|---|---|
| Scope | Nezletilý |
| Verze | 4.6.2 |
| Typ | Provozní doba |
Ovlivněná rozhraní API
Items.Clear neodstraňuje duplicitní položky z vybraných položek
Podrobnosti
Předpokládejme, že selektor (s povoleným vícenásobným výběrem) má v System.Windows.Controls.Primitives.MultiSelector.SelectedItems kolekci duplicitní položky – stejná položka se zobrazí více než jednou. Odebrání těchto položek ze zdroje dat (např. voláním Items.Clear) je neodebere z System.Windows.Controls.Primitives.MultiSelector.SelectedItems; odebere se pouze první instance. Kromě toho může následné použití System.Windows.Controls.Primitives.MultiSelector.SelectedItems (např. SelectedItems.Clear()) narazit na problémy, jako System.ArgumentExceptionje například , protože System.Windows.Controls.Primitives.MultiSelector.SelectedItems obsahuje položky, které již nejsou ve zdroji dat.
Návrh
Pokud je to možné, upgradujte na rozhraní .NET Framework 4.6.2.
| Název | Hodnota |
|---|---|
| Scope | Nezletilý |
| Verze | 4.5 |
| Typ | Provozní doba |
Ovlivněná rozhraní API
Posouvání plochého seznamu s položkami s jinou výškou pixelů
Podrobnosti
System.Windows.Controls.ItemsControl Když se zobrazí kolekce pomocí virtualizace (IsVirtualizing=true) a posouvání položek (ScrollUnit=Item) a když se ovládací prvek posune a zobrazí položku, jejíž výška v pixelech se liší od jejích sousedů, System.Windows.Controls.VirtualizingStackPanel postupně prochází všechny položky v kolekci. Uživatelské rozhraní během této iterace nereaguje. Iterace probíhá za jiných okolností, a to i v předchozích verzích rozhraní .NET Framework. Například při posouvání v pixelech (ScrollUnit=Pixel) při zobrazení položky s jinou výškou pixelu a při posouvání hierarchických dat (například System.Windows.Controls.TreeView nebo System.Windows.Controls.ItemsControl s povoleným seskupením) při výskytu položky s jiným počtem následnických položek, než jsou jeho sousedé. V případě posouvání položek a jiné výšky pixelů byla iterace zavedena v rozhraní .NET Framework 4.6.1, aby se opravily chyby v rozložení hierarchických dat. Není potřeba, pokud jsou data plochá (žádná hierarchie) a rozhraní .NET Framework 4.6.2 je v takovém případě neprovede.
Návrh
Pokud k iteraci dochází v rozhraní .NET Framework 4.6.1, ale ne v dřívějších verzích — to znamená, že System.Windows.Controls.ItemsControl prochází položky při posouvání plochého seznamu s položkami s různou výškou pixelů — existují dva nápravné prostředky:
- Nainstalujte rozhraní .NET Framework 4.6.2.
- Nainstalujte opravu hotfix HR 1605 pro rozhraní .NET Framework 4.6.1.
| Název | Hodnota |
|---|---|
| Scope | Nezletilý |
| Verze | 4.6.1 |
| Typ | Provozní doba |
Ovlivněná rozhraní API
Pozadí RibbonGroup je nastavené na transparentní v lokalizovaných buildech.
Podrobnosti
System.Windows.Controls.Ribbon.RibbonGroup pozadí lokalizovaných buildů bylo vždy malováno průhledným štětcem, což vedlo k špatnému uživatelskému rozhraní. Tato oprava je opravena v rozhraní .NET Framework 4.7 WPF aktualizací lokalizovaných prostředků System.Windows.Controls.Ribbon.RibbonGroup, což zase zajišťuje, že je vybrán správný štětec.
Návrh
Upgrade na rozhraní .NET Framework 4.7
| Název | Hodnota |
|---|---|
| Scope | Edge |
| Verze | 4.6.2 |
| Typ | Provozní doba |
Ovlivněná rozhraní API
Nedetekovatelné prostřednictvím analýzy rozhraní API.
Kontrola pravopisu WPF selhává neočekávanými způsoby
Podrobnosti
To zahrnuje řadu problémů s kontrolou pravopisu WPF:
- Kontrola pravopisu WPF někdy vyhazuje System.Runtime.InteropServices.COMException
- Kontrola pravopisu WPF selže, když se aplikace spustí pomocí příkazu 'Spustit jako jiný uživatel' UnauthorizedAccessException.
- Kontrola pravopisu WPF nesprávně identifikuje pravopisné chyby ve složených slovech, jako je "Hausnummer" v němčině.
Návrh
Problém č. 1 – Tento problém je opravený v rozhraní .NET Framework 4.6.2 # 2 – Kontrola pravopisu WPF už není podporována při spuštění aplikací s použitím příkazu Spustit jako jiný uživatel. Počínaje rozhraním .NET Framework 4.6.2 aplikace spouštěné tímto způsobem již nebudou neočekávaně ukončeny - místo toho bude kontrola pravopisu tiše deaktivována. Problém č. 3 – Tento problém je opravený v rozhraní .NET Framework 4.6.2.
| Název | Hodnota |
|---|---|
| Scope | Edge |
| Verze | 4.6.1 |
| Typ | Provozní doba |
Ovlivněná rozhraní API
Nedetekovatelné prostřednictvím analýzy rozhraní API.