Změny modulu runtime pro migraci na rozhraní .NET Framework 4.6.x
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
GridViews s AllowCustomPaging nastavenou na true může aktivovat PageIndexChanging událost při opuštění poslední stránky zobrazení.
Detaily
Chyba v rozhraní .NET Framework 4.5 způsobí System.Web.UI.WebControls.GridView.PageIndexChanging , že se někdy neaktivuje pro System.Web.UI.WebControls.GridViewpovolené 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.
Jméno | Hodnota |
---|---|
Obor | Vedlejší |
Verze | 4.5 |
Typ | Šablona běhového prostředí |
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
Detaily
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, jako System.Runtime.Serialization.DataContractSerializerSystem.Runtime.Serialization.NetDataContractSerializerje například . 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.
Jméno | Hodnota |
---|---|
Obor | Vedlejší |
Verze | 4.5.1 |
Typ | Šablona běhového prostředí |
Ovlivněná rozhraní API
Nedetekovatelné prostřednictvím analýzy rozhraní API.
AppDomainSetup.DynamicBase už není randomizován metodou UseRandomizedStringHashAlgorithm
Detaily
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.
Jméno | Hodnota |
---|---|
Obor | Edge |
Verze | 4.6 |
Typ | Šablona běhového prostředí |
Ovlivněná rozhraní API
Volání Attribute.GetCustomAttributes u vlastnosti indexeru už nevyvolá AmbiguousMatchException, pokud nejednoznačnost lze přeložit podle typu indexu.
Detaily
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, by výsledkem System.Reflection.AmbiguousMatchExceptionbyla . 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 aplikaci System.Reflection.AmbiguousMatchException, měla by se teď reflexe použít k explicitnímu vyhledání více indexerů.
Jméno | Hodnota |
---|---|
Obor | Edge |
Verze | 4.6 |
Typ | Šablona běhového prostředí |
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)
COR_PRF_GC_ROOT_HANDLEs profilátory nevyčtou
Detaily
V rozhraní .NET Framework v4.5.1 se rozhraní API RootReferences2()
pro profilaci nikdy nevrací COR_PRF_GC_ROOT_HANDLE
(vrátí se jako COR_PRF_GC_ROOT_OTHER
místo toho). 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.
Jméno | Hodnota |
---|---|
Obor | Vedlejší |
Verze | 4.5.1 |
Typ | Šablona běhového prostředí |
Ovlivněná rozhraní API
Nedetekovatelné prostřednictvím analýzy rozhraní API.
EventListeners pro Windows nezachytává události od poskytovatelů s explicitními klíčovými slovy (jako je zprostředkovatel TPL).
Detaily
EventListeners pro Windows s prázdnou maskou klíčového slova nezachytává správně události od zprostředkovatelů 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 události 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í enableEvents přetížení, 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.
Jméno | Hodnota |
---|---|
Obor | Edge |
Verze | 4.5 |
Typ | Šablona běhového prostředí |
Ovlivněná rozhraní API
Perský kalendář nyní používá sluneční algoritmus Hidžra
Detaily
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 kalendáři a jinými kalendáři může způsobit mírně odlišný výsledek začínající rozhraním .NET Framework 4.6 pro kalendářní data starší než 1800 nebo novější než 2023 (Gregoriánský). PersianCalendar.MinSupportedDateTime A teď March 22, 0622
je to 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é).
Jméno | Hodnota |
---|---|
Obor | Vedlejší |
Verze | 4.6 |
Typ | Šablona běhového prostředí |
Ovlivněná rozhraní API
Reflexe objekty už nelze předávat ze spravovaného kódu do klientů modelu DCOM mimo proces.
Detaily
Reflexe objekty již nelze předávat ze spravovaného kódu do klientů modelu DCOM mimo proces. 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 IMarshal
vrácení E_NOINTERFACE
objektu .
Návrh
Aktualizujte zařazování kódu tak, aby fungoval s objekty bez odrazu.
Jméno | Hodnota |
---|---|
Obor | Vedlejší |
Verze | 4.6 |
Typ | Šablona běhového prostředí |
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 se už nenastaví na hodnotu null.
Detaily
Ve System.AppDomainSetup.TargetFrameworkName výchozí doméně aplikace byla dříve null, pokud nebyla explicitně nastavena. 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 dál dědit z System.AppDomainSetup.TargetFrameworkName výchozí domény aplikace (která ve verzi 4.6 nebude výchozí hodnota null), pokud se explicitně nepřepíše.
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.
Jméno | Hodnota |
---|---|
Obor | Edge |
Verze | 4.6 |
Typ | Šablona běhového prostředí |
Ovlivněná rozhraní API
X509Certificate2.ToString(Boolean) se teď nevyvolá, když .NET nemůže zpracovat certifikát
Detaily
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 v závislosti na X509Certificate2.ToString(Boolean) tom by měl být aktualizován tak, aby očekával, že vrácený řetězec může vyloučit některá data certifikátu (například veřejný klíč, privátní klíč a rozšíření) v některých případech, kdy by rozhraní API dříve vyvoláno.
Jméno | Hodnota |
---|---|
Obor | Edge |
Verze | 4.6 |
Typ | Šablona běhového prostředí |
Ovlivněná rozhraní API
Data
Pokus o připojení TCP/IP k databázi SQL Serveru, která se překládá jako localhost
neúspěšná
Detaily
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
selháním s chybou" Došlo k chybě související se sítí nebo instancí při navazování připojení k SQL Serveru. Server se nenašel nebo nebyl dostupný. Ověřte správnost názvu instance. Dále ověřte, jestli 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 překládá na localhost
, upgradujte na rozhraní .NET Framework 4.6.2.
Jméno | Hodnota |
---|---|
Obor | Vedlejší |
Verze | 4.6 |
Typ | Šablona běhového prostředí |
Ovlivněná rozhraní API
Nedetekovatelné prostřednictvím analýzy rozhraní API.
Ladicí program
Hodnoty nulového coalesceru nejsou v ladicím programu viditelné až do jednoho kroku později.
Detaily
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
Krokování jednoho dalšího kroku v ladicím programu způsobí, že se hodnota místního 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í.
Jméno | Hodnota |
---|---|
Obor | Edge |
Verze | 4.5 |
Typ | Šablona běhového prostředí |
Ovlivněná rozhraní API
Nedetekovatelné prostřednictvím analýzy rozhraní API.
Sítě
ContentDisposition DateTimes vrací mírně odlišný řetězec.
Detaily
Řetězcové reprezentace 's byly aktualizovány System.Net.Mime.ContentDispositionpočínaje číslem 4,6, aby vždy představovaly hodinovou komponentu System.DateTime se dvěma číslicemi. To je v souladu s RFC822 a RFC2822. To způsobí ToString() vrácení mírně odlišného řetězce ve verzi 4.6 ve scénářích, kdy jeden z časových prvků dispozice byl před 10:00. Všimněte si, že ContentDispositions jsou někdy serializovány prostřednictvím převodu na řetězce, takže všechny ToString() operace, serializace nebo GetHashCode volání 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. Před provedením porovnání převeďte řetězce zpět na ContentDispositions.
Jméno | Hodnota |
---|---|
Obor | Vedlejší |
Verze | 4.6 |
Typ | Šablona běhového prostředí |
Ovlivněná rozhraní API
Serializace
Zpráva o výjimce pro neúspěšnou serializaci DataContract v případě neznámého typu
Detaily
Počínaje rozhraním .NET Framework 4.6 byla vysvětlena zpráva o výjimce, pokud System.Runtime.Serialization.DataContractSerializer se serializace nebo System.Runtime.Serialization.Json.DataContractJsonSerializer deserializaci 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.
Jméno | Hodnota |
---|---|
Obor | Edge |
Verze | 4.6 |
Typ | Šablona běhového prostředí |
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
Detaily
Správa verzí produktu se změnila z předchozích verzí rozhraní .NET Framework a zejména z rozhraní .NET Framework 4, 4.5, 4.5.1 a 4.5.2. Následují podrobné změny:
- Hodnota
Version
položky vHKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Full
klíči se změnila na4.6.xxxxx
pro 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
. - Soubor a správa verzí produktu pro soubory rozhraní .NET Framework se změnily z dřívějšího schématu správy verzí 4.0.30319.x na 4.6.X.0 pro rozhraní .NET Framework 4.6 a jeho verze bodů 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.
- AssemblyInformationalVersionAttribute Atributy AssemblyFileVersionAttribute spravovaných sestavení mají hodnoty verze ve formátu 4.6.X.0 pro rozhraní .NET Framework 4.6 a jeho bodové verze a 4.7.X.0 pro rozhraní .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 Environment.Version vrátí vlastnost řetězec
4.0.30319.42000
pevné verze . 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
InstallPath
polož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 modulu clr .NET Framework common language runtime, 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.
Jméno | Hodnota |
---|---|
Obor | Vedlejší |
Verze | 4.6 |
Typ | Šablona běhového prostředí |
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.
Detaily
Jak můžete očekávat, klíč verze nastavený v registru (at HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\NET Framework Setup\NDP\v4\Full
) pro rozhraní .NET Framework 4.6 začíná řetězcem 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
Aktualizace aplikací pro instalaci rozhraní .NET Framework 4.5 vyhledáním klíčů registru 4.5 přijměte také verzi 4.6.
Jméno | Hodnota |
---|---|
Obor | Edge |
Verze | 4.6 |
Typ | Šablona běhového prostředí |
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
Detaily
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.
Upozorňující
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.
Upozorňující
Toto alternativní řešení se nedoporučuje, protože certifikát s hashovacím algoritmem MD5 se považuje za nezabezpečený.
Jméno | Hodnota |
---|---|
Obor | Vedlejší |
Verze | 4.6 |
Typ | Šablona běhového prostředí |
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
Detaily
Kvůli chybě v rozhraní .NET Framework 4.5 můžou obslužné rutiny událostí pro DataGrid události zahrnující odebrání řádku způsobit System.NullReferenceException vyvolání, pokud přistupují k vlastnostem nebo System.Windows.Controls.Primitives.MultiSelector.SelectedItems vlastnostemDataGridSystem.Windows.Controls.Primitives.Selector.SelectedItem.
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.
Jméno | Hodnota |
---|---|
Obor | Vedlejší |
Verze | 4.5 |
Typ | Šablona běhového prostředí |
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.
Detaily
Volání ListBox.Items.Refresh z kódu System.Windows.Controls.ListBox v rozhraní .NET Framework 4.5 může 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 | |
---|---|
Scope | Vedlejší |
Verze | 4.5 |
Typ | Šablona běhového prostředí |
Ovlivněná rozhraní API
CoerceIsSelectionBoxHighlighted
Detaily
Určité posloupnosti akcí zahrnujících System.Windows.Controls.ComboBox a jeho zdroj dat může mít za následek .System.NullReferenceException
Návrh
Pokud je to možné, upgradujte na rozhraní .NET Framework 4.6.2.
Jméno | Hodnota |
---|---|
Obor | Vedlejší |
Verze | 4.6 |
Typ | Šablona běhového prostředí |
Ovlivněná rozhraní API
Problém s vazbou ListBoxItem IsSelected u observableCollection<T> Přesunout
Detaily
Volání Move(Int32, Int32) nebo MoveItem(Int32, Int32) v kolekci vázané na System.Windows.Controls.ListBox vybrané položky může vést k erratickému chování s budoucím výběrem nebo zrušením 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) toho by se tento problém vyřešil. 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.
Jméno | Hodnota |
---|---|
Obor | Vedlejší |
Verze | 4.5 |
Typ | Šablona běhového prostředí |
Ovlivněná rozhraní API
Kliknutí pravým tlačítkem myši na záhlaví řádku WPF DataGrid změní výběr DataGridu.
Detaily
Kliknutí 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 System.Windows.Controls.DataGridvýběr změní jenom 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.
Jméno | Hodnota |
---|---|
Obor | Edge |
Verze | 4.5 |
Typ | Šablona běhového prostředí |
Ovlivněná rozhraní API
WPF vytvoří proces wisptis.exe, který může ukotvit myš.
Detaily
Ve verzi 4.5.2 jsme zavedli problém, který způsobuje wisptis.exe
, že se může ukotvit 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
Jméno | Hodnota |
---|---|
Obor | Hlavní verze |
Verze | 4.5.2 |
Typ | Šablona běhového prostředí |
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.
Detaily
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.
Jméno | Hodnota |
---|---|
Obor | Edge |
Verze | 4.6 |
Typ | Šablona běhového prostředí |
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.
Detaily
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.
Jméno | Hodnota |
---|---|
Obor | Vedlejší |
Verze | 4.6 |
Typ | Šablona běhového prostředí |
Ovlivněná rozhraní API
Nedetekovatelné prostřednictvím analýzy rozhraní API.
.NET Framework 4.6.1
Nástroje
Contract.Invariant nebo Contract.Requires<TException> nebere v úvahu String.IsNullOrEmpty být čistý
Detaily
U aplikací, které cílí na rozhraní .NET Framework 4.6.1, pokud invariantní kontrakt pro Contract.Invariant volání metody nebo předběžná smlouva pro Requires volání String.IsNullOrEmpty metody, autor vygeneruje upozornění kompilátoru CC1036: "Zjištěné 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.
Jméno | Hodnota |
---|---|
Obor | Vedlejší |
Verze | 4.6.1 |
Typ | Šablona běhového prostředí |
Ovlivněná rozhraní API
Windows Presentation Foundation (WPF)
Posouvání plochého seznamu s položkami s jinou výškou pixelů
Detaily
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 jeho sousedů, System.Windows.Controls.VirtualizingStackPanel iteruje 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 pokud se jedná o System.Windows.Controls.ItemsControl položku – posouvání plochého seznamu s položkami s jinou 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.
Jméno | Hodnota |
---|---|
Obor | Vedlejší |
Verze | 4.6.1 |
Typ | Šablona běhového prostředí |
Ovlivněná rozhraní API
ObjectDisposedException vyvolaný wpF spellchecker
Detaily
Aplikace WPF se občas chybově ukončují během vypnutí aplikace s System.ObjectDisposedException vyvoláním 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
Jméno | Hodnota |
---|---|
Obor | Edge |
Verze | 4.6.1 |
Typ | Šablona běhového prostředí |
Ovlivněná rozhraní API
Nedetekovatelné prostřednictvím analýzy rozhraní API.
Kontrola pravopisu WPF selhává neočekávanými způsoby
Detaily
To zahrnuje řadu problémů s kontrolou pravopisu WPF:
- Kontrola pravopisu WPF někdy vyvolává System.Runtime.InteropServices.COMException
- Kontrola pravopisu WPF selže, UnauthorizedAccessException když se aplikace spustí pomocí příkazu Spustit jako jiný uživatel.
- 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. Spuštění rozhraní .NET Framework 4.6.2, aplikace spouštěné tímto způsobem už nebudou neočekávaně chybově ukončeny – místo toho bude kontrola pravopisu bezobslužná. Problém č. 3 – Tento problém je opravený v rozhraní .NET Framework 4.6.2.
Jméno | Hodnota |
---|---|
Obor | Edge |
Verze | 4.6.1 |
Typ | Šablona běhového prostředí |
Ovlivněná rozhraní API
Nedetekovatelné prostřednictvím analýzy rozhraní API.
.NET Framework 4.6.2
Data
Pokus o připojení TCP/IP k databázi SQL Serveru, která se překládá jako localhost
neúspěšná
Detaily
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
selháním s chybou" Došlo k chybě související se sítí nebo instancí při navazování připojení k SQL Serveru. Server se nenašel nebo nebyl dostupný. Ověřte správnost názvu instance. Dále ověřte, jestli 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 překládá na localhost
, upgradujte na rozhraní .NET Framework 4.6.2.
Jméno | Hodnota |
---|---|
Obor | Vedlejší |
Verze | 4.6 |
Typ | Šablona běhového prostředí |
Ovlivněná rozhraní API
Nedetekovatelné prostřednictvím analýzy rozhraní API.
Připojení období blokování fondu pro databáze Azure SQL se odebere.
Detaily
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é opakování otevřeného pokusu o 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 vyvolá po dobu 5 sekund až 1 minutu. Další informace naleznete v tématu SQL Server Připojení sdružování (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í, blokující období fondu připojení lze nakonfigurovat nastavením System.Data.SqlClient.SqlConnectionStringBuilder.PoolBlockingPeriod vlastnosti zavedené v rozhraní .NET Framework 4.6.2. Hodnota vlastnosti je členem výčtu System.Data.SqlClient.PoolBlockingPeriod , který může mít jednu ze tří hodnot:
Předchozí chování lze obnovit nastavením System.Data.SqlClient.SqlConnectionStringBuilder.PoolBlockingPeriod vlastnosti na AlwaysBlockhodnotu .
Jméno | Hodnota |
---|---|
Obor | Vedlejší |
Verze | 4.6.2 |
Typ | Šablona běhového prostředí |
Ovlivněná rozhraní API
Globalizace
Podporované kategorie standardu Unicode verze 8.0
Detaily
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 slabiky Cherokee a nové tai luské samohlásky a značky tónu.
Návrh
Zkontrolujte logiku kódu a odeberte/změňte, která závisí na pevně zakódovaných kategoriích znaků Unicode.
Jméno | Hodnota |
---|---|
Obor | Vedlejší |
Verze | 4.6.2 |
Typ | Šablona běhového prostředí |
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.
Detaily
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 SecurityPermissionFlag.UnmanagedCode kódu bez uplatnění oprávnění a cesty kódu s System.Security.Cryptography.CngKey požadavky na oprávnění .SecurityPermissionFlag.UnmanagedCode Počínaje rozhraním .NET Framework 4.6.2 byl CngLightup použit k přechodu na System.Security.Cryptography.RSACng místo, kde je to možné. Výsledkem je, že aplikace s částečnou důvěryhodností, které se úspěšně použily System.Security.Cryptography.Xml.EncryptedXml , začaly selhat a vyvolat SecurityException výjimky. Tato změna přidá požadované kontrolní výrazy, aby všechny funkce používající CngLightup měly 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.
Jméno | Hodnota |
---|---|
Obor | Edge |
Verze | 4.6.2 |
Typ | Šablona běhového prostředí |
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í.
Detaily
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.
Jméno | Hodnota |
---|---|
Obor | Vedlejší |
Verze | 4.6.2 |
Typ | Šablona běhového prostředí |
Ovlivněná rozhraní API
Změny způsobující chybu SignedXml a EncryptedXml
Detaily
V rozhraní .NET Framework 4.6.2 opravy System.Security.Cryptography.Xml.SignedXml zabezpečení a System.Security.Cryptography.Xml.EncryptedXml vedou k různým chováním za běhu. Příklad:
- Pokud má dokument více prvků se stejným
id
atributem 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é.
- Jakýkoli program, který využívá podpisy odpojené externím prostředkem, to nebude moct udělat.
Návrh
Vývojáři můžou chtít zkontrolovat použití XmlDsigXsltTransform a XmlDsigXsltTransforma také typy odvozené od Transform toho, že příjemce dokumentu ho nebude moct zpracovat.
Jméno | Hodnota |
---|---|
Obor | Vedlejší |
Verze | 4.6.2 |
Typ | Šablona běhového prostředí |
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
Detaily
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ů.
Jméno | Hodnota |
---|---|
Obor | Edge |
Verze | 4.6.2 |
Typ | Šablona běhového prostředí |
Ovlivněná rozhraní API
Windows Presentation Foundation (WPF)
Změna Vlastnosti IsEnabled nadřazeného ovládacího prvku TextBlock ovlivní všechny podřízené ovládací prvky.
Detaily
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
Nezaokrouhlovat. Tato změna odpovídá očekávanému chování ovládacích prvků uvnitř System.Windows.Controls.TextBlock ovládacího prvku.
Jméno | Hodnota |
---|---|
Obor | Vedlejší |
Verze | 4.6.2 |
Typ | Šablona běhového prostředí |
Ovlivněná rozhraní API
CoerceIsSelectionBoxHighlighted
Detaily
Určité posloupnosti akcí zahrnujících System.Windows.Controls.ComboBox a jeho zdroj dat může mít za následek .System.NullReferenceException
Návrh
Pokud je to možné, upgradujte na rozhraní .NET Framework 4.6.2.
Jméno | Hodnota |
---|---|
Obor | Vedlejší |
Verze | 4.6 |
Typ | Šablona běhového prostředí |
Ovlivněná rozhraní API
DataGridCellsPanel.BringIndexIntoView vyvolá ArgumentOutOfRangeException
Detaily
ScrollIntoView(Object) bude fungovat asynchronně, pokud je povolená virtualizace sloupců, ale šířky sloupců ještě nebyly určeny. Pokud se sloupce odeberou před asynchronní prací, System.ArgumentOutOfRangeException může dojít k chybě.
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 se nedokončila asynchronní odpověď ScrollIntoView(Object) .
Jméno | Hodnota |
---|---|
Obor | Edge |
Verze | 4.6.2 |
Typ | Šablona běhového prostředí |
Ovlivněná rozhraní API
Vodorovné posouvání a virtualizace
Detaily
Tato změna se vztahuje na System.Windows.Controls.ItemsControl vlastní virtualizaci ve směru ortogonálního směru pro hlavní posouvání (hlavní příklad 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. Oba tyto výpočty kandidáta posunu a volání SetHorizontalOffset(Double).
Po posouvání na nový posun se může změnit pojem "zde" nebo "pravý okraj", protože nově de-virtualizovaný obsah změnil hodnotu System.Windows.Controls.Primitives.IScrollInfo.ExtentWidth.
Před rozhraním .NET Framework 4.6.2 operace posouvání jednoduše použije kandidátské posuny, i když už nemusí být "tady" nebo na pravém okraji. Výsledkem jsou efekty, jako je "bouncing" palce posuvníku, nejlépe ilustrovaný 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é posuny 1000 – 200 = 800. Při posouvání na tento posun jsou nové sloupce de-virtualizovány; Předpokládejme, že jsou velmi široké, aby System.Windows.Controls.Primitives.IScrollInfo.ExtentWidth se změny na 2000 změnily. Posouvání končí horizontalOffset=800 a palec "odrazí" zpět doprostřed posuvníku - přesně na 800/2000 = 40 %.
Změna spočívá v opětovném dokončování nového kandidáta posunu, když dojde k této situaci, a akci opakujte. (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ředpovězenou hodnotu, System.Windows.Controls.Primitives.IScrollInfo.HorizontalOffset by se měla změnit tak, aby načítá skutečnou hodnotu (a hodnotu System.Windows.Controls.Primitives.IScrollInfo.ExtentWidth) po libovolném vodorovném posunu, který by se mohl změnit System.Windows.Controls.Primitives.IScrollInfo.ExtentWidth kvůli dei virtualizaci.
Jméno | Hodnota |
---|---|
Obor | Vedlejší |
Verze | 4.6.2 |
Typ | Šablona běhového prostředí |
Ovlivněná rozhraní API
Items.Clear neodebere duplicity z SelectedItems
Detaily
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 System.Windows.Controls.Primitives.MultiSelector.SelectedItemsneodebere . 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.
Jméno | Hodnota |
---|---|
Obor | Vedlejší |
Verze | 4.5 |
Typ | Šablona běhového prostředí |
Ovlivněná rozhraní API
Posouvání plochého seznamu s položkami s jinou výškou pixelů
Detaily
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 jeho sousedů, System.Windows.Controls.VirtualizingStackPanel iteruje 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 pokud se jedná o System.Windows.Controls.ItemsControl položku – posouvání plochého seznamu s položkami s jinou 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.
Jméno | Hodnota |
---|---|
Obor | Vedlejší |
Verze | 4.6.1 |
Typ | Šablona běhového prostředí |
Ovlivněná rozhraní API
Pozadí RibbonGroup je nastavené na transparentní v lokalizovaných buildech.
Detaily
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
Jméno | Hodnota |
---|---|
Obor | Edge |
Verze | 4.6.2 |
Typ | Šablona běhového prostředí |
Ovlivněná rozhraní API
Nedetekovatelné prostřednictvím analýzy rozhraní API.
Kontrola pravopisu WPF selhává neočekávanými způsoby
Detaily
To zahrnuje řadu problémů s kontrolou pravopisu WPF:
- Kontrola pravopisu WPF někdy vyvolává System.Runtime.InteropServices.COMException
- Kontrola pravopisu WPF selže, UnauthorizedAccessException když se aplikace spustí pomocí příkazu Spustit jako jiný uživatel.
- 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. Spuštění rozhraní .NET Framework 4.6.2, aplikace spouštěné tímto způsobem už nebudou neočekávaně chybově ukončeny – místo toho bude kontrola pravopisu bezobslužná. Problém č. 3 – Tento problém je opravený v rozhraní .NET Framework 4.6.2.
Jméno | Hodnota |
---|---|
Obor | Edge |
Verze | 4.6.1 |
Typ | Šablona běhového prostředí |
Ovlivněná rozhraní API
Nedetekovatelné prostřednictvím analýzy rozhraní API.