Změna cílení migrace na rozhraní .NET Framework 4.7.x
Tento článek obsahuje seznam problémů s kompatibilitou aplikací, které byly zavedeny v rozhraní .NET Framework 4.7, 4.7.1 a 4.7.2.
.NET Framework 4.7
ASP.NET
HttpRuntime.AppDomainAppPath vyvolá výjimku NullReferenceException
Detaily
V rozhraní .NET Framework 4.6.2 vyvolá modul runtime T:System.NullReferenceException
při načítání P:System.Web.HttpRuntime.AppDomainAppPath
hodnoty, která obsahuje znaky null. V rozhraní .NET Framework 4.6.1 a starších verzích modul runtime vyvolá výjimku T:System.ArgumentNullException
.
Návrh
Na tuto změnu můžete odpovědět některým z následujících kroků:
T:System.NullReferenceException
Zpracujte, pokud je aplikace spuštěna v rozhraní .NET Framework 4.6.2.- Upgradujte na rozhraní .NET Framework 4.7, který obnoví předchozí chování a vyvolá chybu
T:System.ArgumentNullException
.
Jméno | Hodnota |
---|---|
Obor | Edge |
Verze | 4.6.2 |
Typ | Změna cílení |
Ovlivněná rozhraní API
Omezení souběžných požadavků na relaci
Detaily
V rozhraní .NET Framework 4.6.2 a starších ASP.NET spouští požadavky se stejným id relace postupně a ASP.NET vždy vydává Id relace prostřednictvím souborů cookie. Pokud odezva stránky trvá delší dobu, výrazně sníží výkon serveru pouhým stisknutím klávesy F5 v prohlížeči. V opravě jsme přidali čítač pro sledování požadavků zařazených do fronty a ukončování požadavků, když překročí zadaný limit. Výchozí hodnota je 50. Pokud dosáhnete limitu, do protokolu událostí se zaprotokoluje upozornění a v protokolu služby IIS může být zaznamenána odpověď HTTP 500.
Návrh
Pokud chcete obnovit staré chování, můžete do souboru web.config přidat následující nastavení, aby se odhlásilo nové chování.
<appSettings>
<add key="aspnet:RequestQueueLimitPerSession" value="2147483647"/>
</appSettings>
Jméno | Hodnota |
---|---|
Obor | Edge |
Verze | 4.7 |
Typ | Změna cílení |
Sítě
Výchozí hodnota ServicePointManager.SecurityProtocol je SecurityProtocolType.System.Default
Detaily
Počínaje aplikacemi, které cílí na rozhraní .NET Framework 4.7, výchozí hodnota ServicePointManager.SecurityProtocol vlastnosti je SecurityProtocolType.SystemDefault. Tato změna umožňuje síťovým rozhraním API rozhraní .NET Framework založeným na protokolu SSLStream (například FTP, HTTPS a SMTP) dědit výchozí protokoly zabezpečení z operačního systému místo použití pevně zakódovaných hodnot definovaných rozhraním .NET Framework. Výchozí nastavení se liší podle operačního systému a jakékoli vlastní konfigurace prováděné správcem systému. Informace o výchozím protokolu SChannel v každé verzi operačního systému Windows naleznete v tématu Protokoly v TLS/SSL (Schannel SSP).
Pro aplikace, které cílí na starší verzi rozhraní .NET Framework, výchozí hodnota ServicePointManager.SecurityProtocol vlastnosti závisí na verzi cílové rozhraní .NET Framework. Další informace najdete v části Sítě týkající se změny cílení na migraci z rozhraní .NET Framework 4.5.2 na verzi 4.6 .Návrh
Tato změna má vliv na aplikace, které cílí na rozhraní .NET Framework 4.7 nebo novější verze. Pokud dáváte přednost použití definovaného protokolu místo spoléhání na výchozí systém, můžete explicitně nastavit hodnotu ServicePointManager.SecurityProtocol vlastnosti. Pokud je tato změna nežádoucí, můžete se z ní odhlásit přidáním konfiguračního nastavení do <části runtime> konfiguračního souboru vaší aplikace. Následující příklad ukazuje <runtime>
oddíl i Switch.System.Net.DontEnableSystemDefaultTlsVersions
přepínač pro odhlášení:
<runtime>
<AppContextSwitchOverrides value="Switch.System.Net.DontEnableSystemDefaultTlsVersions=true" />
</runtime>
Jméno | Hodnota |
---|---|
Obor | Vedlejší |
Verze | 4.7 |
Typ | Změna cílení |
Ovlivněná rozhraní API
SslStream podporuje upozornění PROTOKOLU TLS
Detaily
Po neúspěšném použití metody handshake System.IO.IOException protokolu TLS se první vstupně-výstupní operace čtení/zápisu vyvolá s vnitřní System.ComponentModel.Win32Exception výjimkou. Kód System.ComponentModel.Win32Exception.NativeErrorCode pro výstrahu System.ComponentModel.Win32Exception TLS lze mapovat na výstrahu PROTOKOLU TLS od vzdálené strany pomocí kódů chyb Schannel pro výstrahy TLS a SSL. Další informace naleznete v dokumentu RFC 2246: Oddíl 7.2.2 Chybové výstrahy.
Chování rozhraní .NET Framework 4.6.2 a dřívější je, že přenosový kanál (obvykle připojení TCP) vyprší během zápisu nebo čtení, pokud druhá strana nepovedla metodu handshake a okamžitě potom připojení odmítla.
Návrh
Aplikace, které volají rozhraní API pro vstupně-výstupní operace sítě, například Read(Byte[], Int32, Int32)/Write(Byte[], Int32, Int32) by měly zpracovávat IOException nebo .System.TimeoutException
Funkce Upozornění protokolu TLS je ve výchozím nastavení povolená od rozhraní .NET Framework 4.7. Aplikace cílené na verze rozhraní .NET Framework od 4.0 do 4.6.2 spuštěné v systému .NET Framework 4.7 nebo vyšší budou mít funkci zakázanou, aby se zachovala kompatibilita.
K dispozici je následující konfigurační rozhraní API pro povolení nebo zakázání funkce pro aplikace .NET Framework 4.6 a novější spuštěné v rozhraní .NET Framework 4.7 nebo novější.
Programově: Musí to být první věc, kterou aplikace dělá, protože ServicePointManager inicializuje pouze jednou:
AppContext.SetSwitch("TestSwitch.LocalAppContext.DisableCaching", true); // Set to 'false' to enable the feature in .NET Framework 4.6 - 4.6.2. AppContext.SetSwitch("Switch.System.Net.DontEnableTlsAlerts", true);
AppConfig:
<runtime> <AppContextSwitchOverrides value="Switch.System.Net.DontEnableTlsAlerts=true"/> <!-- Set to 'false' to enable the feature in .NET Framework 4.6 - 4.6.2. --> </runtime>
Klíč registru (globální počítač): Nastavte hodnotu na
false
povolení funkce v rozhraní .NET Framework 4.6 – 4.6.2.Key: HKLM\SOFTWARE\Wow6432Node\Microsoft\.NETFramework\AppContext\Switch.System.Net.DontEnableTlsAlerts - Type: String - Value: "true"
Jméno | Hodnota |
---|---|
Obor | Edge |
Verze | 4.7 |
Typ | Změna cílení |
Ovlivněná rozhraní API
- System.Net.Security.SslStream
- System.Net.WebRequest
- System.Net.HttpWebRequest
- System.Net.FtpWebRequest
- System.Net.Mail.SmtpClient
- System.Net.Http
Zabezpečení
CspParameters.ParentWindowHandle teď očekává hodnotu HWND.
Detaily
HodnotaParentWindowHandle, která je zavedena v rozhraní .NET Framework 2.0, umožňuje aplikaci zaregistrovat nadřazenou hodnotu popisovače okna tak, aby jakékoli uživatelské rozhraní potřebné pro přístup ke klíči (například dialogové okno výzvy pin kódu nebo souhlasu) se otevře jako modální podřízená položka zadaného okna. Počínaje aplikacemi, které cílí na rozhraní .NET Framework 4.7, může aplikace model Windows Forms nastavit ParentWindowHandle vlastnost pomocí kódu takto:
cspParameters.ParentWindowHandle = form.Handle;
V předchozích verzích rozhraní .NET Framework se očekávalo, že System.IntPtr hodnota představuje umístění v paměti, kde se nachází hodnota HWND . Nastavení vlastnosti na formulář. Popisovač ve Windows 7 a starších verzích nemá žádný vliv, ale ve Windows 8 a novějších verzích má za následek chybnýSystem.Security.Cryptography.CryptographicException parametr.
Návrh
Aplikace, které cílí na rozhraní .NET Framework 4.7 nebo vyšší, chtějí zaregistrovat vztah nadřazeného okna, se doporučuje použít zjednodušený formulář:
cspParameters.ParentWindowHandle = form.Handle;
Uživatelé, kteří zjistili, že správná hodnota, která se má předat, byla adresa umístění paměti, které hodnotu drželo form.Handle
, mohou vyjádřit nesouhlas se změnou chování nastavením přepínače Switch.System.Security.Cryptography.DoNotAddrOfCspParentWindowHandle
AppContext na true
:
- Nastavením compat přepínače na AppContext programově, jak je vysvětleno zde.
- Přidáním následujícího řádku do
<runtime>
části souboru app.config:
<runtime>
<AppContextSwitchOverrides value="Switch.System.Security.Cryptography.DoNotAddrOfCspParentWindowHandle=true"/>
</runtime>
Naopak uživatelé, kteří chtějí vyjádřit výslovný souhlas s novým chováním modulu runtime .NET Framework 4.7 při načítání aplikace ve starších verzích rozhraní .NET Framework, mohou nastavit přepínač AppContext na false
.
Jméno | Hodnota |
---|---|
Obor | Vedlejší |
Verze | 4.7 |
Typ | Změna cílení |
Ovlivněná rozhraní API
SslStream podporuje upozornění PROTOKOLU TLS
Detaily
Po neúspěšném použití metody handshake System.IO.IOException protokolu TLS se první vstupně-výstupní operace čtení/zápisu vyvolá s vnitřní System.ComponentModel.Win32Exception výjimkou. Kód System.ComponentModel.Win32Exception.NativeErrorCode pro výstrahu System.ComponentModel.Win32Exception TLS lze mapovat na výstrahu PROTOKOLU TLS od vzdálené strany pomocí kódů chyb Schannel pro výstrahy TLS a SSL. Další informace naleznete v dokumentu RFC 2246: Oddíl 7.2.2 Chybové výstrahy.
Chování rozhraní .NET Framework 4.6.2 a dřívější je, že přenosový kanál (obvykle připojení TCP) vyprší během zápisu nebo čtení, pokud druhá strana nepovedla metodu handshake a okamžitě potom připojení odmítla.
Návrh
Aplikace, které volají rozhraní API pro vstupně-výstupní operace sítě, například Read(Byte[], Int32, Int32)/Write(Byte[], Int32, Int32) by měly zpracovávat IOException nebo .System.TimeoutException
Funkce Upozornění protokolu TLS je ve výchozím nastavení povolená od rozhraní .NET Framework 4.7. Aplikace cílené na verze rozhraní .NET Framework od 4.0 do 4.6.2 spuštěné v systému .NET Framework 4.7 nebo vyšší budou mít funkci zakázanou, aby se zachovala kompatibilita.
K dispozici je následující konfigurační rozhraní API pro povolení nebo zakázání funkce pro aplikace .NET Framework 4.6 a novější spuštěné v rozhraní .NET Framework 4.7 nebo novější.
Programově: Musí to být první věc, kterou aplikace dělá, protože ServicePointManager inicializuje pouze jednou:
AppContext.SetSwitch("TestSwitch.LocalAppContext.DisableCaching", true); // Set to 'false' to enable the feature in .NET Framework 4.6 - 4.6.2. AppContext.SetSwitch("Switch.System.Net.DontEnableTlsAlerts", true);
AppConfig:
<runtime> <AppContextSwitchOverrides value="Switch.System.Net.DontEnableTlsAlerts=true"/> <!-- Set to 'false' to enable the feature in .NET Framework 4.6 - 4.6.2. --> </runtime>
Klíč registru (globální počítač): Nastavte hodnotu na
false
povolení funkce v rozhraní .NET Framework 4.6 – 4.6.2.Key: HKLM\SOFTWARE\Wow6432Node\Microsoft\.NETFramework\AppContext\Switch.System.Net.DontEnableTlsAlerts - Type: String - Value: "true"
Jméno | Hodnota |
---|---|
Obor | Edge |
Verze | 4.7 |
Typ | Změna cílení |
Ovlivněná rozhraní API
- System.Net.Security.SslStream
- System.Net.WebRequest
- System.Net.HttpWebRequest
- System.Net.FtpWebRequest
- System.Net.Mail.SmtpClient
- System.Net.Http
WCF (Windows Communication Foundation)
Serializace řídicích znaků pomocí DataContractJsonSerializer je nyní kompatibilní s ECMAScript V6 a V8
Detaily
V rozhraní .NET Framework 4.6.2 a starších verzích System.Runtime.Serialization.Json.DataContractJsonSerializer nebyly serializovány některé speciální řídicí znaky, například \b, \f a \t, způsobem, který byl kompatibilní s standardy ECMAScript V6 a V8. Od rozhraní .NET Framework 4.7 je serializace těchto řídicích znaků kompatibilní s ECMAScript V6 a V8.
Návrh
U aplikací, které cílí na rozhraní .NET Framework 4.7, je tato funkce ve výchozím nastavení povolená. Pokud toto chování není žádoucí, můžete tuto funkci odhlásit přidáním následujícího řádku do <runtime>
části souboru app.config nebo web.config:
<runtime>
<AppContextSwitchOverrides value="Switch.System.Runtime.Serialization.DoNotUseECMAScriptV6EscapeControlCharacter=false" />
</runtime>
Jméno | Hodnota |
---|---|
Obor | Edge |
Verze | 4.7 |
Typ | Změna cílení |
Ovlivněná rozhraní API
- DataContractJsonSerializer.WriteObject(Stream, Object)
- DataContractJsonSerializer.WriteObject(XmlDictionaryWriter, Object)
- DataContractJsonSerializer.WriteObject(XmlWriter, Object)
Zabezpečení zpráv WCF teď může používat protokoly TLS1.1 a TLS1.2
Detaily
Počínaje rozhraním .NET Framework 4.7 můžou zákazníci nakonfigurovat protokol TLS1.1 nebo TLS1.2 v zabezpečení zpráv WCF kromě protokolu SSL3.0 a TLS1.0 prostřednictvím nastavení konfigurace aplikace.
Návrh
V rozhraní .NET Framework 4.7 je ve výchozím nastavení zakázána podpora protokolu TLS1.1 a TLS1.2 v zabezpečení zpráv WCF. Můžete ho povolit přidáním následujícího řádku do <runtime>
části souboru app.config nebo web.config:
<runtime>
<AppContextSwitchOverrides value="Switch.System.ServiceModel.DisableUsingServicePointManagerSecurityProtocols=false;Switch.System.Net.DontEnableSchUseStrongCrypto=false" />
</runtime>
Jméno | Hodnota |
---|---|
Obor | Edge |
Verze | 4.7 |
Typ | Změna cílení |
Windows Presentation Foundation (WPF)
Volání System.Windows.Input.PenContext.Disable v systémech s podporou dotykového ovládání mohou vyvolat výjimku ArgumentException.
Detaily
Za určitých okolností můžou volání interní metody System.Windows.Intput.PenContext.Disable v systémech s podporou dotykového ovládání vyvolat neošetřené T:System.ArgumentException
z důvodu opětovného zobrazení.
Návrh
Tento problém je vyřešený v rozhraní .NET Framework 4.7. Pokud chcete této výjimce zabránit, upgradujte na verzi rozhraní .NET Framework počínaje rozhraním .NET Framework 4.7.
Jméno | Hodnota |
---|---|
Obor | Edge |
Verze | 4.6.1 |
Typ | Změna cílení |
NullReferenceException v kódu zpracování výjimek z ImageSourceConverter.ConvertFrom
Detaily
Chyba v kódu zpracování výjimek způsobila ConvertFrom(ITypeDescriptorContext, CultureInfo, Object) nesprávnou vyvolání System.NullReferenceException namísto zamýšlené výjimky ( System.IO.DirectoryNotFoundException nebo System.IO.FileNotFoundException). Tato změna opraví tuto chybu tak, aby metoda nyní vyvolá správnou výjimku.
Ve výchozím nastavení všechny aplikace, které cílí na rozhraní .NET Framework 4.6.2 a starší, budou nadále hodit System.NullReferenceException kvůli kompatibilitě. Vývojáři, kteří cílí na rozhraní .NET Framework 4.7 a novější, by měli vidět správné výjimky.
Návrh
Vývojáři, kteří se chtějí vrátit k získání System.NullReferenceException při cílení na rozhraní .NET Framework 4.7 nebo novější, můžou do souboru App.config své aplikace přidat nebo sloučit následující položky:
<configuration>
<runtime>
<AppContextSwitchOverrides value="Switch.System.Windows.Media.ImageSourceConverter.OverrideExceptionWithNullReferenceException=true"/>
</runtime>
</configuration>
Jméno | Hodnota |
---|---|
Obor | Edge |
Verze | 4.7 |
Typ | Změna cílení |
Ovlivněná rozhraní API
Rozložení mřížky WPF na hvězdicové sloupce
Detaily
Počínaje rozhraním .NET Framework 4.7 nahradí WPF algoritmus, který Grid používá k přidělení prostoru pro *-sloupce. V řadě případů se změní skutečná šířka přiřazená ke sloupcům *:
- Pokud má jeden nebo více sloupců také minimální nebo maximální šířku, která přepíše poměrné přidělení pro daný sloupec. (Minimální šířka může být odvozena z explicitní deklarace MinWidth nebo z implicitního minimum získaného z obsahu sloupce. Maximální šířku lze definovat pouze explicitně z deklarace MaxWidth.)
- Pokud jeden nebo více sloupců deklaruje extrémně velkou *-váhu, větší než 10^298.
- Pokud jsou *-váhy dostatečně odlišné, aby narazily na nestabilitu s plovoucí desetinnou čárkou (přetečení, podtečení, ztráta přesnosti).
- Pokud je zapnuté zaokrouhlení rozložení a efektivní rozlišení DPI displeje je dostatečně vysoké. V prvních dvou případech se šířky vytvořené novým algoritmem mohou výrazně lišit od šířek vytvořených starým algoritmem; v posledním případě bude rozdíl maximálně jeden nebo dva pixely.
Nový algoritmus opravuje několik chyb, které existují ve starém algoritmu:
Celkové přidělení sloupců může překročit šířku mřížky. K tomu může dojít při přidělování prostoru sloupci, jehož proporcionální podíl je menší než jeho minimální velikost. Algoritmus přidělí minimální velikost, která zmenší prostor dostupný pro ostatní sloupce. Pokud nejsou k dispozici žádné sloupce *-sloupce, které by bylo možné přidělit, bude celkové přidělení příliš velké.
Celkové přidělení může klesnout na šířku mřížky. Jedná se o duální problém na č. 1, který vzniká při přidělování sloupce, jehož proporcionální podíl je větší než jeho maximální velikost, aniž by zbyly sloupce *-sloupce, které by zabírají časovou rezervu.
Dva *-sloupce mohou přijímat přidělení, které nejsou úměrné jejich *váhy. Jedná se o mírnější verzi #1/#2, která vzniká při přidělování *-sloupců A, B a C (v tomto pořadí), kde proporcionální podíl B porušuje minimální (nebo maximální) omezení. Jak je uvedeno výše, změní se prostor dostupný pro sloupec C, který získá menší (nebo více) poměrného přidělení, než kolik bylo A.
Sloupce s extrémně velkými váhami (> 10^298) se považují za sloupce s hmotností 10^298. Proporcionální rozdíly mezi nimi (a mezi sloupci s mírně menší hmotností) nejsou dodrženy.
Sloupce s nekonečnými váhami se nezpracují správně. (Ve skutečnosti nemůžete nastavit váhu na nekonečno, ale jedná se o umělé omezení. Kód přidělení se ho snažil zpracovat, ale udělal špatnou úlohu.)
Několik menších problémů při předcházení přetečení, podtečení, ztrátě přesnosti a podobným problémům s plovoucí desetinnou čárkou.
Úpravy zaokrouhlování rozložení jsou nesprávné při dostatečně vysokém DPI. Nový algoritmus vytvoří výsledky, které splňují následující kritéria:
- Skutečná šířka přiřazená k *-sloupci není nikdy menší než její minimální šířka ani větší než její maximální šířka.
- Každému sloupci *-, který nemá přiřazenou minimální nebo maximální šířku, je přiřazena šířka úměrná své *hmotnosti. Pokud jsou dva sloupce deklarovány s šířkou x* a y* a pokud žádný sloupec neobdrží minimální nebo maximální šířku, skutečné šířky v a w přiřazené ke sloupcům jsou ve stejném poměru: v / w == x / y.
- Celková šířka přidělená "proporcionálním" *-sloupcům se rovná prostoru dostupnému po přidělení k omezeným sloupcům (pevné, automatické a *-sloupce, které jsou přiděleny jejich minimální nebo maximální šířku). To může být nula, například pokud součet minimálních šířek překračuje dostupnou šířku mřížky.
- Všechny tyto příkazy je třeba interpretovat s ohledem na "ideální" rozložení. Při zaokrouhlování rozložení se skutečné šířky můžou lišit od ideálních šířek až o jeden pixel.
Poznámka:
Vše uvedené o sloupcích a šířkách v tomto článku platí i pro řádky a výšky.
Návrh
Ve výchozím nastavení uvidí aplikace, které cílí na verze rozhraní .NET Framework počínaje rozhraním .NET Framework 4.7, nový algoritmus, zatímco aplikace, které cílí na rozhraní .NET Framework 4.6.2 nebo starší verze, uvidí starý algoritmus.
Pokud chcete výchozí nastavení přepsat, použijte následující nastavení konfigurace:
<runtime>
<AppContextSwitchOverrides value="Switch.System.Windows.Controls.Grid.StarDefinitionsCanExceedAvailableSpace=true" />
</runtime>
Hodnota true
vybere starý algoritmus a false
vybere nový algoritmus.
Jméno | Hodnota |
---|---|
Obor | Vedlejší |
Verze | 4.7 |
Typ | Změna cílení |
Dotykový zásobník založený na ukazatelích WPF
Detaily
Tato změna přidává možnost povolit volitelnou WM_POINTER sadu WPF touch/stylus. Vývojáři, kteří to explicitně nepovolují, by neměli vidět žádné změny v chování dotykového ovládání nebo stylusu WPF. Aktuální známé problémy s volitelnými WM_POINTER zásobníkem dotykového ovládání/stylusu:
- Žádná podpora rukopisu v reálném čase.
- I když rukopis a StylusPlugins budou i nadále fungovat, budou zpracovány ve vlákně uživatelského rozhraní, což může vést k nízkému výkonu.
- Změny chování způsobené změnami povýšení z událostí dotykového ovládání nebo stylusu na události myši
- Manipulace se může chovat jinak
- Přetažení se nezobrazí vhodná zpětná vazba pro dotykové zadání.
- To nemá vliv na vstup pera
- U událostí dotykového ovládání nebo pera už nejde zahájit přetažení.
- To může potenciálně způsobit, že aplikace přestane reagovat, dokud se nezjistí vstup myši.
- Místo toho by vývojáři měli zahájit přetažení z událostí myši.
Návrh
Vývojáři, kteří chtějí povolit tento zásobník, můžou do souboru App.config své aplikace přidat nebo sloučit následující položky:
<configuration>
<runtime>
<AppContextSwitchOverrides value="Switch.System.Windows.Input.Stylus.EnablePointerSupport=true"/>
</runtime>
</configuration>
Odebráním této hodnoty nebo nastavením hodnoty false se tento volitelný zásobník vypne. Všimněte si, že tento zásobník je k dispozici pouze ve Windows 10 Creators Update a novějších.
Jméno | Hodnota |
---|---|
Obor | Edge |
Verze | 4.7 |
Typ | Změna cílení |
Windows Workflow Foundation (WF)
Kontrolní součty pracovních postupů se změnily z MD5 na SHA1
Detaily
Pro podporu ladění v sadě Visual Studio modul runtime pracovního postupu generuje kontrolní součet instance pracovního postupu pomocí algoritmu hash. V rozhraní .NET Framework 4.6.2 a starších verzích použilo algoritmus hash kontrolního součtu pracovního postupu algoritmus MD5, který způsoboval problémy se systémy s podporou FIPS. Počínaje rozhraním .NET Framework 4.7 je algoritmus SHA1. Pokud váš kód tyto kontrolní součty zachovají, nebudou kompatibilní.
Návrh
Pokud váš kód nemůže načíst instance pracovního postupu kvůli selhání kontrolního součtu, zkuste nastavit AppContext
přepínač Switch.System.Activities.UseMD5ForWFDebugger na hodnotu true. V kódu:
System.AppContext.SetSwitch("Switch.System.Activities.UseMD5ForWFDebugger", true);
Nebo v konfiguraci:
<configuration>
<runtime>
<AppContextSwitchOverrides value="Switch.System.Activities.UseMD5ForWFDebugger=true" />
</runtime>
</configuration>
Jméno | Hodnota |
---|---|
Obor | Vedlejší |
Verze | 4.7 |
Typ | Změna cílení |
.NET Framework 4.7.1
ASP.NET
vylepšení přístupnosti ASP.NET v rozhraní .NET Framework 4.7.1
Detaily
Počínaje rozhraním .NET Framework 4.7.1 ASP.NET vylepšili, jak ASP.NET webové ovládací prvky fungují s technologií přístupnosti v sadě Visual Studio, aby bylo lepší podporovat ASP.NET zákazníky. Patří mezi ně následující změny:
- Změny implementace chybějících vzorů přístupnosti uživatelského rozhraní v ovládacích prvcích, jako je dialogové okno Přidat pole v průvodci zobrazení podrobností nebo dialogové okno Konfigurovat ListView průvodce ListView.
- Změny pro zlepšení zobrazení v režimu Vysoký kontrast, jako je editor polí stránkování dat.
- Změny, které zlepšují možnosti navigace pomocí klávesnice pro ovládací prvky, jako je dialogové okno Pole v Průvodci úpravou polí Pager ovládacího prvku DataPager, dialogové okno Konfigurovat objektContext nebo dialogové okno Konfigurovat výběr dat v průvodci Konfigurovat zdroj dat.
Návrh
Jak se odhlásit nebo odhlásit z těchto změn , aby návrhář sady Visual Studio mohl tyto změny využívat, musí běžet na rozhraní .NET Framework 4.7.1 nebo novějším. Z těchto změn může webová aplikace těžit jedním z následujících způsobů:
- Nainstalujte sadu Visual Studio 2017 15.3 nebo novější, která ve výchozím nastavení podporuje nové funkce přístupnosti s následujícím přepínačem AppContext.
- Odhlaste se ze starší verze chování přístupnosti přidáním
Switch.UseLegacyAccessibilityFeatures
přepínače AppContext do<runtime>
oddílu v souboru devenv.exe.config a jeho nastavením nafalse
, jak ukazuje následující příklad.
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<runtime>
...
<!-- AppContextSwitchOverrides value attribute is in the form of 'key1=true/false;key2=true/false' -->
<AppContextSwitchOverrides value="Switch.UseLegacyAccessibilityFeatures=false" />
...
</runtime>
</configuration>
Aplikace, které cílí na rozhraní .NET Framework 4.7.1 nebo novější a chtějí zachovat starší chování přístupnosti, se můžou přihlásit k používání starších funkcí přístupnosti explicitním nastavením tohoto přepínače AppContext na true
.
Jméno | Hodnota |
---|---|
Obor | Vedlejší |
Verze | 4.7.1 |
Typ | Změna cílení |
Základ
Výjimky vlákna serialPort na pozadí
Detaily
Vlákna na pozadí vytvořená se SerialPort streamy už proces neukončí, když dojde k vyvolání výjimek operačního systému.
V aplikacích, které cílí na rozhraní .NET Framework 4.7 a starší verze, se proces ukončí při vyvolání výjimky operačního systému ve vlákně na pozadí vytvořeném pomocí datového SerialPort proudu.
V aplikacích, které cílí na rozhraní .NET Framework 4.7.1 nebo novější verzi, čekají vlákna na pozadí na události operačního systému související s aktivním sériovým portem a v některých případech může dojít k chybovému ukončení, například náhlé odebrání sériového portu.
Návrh
U aplikací, které cílí na rozhraní .NET Framework 4.7.1, můžete vyloučit zpracování výjimek, pokud není žádoucí, přidáním následujícího kódu do <runtime>
části souboru app.config
:
<runtime>
<AppContextSwitchOverrides value="Switch.System.IO.Ports.DoNotCatchSerialStreamThreadExceptions=true" />
</runtime>
U aplikací, které cílí na starší verze rozhraní .NET Framework, ale běží na rozhraní .NET Framework 4.7.1 nebo novějším, můžete se přihlásit k zpracování výjimek přidáním následujícího kódu do <runtime>
části souboru app.config
:
<runtime>
<AppContextSwitchOverrides value="Switch.System.IO.Ports.DoNotCatchSerialStreamThreadExceptions=false" />
</runtime>
Jméno | Hodnota |
---|---|
Obor | Vedlejší |
Verze | 4.7.1 |
Typ | Změna cílení |
Ovlivněná rozhraní API
ServiceBase nerozšíruje výjimky OnStart
Detaily
V rozhraní .NET Framework 4.7 a starších verzích se výjimky vyvolané při spuštění služby nerozšířují do volajícího ServiceBase.Run.
Počínaje aplikacemi, které cílí na rozhraní .NET Framework 4.7.1, modul runtime rozšíří výjimky ServiceBase.Run pro služby, které se nespustí.
Návrh
Pokud dojde k výjimce, při spuštění služby se tato výjimka rozšíří. To by mělo pomoct diagnostikovat případy, kdy se služby nespustí.
Pokud je toto chování nežádoucí, můžete se z něj odhlásit přidáním následujícího AppContextSwitchOverrides
prvku do runtime
části konfiguračního souboru aplikace:
<AppContextSwitchOverrides value="Switch.System.ServiceProcess.DontThrowExceptionsOnStart=true" />
Pokud vaše aplikace cílí na starší verzi než 4.7.1, ale chcete toto chování mít, přidejte do runtime
části konfiguračního souboru aplikace následující AppContextSwitchOverrides
prvek:
<AppContextSwitchOverrides value="Switch.System.ServiceProcess.DontThrowExceptionsOnStart=false" />
Jméno | Hodnota |
---|---|
Obor | Vedlejší |
Verze | 4.7.1 |
Typ | Změna cílení |
Ovlivněná rozhraní API
Zabezpečení
Výchozí algoritmy SignedXML a SignedXMS se změnily na SHA256
Detaily
V rozhraní .NET Framework 4.7 a starších verzích je pro některé operace výchozí hodnota SHA1 SignedXML a SignedCMS. Počínaje rozhraním .NET Framework 4.7.1 je pro tyto operace ve výchozím nastavení povoleno SHA256. Tato změna je nezbytná, protože SHA1 se už nepovažuje za zabezpečenou.
Návrh
Existují dvě nové hodnoty přepínače kontextu, které určují, jestli se ve výchozím nastavení používá SHA1 (nezabezpečený) nebo SHA256:
- Switch.System.Security.Cryptography.Xml.UseInsecureHashAlgorithms
- Switch.System.Security.Cryptography.Pkcs.UseInsecureHashAlgorithms Pro aplikace, které cílí na rozhraní .NET Framework 4.7.1 a novější verze, pokud je použití SHA256 nežádoucí, můžete obnovit výchozí hodnotu SHA1 přidáním následujícího přepínače konfigurace do části runtime konfiguračního souboru aplikace:
<AppContextSwitchOverrides value="Switch.System.Security.Cryptography.Xml.UseInsecureHashAlgorithms=true;Switch.System.Security.Cryptography.Pkcs.UseInsecureHashAlgorithms=true" />
U aplikací, které cílí na rozhraní .NET Framework 4.7 a starší verze, můžete se k této změně přihlásit přidáním následujícího přepínače konfigurace do oddílu runtime konfiguračního souboru aplikace:
<AppContextSwitchOverrides value="Switch.System.Security.Cryptography.Xml.UseInsecureHashAlgorithms=false;Switch.System.Security.Cryptography.Pkcs.UseInsecureHashAlgorithms=false" />
Jméno | Hodnota |
---|---|
Obor | Vedlejší |
Verze | 4.7.1 |
Typ | Změna cílení |
Ovlivněná rozhraní API
- System.Security.Cryptography.Pkcs.CmsSigner
- System.Security.Cryptography.Xml.SignedXml
- System.Security.Cryptography.Xml.Reference
SignedXml.GetPublicKey vrátí RSACng na net462 (nebo lightupu) bez změny cílení.
Detaily
Počínaje rozhraním .NET Framework 4.6.2 se konkrétní typ objektu vráceného SignedXml.GetPublicKey metodou změnil (bezquirku) z implementace CryptoServiceProvider na implementaci Cng. Důvodem je to, že implementace se změnila z použití certificate.PublicKey.Key
na použití interního certificate.GetAnyPublicKey
, který předává RSACertificateExtensions.GetRSAPublicKey.
Návrh
Počínaje aplikacemi spuštěnými v rozhraní .NET Framework 4.7.1 můžete použít implementaci CryptoServiceProvider, která se ve výchozím nastavení používá v rozhraní .NET Framework 4.6.1 a starších verzích, a to přidáním následujícího přepínače konfigurace do části runtime konfiguračního souboru aplikace:
<AppContextSwitchOverrides value="Switch.System.Security.Cryptography.Xml.SignedXmlUseLegacyCertificatePrivateKey=true" />
Jméno | Hodnota |
---|---|
Obor | Edge |
Verze | 4.6.2 |
Typ | Změna cílení |
Ovlivněná rozhraní API
WCF (Windows Communication Foundation)
Vylepšení přístupnosti pro některé nástroje sady .NET SDK
Detaily
V sadě .NET Framework SDK 4.7.1 byly nástroje pro SvcConfigEditor.exe a SvcTraceViewer.exe vylepšeny opravou různých problémů s přístupností. Většina z nich byla malá problémy, jako je název, který se nedefinuje nebo se správně neimplementují určité vzory automatizace uživatelského rozhraní. I když si mnoho uživatelů tyto nesprávné hodnoty nevědomí, zákazníci, kteří používají technologie usnadnění, jako jsou čtečky obrazovky, najdou tyto nástroje sady SDK přístupnější. Samozřejmě tyto opravy mění některé předchozí chování, jako je pořadí fokusu klávesnice. Pokud chcete získat všechny opravy přístupnosti v těchto nástrojích, můžete do souboru app.config použít následující:
<runtime>
<AppContextSwitchOverrides value="Switch.UseLegacyAccessibilityFeatures=false"/>
</runtime>
Jméno | Hodnota |
---|---|
Obor | Edge |
Verze | 4.7.1 |
Typ | Změna cílení |
Windows Forms
Vylepšení přístupnosti v ovládacích prvcích model Windows Forms
Detaily
model Windows Forms vylepšuje, jak funguje s technologiemi přístupnosti, aby lépe podporovala model Windows Forms zákazníky. Patří mezi ně následující změny počínaje rozhraním .NET Framework 4.7.1:
- Změny pro zlepšení zobrazení během režimu Vysoký kontrast.
- Změny pro zlepšení prostředí prohlížeče vlastností Mezi vylepšení prohlížeče vlastností patří:
- Lepší navigace pomocí klávesnice v různých oknech rozevíracího seznamu
- Zmenšení nepotřebných zarážek tabulátoru
- Lepší generování sestav typů ovládacích prvků
- Vylepšené chování předčítání
- Změny implementace chybějících vzorů přístupnosti uživatelského rozhraní v ovládacích prvcích
Návrh
Jak se odhlásit nebo odhlásit z těchto změn , aby aplikace mohla tyto změny využívat, musí běžet na rozhraní .NET Framework 4.7.1 nebo novějším. Aplikace může využívat tyto změny jedním z následujících způsobů:
- Je rekompilován tak, aby cílil na rozhraní .NET Framework 4.7.1. Tyto změny přístupnosti jsou ve výchozím nastavení povolené v aplikacích model Windows Forms, které cílí na rozhraní .NET Framework 4.7.1 nebo novější.
- Odhlasuje se ze starších chování přístupnosti přidáním následujícího přepínače AppContext do
<runtime>
části souboru app.config a jeho nastavením nafalse
, jak ukazuje následující příklad.
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.7"/>
</startup>
<runtime>
<!-- AppContextSwitchOverrides value attribute is in the form of 'key1=true/false;key2=true/false -->
<AppContextSwitchOverrides value="Switch.UseLegacyAccessibilityFeatures=false" />
</runtime>
</configuration>
Aplikace, které cílí na rozhraní .NET Framework 4.7.1 nebo novější a chtějí zachovat starší chování přístupnosti, se můžou přihlásit k používání starších funkcí přístupnosti explicitním nastavením tohoto přepínače AppContext na true
.
Přehled automatizace uživatelského rozhraní najdete v tématu model UI Automation Přehled.
Přidání podpory pro vzory a vlastnosti model UI Automation
Klienti přístupnosti můžou využívat nové funkce přístupnosti WinForms pomocí běžných veřejně popsaných vzorů vyvolání. Tyto vzory nejsou specifické pro WinForms. Klienti usnadnění můžou například volat metodu QueryInterface v rozhraní IAccessible (MAAS) k získání rozhraní IServiceProvider. Pokud je toto rozhraní k dispozici, mohou klienti použít svou metodu QueryService k vyžádání rozhraní IAccessibleEx. Další informace naleznete v tématu Použití IAccessibleEx z klienta. Počínaje rozhraním .NET Framework 4.7.1 jsou pro objekty přístupnosti WinForms k dispozici IServiceProvider a IAccessibleEx (pokud je k dispozici).
.NET Framework 4.7.1 přidává podporu pro následující vzory a vlastnosti automatizace uživatelského rozhraní:
ComboBox Ovládací ToolStripSplitButton prvky podporují model Rozbalit/Sbalit.
Ovládací ToolStripMenuItem prvek má hodnotu ControlType.MenuItemvlastnosti ControlType .
Ovládací ToolStripItem prvek podporuje NameProperty vlastnost avzor Rozbalit/Sbalit.
Ovládací ToolStripDropDownItem prvek podporuje AccessibleEvents označení StateChange a NameChange při rozbalení nebo sbalení rozevíracího seznamu.
Ovládací ToolStripDropDownButton prvek má controlType hodnotu ControlType.MenuItemvlastnosti .
Ovládací DataGridViewCheckBoxCell prvek podporuje TogglePattern.
DomainUpDown Ovládací NumericUpDown prvky podporují NameProperty vlastnost a mají ControlType of ControlType.Spinner.
Vylepšení ovládacího prvku PropertyGrid Rozhraní .NET Framework 4.7.1 přidává následující vylepšení ovládacího prvku PropertyBrowser:Tlačítko Podrobnosti v chybovém dialogovém okně, které se zobrazí, když uživatel zadá nesprávnou hodnotu do PropertyGrid ovládacího prvku podporuje vzorec Rozbalit/Sbalit, stav a název změnit oznámení a ControlType vlastnost s hodnotou ControlType.MenuItem.
Podokno zpráv zobrazené při rozbalení tlačítka Podrobnosti dialogového okna s chybou je nyní přístupné pomocí klávesnice a umožňuje programu Předčítání oznámit obsah chybové zprávy.
Řádky AccessibleRole v ovládacím PropertyGrid prvku se změnily z "Řádek" na "Buňka". Buňka se mapuje na UIA ControlType DataItem, což umožňuje podporovat příslušné klávesové zkratky a oznámení Předčítání.
Řádky PropertyGrid ovládacího prvku, které představují položky záhlaví, pokud PropertyGrid má ovládací prvek nastavena PropertySortPropertySort.Categorized vlastnost ControlType hodnotu vlastnosti .ControlType.Button
Řádky PropertyGrid ovládacího prvku, které představují položky záhlaví, pokud PropertyGrid má ovládací prvek nastavenou PropertySort vlastnost pro PropertySort.Categorized podporu vzoru Rozbalit/Sbalit.
Vylepšená navigace pomocí klávesnice mezi mřížkou a panelem nástrojů nad ní Když stisknete klávesu Shift-Tab, vyberete místo celého panelu nástrojů první tlačítko ToolBar.
PropertyGrid ovládací prvky zobrazené v režimu Vysoký kontrast nyní nakreslený obdélník fokusu kolem tlačítka ToolBar, který odpovídá aktuální PropertySort hodnotě vlastnosti.
PropertyGrid ovládací prvky zobrazené v režimu Vysoký kontrast a s vlastností nastavenou PropertySort na PropertySort.Categorized nyní zobrazí pozadí záhlaví kategorií v vysoce kontrastní barvě.
PropertyGrid ovládací prvky lépe rozlišují mezi položkami ToolBar s fokusem a položkami ToolBar, které označují aktuální hodnotu PropertySort vlastnosti. Tato oprava se skládá ze změny vysokého kontrastu a změny pro scénáře s jiným než vysokým kontrastem.
PropertyGrid ovládací prvek ToolBar položky označující aktuální hodnotu PropertySort vlastnosti podporuje TogglePattern.
Vylepšená podpora Předčítání pro rozlišení vybraného zarovnání v nástroji Pro výběr zarovnání
Když se ve formuláři zobrazí prázdný PropertyGrid ovládací prvek, zobrazí se teď fokus tam, kde dříve nebyl.
Použití barev definovaných operačním systémem v motivech s vysokým kontrastem
- Ovládací Button prvky s CheckBox vlastností FlatStyle nastavenou na FlatStyle.System, což je výchozí styl, nyní používají barvy definované operačním systémem v motivu Vysoký kontrast při výběru. Dříve nebyly barvy textu a pozadí kontrastní a byly obtížně čitelné.
- Ovládací Buttonprvky , , CheckBoxRadioButton, LinkLabelLabela GroupBox s jejich Enabled vlastností nastavena na false použila stínovanou barvu k vykreslení textu v motivech Vysoký kontrast, což vede k nízkému kontrastu na pozadí. Teď tyto ovládací prvky používají barvu Zakázaného textu definovanou operačním systémem. Tato oprava se vztahuje na ovládací prvky s
FlatStyle
vlastností nastavenou na jinou hodnotu než FlatStyle.System. Tyto ovládací prvky jsou vykreslovány operačním systémem. - DataGridView Teď vykreslí viditelný obdélník kolem obsahu buňky, která má aktuální fokus. Dříve to nebylo vidět v určitých motivech s vysokým kontrastem.
- ToolStripMenuItem ovládací prvky s vlastností Enabled nastavenou na false teď používají barvu Zakázáno text definované operačním systémem.
- ToolStripMenuItem ovládací prvky s vlastností Checked nastavenou na true nyní vykreslují přidruženou značku zaškrtnutí v kontrastní systémové barvě. Dříve nebyla barva značky zaškrtnutí dostatečně kontrastní a nebyla viditelná v motivech s vysokým kontrastem. POZNÁMKA: Windows 10 změnil hodnoty některých barev systému s vysokým kontrastem. model Windows Forms Framework je založená na rozhraní Win32. Pokud chcete co nejlépe využít, spusťte nejnovější verzi Windows a přihlaste se k nejnovějším změnám operačního systému přidáním souboru app.manifest do testovací aplikace a zrušením komentování následujícího kódu:
<!-- Windows 10 -->
<supportedOS Id="{8e0f7a12-bfb3-4fe8-b9a5-48fd50a15a9a}" />
Vylepšená navigace pomocí klávesnice
- ComboBox Pokud má ovládací prvek nastavenou DropDownStyle vlastnost ComboBoxStyle.DropDownList a je první ovládací prvek v pořadí ovládacích prvků ve formuláři, zobrazí nyní obdélník fokusu při otevření nadřazeného formuláře pomocí klávesnice. Před touto změnou byl fokus klávesnice na tomto ovládacím prvku, ale nebyl vykreslen indikátor fokusu.
Vylepšená podpora Předčítání
Ovládací MonthCalendar prvek přidal podporu pro technologie usnadnění pro přístup k ovládacímu prvku, včetně možnosti Předčítání číst hodnotu ovládacího prvku, když předtím nemohl.
Ovládací CheckedListBox prvek teď upozorní Program Předčítání, když CheckBox.CheckState byla vlastnost změněna. Předčítání dříve neobdrželo oznámení a uživatelé by proto nebyli informováni o tom, že CheckState vlastnost byla aktualizována.
Ovládací LinkLabel prvek změnil způsob, jakým upozorní Program Předčítání na text v ovládacím prvku. Program Předčítání dříve oznámil tento text dvakrát a přečetl symboly "&" jako skutečný text, i když nejsou viditelné pro uživatele. Duplicitní text byl odebrán z oznámení Předčítání a nepotřebné symboly "&".
Typy DataGridViewCell ovládacích prvků teď správně hlásí stav Předčítání a dalších technologií usnadnění jen pro čtení.
Program Předčítání teď dokáže přečíst systémovou nabídku podřízených oken v aplikacích [Multiple-Document Interface]~/docs/framework/winforms/advanced/multiple-document-interface-mdi-applications.mdi-applications.md).
Program Předčítání teď dokáže číst ToolStripMenuItem ovládací prvky s vlastností nastavenou ToolStripItem.Enabled na false. Předčítání se dříve nemohlo zaměřit na zakázané položky nabídky pro čtení obsahu.
Jméno | Hodnota |
---|---|
Obor | Hlavní verze |
Verze | 4.8 |
Typ | Změna cílení |
Ovlivněná rozhraní API
- ToolStripDropDownButton.CreateAccessibilityInstance()
- DomainUpDown.DomainUpDownAccessibleObject.Name
- MonthCalendar.AccessibilityObject
Windows Presentation Foundation (WPF)
Vylepšení přístupnosti ve WPF
Detaily
Vylepšení vysokého kontrastu
- Fokus Expander ovládacího prvku je teď viditelný. V předchozích verzích rozhraní .NET Framework to nebylo.
- Text v CheckBox a RadioButton ovládací prvky, které jsou vybrány, je nyní přehlednější než v předchozích verzích rozhraní .NET Framework.
- Ohraničení zakázaného ComboBox textu je teď stejné barvy jako zakázaný text. V předchozích verzích rozhraní .NET Framework to nebylo.
- Zakázaná a prioritní tlačítka teď používají správnou barvu motivu. V předchozíchverzích
- Rozevírací tlačítko je nyní viditelné, když ComboBox je styl ovládacího prvku nastavený na ToolBar.ComboBoxStyleKey. V předchozích verzích rozhraní .NET Framework to nebylo.
- Šipka indikátoru řazení v ovládacím DataGrid prvku teď používá barvy motivu. V předchozích verzích rozhraní .NET Framework to nebylo.
- Výchozí styl hypertextového odkazu se teď změní na správnou barvu motivu najetí myší. V předchozích verzích rozhraní .NET Framework to nebylo.
- Fokus klávesnice na přepínačích je teď viditelný. V předchozích verzích rozhraní .NET Framework to nebylo.
- Sloupec DataGrid zaškrtávacího políčka ovládacího prvku teď používá očekávané barvy pro zpětnou vazbu fokusu klávesnice. V předchozích verzích rozhraní .NET Framework to nebylo.
- Vizuály fokusu klávesnice jsou teď viditelné na ComboBox ovládacích prvcích a ListBox jsou viditelné. V předchozích verzích rozhraní .NET Framework to nebylo.
Vylepšení interakce čtečky obrazovky
- Expander čtečky obrazovky teď čtečky obrazovky správně oznamují jako skupiny (rozbalení nebo sbalení).
- DataGridCell Ovládací prvky jsou nyní správně oznámeny jako buňka datové mřížky (lokalizované) čtečkou obrazovky.
- Čtečky obrazovky teď oznámí název upravitelného ComboBoxsouboru .
- PasswordBox čtečky obrazovky už čtečky obrazovky nehlásí, že se jedná o položku v zobrazení.
Podpora liveregionu
Čtečky obrazovky, jako je Předčítání, pomáhají lidem pochopit uživatelské rozhraní aplikace, obvykle popisem prvku uživatelského rozhraní, který je aktuálně fokus. Pokud se ale prvek uživatelského rozhraní někde na obrazovce změní a fokus nemá, nemusí být uživatel informovaný a nezmešká důležité informace. LiveRegions mají tento problém vyřešit. Vývojář je může použít k informování čtečky obrazovky nebo jakéhokoli jiného klienta model UI Automation o důležitých změnách prvku uživatelského rozhraní. Čtečka obrazovky pak může rozhodnout, jak a kdy uživatele o této změně informovat. Vlastnost LiveSetting také umožňuje čtečkě obrazovky vědět, jak důležité je informovat uživatele o změně provedené v uživatelském rozhraní.
Návrh
Jak se odhlásit nebo odhlásit z těchto změn
Aby aplikace mohla tyto změny využívat, musí běžet v rozhraní .NET Framework 4.7.1 nebo novějším. Aplikace může využívat tyto změny jedním z následujících způsobů:
Cíl rozhraní .NET Framework 4.7.1 Toto je doporučený postup. Tyto změny přístupnosti jsou ve výchozím nastavení povolené u aplikací WPF, které cílí na rozhraní .NET Framework 4.7.1 nebo novější.
Odhlásí se ze starší verze chování přístupnosti přidáním následujícího přepínače AppContext v
<runtime>
části konfiguračního souboru aplikace a jeho nastavením nafalse
, jak ukazuje následující příklad.<?xml version="1.0" encoding="utf-8"?> <configuration> <startup> <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.7"/> </startup> <runtime> <!-- AppContextSwitchOverrides value attribute is in the form of 'key1=true/false;key2=true/false' --> <AppContextSwitchOverrides value="Switch.UseLegacyAccessibilityFeatures=false" /> </runtime> </configuration>
Aplikace, které cílí na rozhraní .NET Framework 4.7.1 nebo novější a chtějí zachovat starší chování přístupnosti, se můžou přihlásit k používání starších funkcí přístupnosti explicitním nastavením tohoto přepínače AppContext na true
.
Přehled automatizace uživatelského rozhraní najdete v tématu model UI Automation Přehled.
Jméno | Hodnota |
---|---|
Obor | Hlavní verze |
Verze | 4.7.1 |
Typ | Změna cílení |
Ovlivněná rozhraní API
- AutomationElementIdentifiers.LiveSettingProperty
- AutomationElementIdentifiers.LiveRegionChangedEvent
- System.Windows.Automation.AutomationLiveSetting
- AutomationProperties.LiveSettingProperty
- AutomationProperties.SetLiveSetting(DependencyObject, AutomationLiveSetting)
- AutomationProperties.GetLiveSetting(DependencyObject)
- AutomationPeer.GetLiveSettingCore()
Selector SelectionChanged event and SelectedValue – vlastnost
Detaily
Počínaje rozhraním .NET Framework 4.7.1 vždy Selector aktualizuje hodnotu jeho SelectedValue vlastnosti před vyvolání SelectionChanged události při změně výběru. Díky tomu je vlastnost SelectedValue konzistentní s ostatními vlastnostmi výběru (SelectedItem a SelectedIndex), které jsou aktualizovány před vyvolání události.
Ve starších verzích rozhraní .NET Framework 4.7 došlo k aktualizaci na SelectedValue před událostí ve většině případů, ale došlo k ní po události, pokud byla změna výběru způsobena změnou SelectedValue vlastnosti.
Návrh
Aplikace, které cílí na rozhraní .NET Framework 4.7.1 nebo novější, se můžou odhlásit z této změny a používat starší chování přidáním následujícího kódu do <runtime>
části konfiguračního souboru aplikace:
<runtime>
<AppContextSwitchOverrides
value="Switch.System.Windows.Controls.TabControl.SelectionPropertiesCanLagBehindSelectionChangedEvent=true" />
</runtime>
Aplikace, které cílí na rozhraní .NET Framework 4.7 nebo starší, ale jsou spuštěné v rozhraní .NET Framework 4.7.1 nebo novější, můžou nové chování povolit přidáním následujícího řádku do <runtime>
části souboru .configuration aplikace:
<runtime>
<AppContextSwitchOverrides value="Switch.System.Windows.Controls.TabControl.SelectionPropertiesCanLagBehindSelectionChangedEvent=false" />
</runtime>
Jméno | Hodnota |
---|---|
Obor | Vedlejší |
Verze | 4.7.1 |
Typ | Změna cílení |
Ovlivněná rozhraní API
TabControl SelectionChanged – událost a SelectedContent – vlastnost
Detaily
Počínaje rozhraním .NET Framework 4.7.1 TabControl aktualizuje hodnotu jeho SelectedContent vlastnosti před vyvolání SelectionChanged události při změně výběru. V rozhraní .NET Framework 4.7 a starších verzích došlo po události k aktualizaci na SelectedContent.
Návrh
Aplikace, které cílí na rozhraní .NET Framework 4.7.1 nebo novější, se můžou odhlásit z této změny a používat starší chování přidáním následujícího kódu do <runtime>
části konfiguračního souboru aplikace:
<runtime>
<AppContextSwitchOverrides value="Switch.System.Windows.Controls.TabControl.SelectionPropertiesCanLagBehindSelectionChangedEvent=true" />
</runtime>
Aplikace, které cílí na rozhraní .NET Framework 4.7 nebo starší, ale jsou spuštěné v rozhraní .NET Framework 4.7.1 nebo novější, můžou nové chování povolit přidáním následujícího řádku do <runtime>
části souboru .configuration aplikace:
<runtime>
<AppContextSwitchOverrides value="Switch.System.Windows.Controls.TabControl.SelectionPropertiesCanLagBehindSelectionChangedEvent=false" />
</runtime>
Jméno | Hodnota |
---|---|
Obor | Vedlejší |
Verze | 4.7.1 |
Typ | Změna cílení |
Ovlivněná rozhraní API
Výchozí algoritmus hash pro WPF PackageDigitalSignatureManager je teď SHA256
Detaily
Poskytuje System.IO.Packaging.PackageDigitalSignatureManager
funkce pro digitální podpisy ve vztahu k balíčkům WPF. V rozhraní .NET Framework 4.7 a starších verzích byl výchozí algoritmus (PackageDigitalSignatureManager.DefaultHashAlgorithm) používaný k podepisování částí balíčku SHA1. Vzhledem k nedávným problémům se zabezpečením SHA1 se toto výchozí nastavení změnilo na SHA256 počínaje rozhraním .NET Framework 4.7.1. Tato změna má vliv na podepisování všech balíčků, včetně dokumentů XPS.
Návrh
Vývojář, který chce tuto změnu využít při cílení na architekturu nižší než .NET Framework 4.7.1 nebo vývojář, který vyžaduje předchozí funkce při cílení na rozhraní .NET Framework 4.7.1 nebo vyšší, může správně nastavit následující příznak AppContext. Hodnota true způsobí použití SHA1 jako výchozího algoritmu; výsledkem hodnoty false je SHA256.
<configuration>
<runtime>
<AppContextSwitchOverrides value="Switch.MS.Internal.UseSha1AsDefaultHashAlgorithmForDigitalSignatures=true"/>
</runtime>
</configuration>
Jméno | Hodnota |
---|---|
Obor | Edge |
Verze | 4.7.1 |
Typ | Změna cílení |
Ovlivněná rozhraní API
Windows Workflow Foundation (WF)
Vylepšení přístupnosti v návrháři pracovních postupů Windows Workflow Foundation (WF)
Detaily
Návrhář pracovních postupů Windows Workflow Foundation (WF) vylepšuje, jak funguje s technologiemi přístupnosti. Mezi tato vylepšení patří následující změny:
- Pořadí ovládacích prvků se změní na zleva doprava a shora dolů v některých ovládacích prvcích:
- Okno inicializace korelace pro nastavení dat korelace pro InitializeCorrelation aktivitu
- Okno definice obsahu pro Receiveaktivity , Send, SendReplya ReceiveReply aktivity
- Další funkce jsou k dispozici prostřednictvím klávesnice:
- Při úpravách vlastností aktivity je možné skupiny vlastností sbalit pomocí klávesnice při prvním zaměření.
- Ikony upozornění jsou teď přístupné pomocí klávesnice.
- Tlačítko Další vlastnosti v okno Vlastnosti je teď přístupné pomocí klávesnice.
- Uživatelé klávesnice teď mají přístup k položkám záhlaví v podoknech Argumenty a proměnné návrháře pracovního postupu.
- Lepší viditelnost položek s fokusem, například v těchto případech:
- Přidání řádků do datových mřížek používaných návrhářem pracovního postupu a návrháři aktivit
- Tabbing through fields in the ReceiveReply and SendReply activities.
- Nastavení výchozích hodnot pro proměnné nebo argumenty
- Čtečky obrazovky teď můžou správně rozpoznat:
- Zarážky nastavené v návrháři pracovního postupu
- The FlowSwitch<T>, FlowDecisiona CorrelationScope activities.
- Receive Obsah aktivity.
- Typ cíle pro InvokeMethod aktivitu.
- Pole se seznamem Exception a část Finally v aktivitě TryCatch .
- Pole se seznamem Typ zprávy, rozdělovač v okně Přidat inicializátory korelace, okno Definice obsahu a okno KorelaceOn Defintion v aktivitách zasílání zpráv (Receive, Send, SendReplya ReceiveReply).
- Přechody a cíle přechodů stavových počítačů
- Poznámky a konektory k FlowDecision aktivitám
- Kontextové nabídky (po kliknutí pravým tlačítkem myši) pro aktivity
- Editory hodnot vlastností, tlačítko Vymazat hledání, tlačítka Podle kategorie a abecedního řazení a dialogové okno Editor výrazů v mřížce vlastností.
- Procento přiblížení v Návrháři pracovního postupu
- Oddělovač aktivit Parallel a Pick aktivit.
- Aktivita InvokeDelegate .
- Okno Vybrat typy pro aktivity slovníku (
Microsoft.Activities.AddToDictionary<TKey,TValue>
Microsoft.Activities.RemoveFromDictionary<TKey,TValue>
atd.). - Okno Procházet a vybrat typ rozhraní .NET.
- Popis cesty v Návrháři pracovního postupu
- Uživatelé, kteří zvolí motivy s vysokým kontrastem, uvidí mnoho vylepšení viditelnosti Návrháře pracovního postupu a jeho ovládacích prvků, jako jsou lepší kontrastní poměry mezi prvky a znatelnými poli výběru používanými pro prvky fokusu.
Návrh
Pokud máte aplikaci s znovu hostovaným návrhářem pracovního postupu, může vaše aplikace využívat tyto změny provedením některé z těchto akcí:
- Překompilujte aplikaci tak, aby cílila na rozhraní .NET Framework 4.7.1. Tyto změny přístupnosti jsou ve výchozím nastavení povolené.
- Pokud vaše aplikace cílí na rozhraní .NET Framework 4.7 nebo starší, ale běží na rozhraní .NET Framework 4.7.1, můžete se odhlásit z těchto starších chování přístupnosti přidáním následujícího přepínače AppContext do
<runtime>
části souboru app.config a nastavením nafalse
, jak ukazuje následující příklad.
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.7"/>
</startup>
<runtime>
<!-- AppContextSwitchOverrides value attribute is in the form of 'key1=true/false;key2=true/false -->
<AppContextSwitchOverrides value="Switch.UseLegacyAccessibilityFeatures=false" />
</runtime>
</configuration>
Aplikace, které cílí na rozhraní .NET Framework 4.7.1 nebo novější a chtějí zachovat starší chování přístupnosti, se můžou přihlásit k používání starších funkcí přístupnosti explicitním nastavením tohoto přepínače AppContext na true
.
Jméno | Hodnota |
---|---|
Obor | Vedlejší |
Verze | 4.7.1 |
Typ | Změna cílení |
.NET Framework 4.7.2
Základ
Povolit obousměrné znaky ovládacího prvku Unicode v identifikátorech URI
Detaily
Unicode určuje několik speciálních řídicích znaků, které slouží k určení orientace textu. V předchozíchverzích Abychom mohli lépe postupovat podle dokumentu RFC 3987, teď tyto znaky povolíme v identifikátorech URI. Když se v identifikátoru URI najde nekódované, jsou kódované v procentech. Když jsou nalezeny procenta kódované, zůstanou tak, jak jsou.
Návrh
U aplikací, které cílí na verze rozhraní .NET Framework počínaje verzí 4.7.2, je ve výchozím nastavení povolena podpora obousměrných znaků Unicode. Pokud je tato změna nežádoucí, můžete ji zakázat přidáním následujícího přepínače AppContextSwitchOverrides do <runtime>
části konfiguračního souboru aplikace:
<runtime>
<AppContextSwitchOverrides value="Switch.System.Uri.DontKeepUnicodeBidiFormattingCharacters=true" />
</runtime>
Pro aplikace, které cílí na starší verze rozhraní .NET Framework, ale jsou spuštěny v rámci verzí počínaje rozhraním .NET Framework 4.7.2, je podpora obousměrných znaků Unicode ve výchozím nastavení zakázaná. Můžete ho povolit přidáním následujícího přepínače AppContextSwitchOverrides do <runtime>
části konfiguračního souboru aplikace::
<runtime>
<AppContextSwitchOverrides value="Switch.System.Uri.DontKeepUnicodeBidiFormattingCharacters=false" />
</runtime>
Jméno | Hodnota |
---|---|
Obor | Vedlejší |
Verze | 4.7.2 |
Typ | Změna cílení |
Ovlivněná rozhraní API
DeflateStream používá nativní rozhraní API pro dekompresi.
Detaily
Počínaje rozhraním .NET Framework 4.7.2 se implementace dekomprese ve T:System.IO.Compression.DeflateStream
třídě změnila tak, aby ve výchozím nastavení používala nativní rozhraní API systému Windows. Obvykle to vede ke značnému zlepšení výkonu. Všechny aplikace .NET, které cílí na rozhraní .NET Framework verze 4.7.2 nebo vyšší, používají nativní implementaci. Tato změna může vést k některým rozdílům v chování, mezi které patří:
- Zprávy o výjimce se mohou lišit. Typ vyvolané výjimky však zůstává stejný.
- Některé zvláštní situace, například nedostatek paměti k dokončení operace, mohou být zpracovány odlišně.
- Existují známé rozdíly pro parsování hlavičky gzip (poznámka: je ovlivněn pouze
GZipStream
pro dekompresi): - Výjimky při analýze neplatných hlaviček mohou být vyvolány v různých časech.
- Nativní implementace vynucuje, aby hodnoty některých rezervovaných příznaků uvnitř hlavičky gzip (tj. FLG) byly nastaveny podle specifikace, což může způsobit vyvolání výjimky, kdy byly dříve neplatné hodnoty ignorovány.
Návrh
Pokud dekomprese s nativními rozhraními API nepříznivě ovlivnilo chování vaší aplikace, můžete tuto funkci zrušit tak, že přidáte Switch.System.IO.Compression.DoNotUseNativeZipLibraryForDecompression
přepínač do runtime
části souboru app.config a nastavíte ji na true
:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<runtime>
<AppContextSwitchOverrides value="Switch.System.IO.Compression.DoNotUseNativeZipLibraryForDecompression=true" />
</runtime>
</configuration>
Jméno | Hodnota |
---|---|
Obor | Vedlejší |
Verze | 4.7.2 |
Typ | Změna cílení |
Ovlivněná rozhraní API
Ujistěte se, že System.Uri používá konzistentní vyhrazenou znakovou sadu.
Detaily
Některé System.Uriznaky kódované v procentech, které byly někdy dekódovány, jsou nyní konzistentně zakódovány. K tomu dochází napříč vlastnostmi a metodami, které přistupí k cestě, dotazu, fragmentu nebo komponentám userinfo identifikátoru URI. Chování se změní pouze v případech, kdy jsou splněny obě následující podmínky:
- Identifikátor URI obsahuje zakódovanou formu některého z následujících vyhrazených znaků:
:
,'
,(
,)
,!
nebo*
. - Identifikátor URI obsahuje znak Unicode nebo kódovaný nehrazený znak. Pokud jsou oba uvedené znaky pravdivé, zakódované rezervované znaky se zakódují doleva. V předchozích verzích rozhraní .NET Framework jsou dekódovány.
Návrh
U aplikací, které cílí na verze rozhraní .NET Framework počínaje verzí 4.7.2, je ve výchozím nastavení povolené nové chování dekódování. Pokud je tato změna nežádoucí, můžete ji zakázat přidáním následujícího přepínače AppContextSwitchOverrides do <runtime>
části konfiguračního souboru aplikace:
<runtime>
<AppContextSwitchOverrides value="Switch.System.Uri.DontEnableStrictRFC3986ReservedCharacterSets=true" />
</runtime>
U aplikací, které cílí na starší verze rozhraní .NET Framework, ale jsou spuštěné ve verzích počínaje rozhraním .NET Framework 4.7.2, je nové chování dekódování ve výchozím nastavení zakázáno. Můžete ho povolit přidáním následujícího přepínače AppContextSwitchOverrides do <runtime>
části konfiguračního souboru aplikace:
<runtime>
<AppContextSwitchOverrides value="Switch.System.Uri.DontEnableStrictRFC3986ReservedCharacterSets=false" />
</runtime>
Jméno | Hodnota |
---|---|
Obor | Vedlejší |
Verze | 4.7.2 |
Typ | Změna cílení |
Ovlivněná rozhraní API
Resgen odmítá načíst obsah z webu.
Detaily
Soubory .resx mohou obsahovat binární formátovaný vstup. Pokud se pokusíte použít resgen k načtení souboru staženého z nedůvěryhodného umístění, vstup se ve výchozím nastavení nenačte.
Návrh
Uživatelé resgen, kteří vyžadují načtení binárního formátovaného vstupu z nedůvěryhodných umístění, mohou z vstupního souboru odebrat značku webu nebo použít vývěsku odhlášení. Přidejte následující nastavení registru pro použití výpočtu pro celý počítač: [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft.NETFramework\SDK] "AllowProcessOfUntrustedResourceFiles"="true"
Jméno | Hodnota |
---|---|
Obor | Edge |
Verze | 4.7.2 |
Typ | Změna cílení |
Trasování zásobníku získané při použití přenosných souborů PDB teď v případě potřeby obsahují informace o zdrojovém souboru a řádku.
Detaily
Počínaje rozhraním .NET Framework 4.7.2 obsahují trasování zásobníku získaná při použití přenosných souborů PDB informace o zdrojovém souboru a řádku při vyžádání. Ve verzích starších než .NET Framework 4.7.2 nebudou zdrojové soubory a řádkové informace při použití přenosných souborů PDB dostupné, i když jsou explicitně požadovány.
Návrh
Pro aplikace, které cílí na rozhraní .NET Framework 4.7.2, můžete vyjádřit výslovný nesouhlas se zdrojovým souborem a řádkovými informacemi při použití přenosných souborů, pokud není žádoucí, přidáním následujícího kódu do <runtime>
části souboru app.config
:
<runtime>
<AppContextSwitchOverrides value="Switch.System.Diagnostics.IgnorePortablePDBsInStackTraces=true" />
</runtime>
Pro aplikace, které cílí na starší verze rozhraní .NET Framework, ale běží na rozhraní .NET Framework 4.7.2 nebo novější, můžete se přihlásit ke zdrojovému souboru a informace řádku při použití přenosných souborů PDB přidáním následujícího do <runtime>
části souboru app.config
:
<runtime>
<AppContextSwitchOverrides value="Switch.System.Diagnostics.IgnorePortablePDBsInStackTraces=false" />
</runtime>
Jméno | Hodnota |
---|---|
Obor | Edge |
Verze | 4.7.2 |
Typ | Změna cílení |
Ovlivněná rozhraní API
Windows Forms
Vylepšení přístupnosti v ovládacích prvcích model Windows Forms pro .NET 4.7.2
Detaily
model Windows Forms Framework vylepšuje, jak funguje s technologiemi přístupnosti, aby lépe podporovala model Windows Forms zákazníky. Patří mezi ně následující změny:
- Změny pro zlepšení zobrazení během režimu Vysoký kontrast.
- Změny pro vylepšení navigace pomocí klávesnice v ovládacích prvcích DataGridView a MenuStrip
- Změny interakce s Programem Předčítání
Návrh
Jak se odhlásit nebo odhlásit z těchto změn , aby aplikace mohla tyto změny využívat, musí běžet v rozhraní .NET Framework 4.7.2 nebo novějším. Aplikace může využívat tyto změny jedním z následujících způsobů:
- Je rekompilován tak, aby cílil na rozhraní .NET Framework 4.7.2. Tyto změny přístupnosti jsou ve výchozím nastavení povoleny v model Windows Forms aplikacích, které cílí na rozhraní .NET Framework 4.7.2 nebo novější.
- Cílí na rozhraní .NET Framework 4.7.1 nebo starší verzi a odhlasuje se ze starší verze chování přístupnosti přidáním následujícího přepínače AppContext do
<runtime>
části konfiguračního souboru aplikace a jeho nastavením nafalse
, jak ukazuje následující příklad.
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.7"/>
</startup>
<runtime>
<!-- AppContextSwitchOverrides value attribute is in the form of 'key1=true/false;key2=true/false -->
<AppContextSwitchOverrides value="Switch.UseLegacyAccessibilityFeatures=false;Switch.UseLegacyAccessibilityFeatures.2=false" />
</runtime>
</configuration>
Upozorňujeme, že pokud chcete vyjádřit výslovný souhlas s funkcemi přístupnosti přidanou v rozhraní .NET Framework 4.7.2, musíte se také přihlásit k funkcím přístupnosti rozhraní .NET Framework 4.7.1. Aplikace, které cílí na rozhraní .NET Framework 4.7.2 nebo novější a chtějí zachovat starší chování přístupnosti, se můžou přihlásit k používání starších funkcí přístupnosti explicitním nastavením tohoto přepínače AppContext na true
.
Použití barev definovaných operačním systémem v motivech s vysokým kontrastem
- Šipka rozevíracího seznamu teď ToolStripDropDownButton používá barvy definované operačním systémem v motivu Vysoký kontrast.
- ButtonRadioButton a CheckBox ovládací prvky s nastaveným FlatStyle.FlatFlatStyle nebo FlatStyle.Popup nyní používají barvy definované operačním systémem v motivu Vysoký kontrast při výběru. Dříve nebyly barvy textu a pozadí kontrastní a byly obtížně čitelné.
- Ovládací prvky obsažené v rámci GroupBox vlastnosti, která má Enabled nastavenou vlastnost,
false
budou nyní používat barvy definované operačním systémem v motivu Vysoký kontrast. - Ovládací ToolStripButtonprvky , ToolStripComboBoxa ToolStripDropDownButton ovládací prvky mají zvýšený poměr jasu kontrastu v režimu vysoký kontrast.
- DataGridViewLinkCell ve výchozím nastavení použije pro vlastnost barvy definované operačním systémem v režimu DataGridViewLinkCell.LinkColor Vysoký kontrast. POZNÁMKA: Windows 10 změnil hodnoty některých barev systému s vysokým kontrastem. model Windows Forms Framework je založená na rozhraní Win32. Pokud chcete co nejlépe využít, spusťte nejnovější verzi Windows a přihlaste se k nejnovějším změnám operačního systému přidáním souboru app.manifest do testovací aplikace a zrušením komentování následujícího kódu:
<!-- Windows 10 -->
<supportedOS Id="{8e0f7a12-bfb3-4fe8-b9a5-48fd50a15a9a}" />
Vylepšená podpora Předčítání
- Program Předčítání nyní oznamuje hodnotu ToolStripMenuItem.ShortcutKeys vlastnosti při oznámení textu objektu ToolStripMenuItem.
- Program Předčítání teď indikuje, kdy má Enabled vlastnost nastavenou ToolStripMenuItem na
false
hodnotu . - Program Předčítání teď dává zpětnou vazbu ke stavu zaškrtávacího políčka, když je vlastnost nastavena ListView.CheckBoxes na
true
hodnotu . - Pořadí fokusu v režimu kontroly Předčítání je teď konzistentní s vizuálním pořadím ovládacích prvků v dialogovém okně pro stažení ClickOnce.
Vylepšená podpora přístupnosti DataGridView
- Řádky v sadě DataGridView se teď dají seřadit pomocí klávesnice. Teď může uživatel použít klávesu F3 k seřazení podle aktuálního sloupce.
- Když je nastavená DataGridView.SelectionMode hodnota DataGridViewSelectionMode.FullRowSelect, záhlaví sloupce změní barvu tak, aby označí aktuální sloupec jako karty uživatelů prostřednictvím buněk v aktuálním řádku.
- Vlastnost DataGridViewCell.DataGridViewCellAccessibleObject.Parent nyní vrátí správný nadřazený ovládací prvek.
Vylepšené vizuální pomůcky
- CheckBox Ovládací RadioButton prvky s prázdnou Text vlastností teď při příjmu fokusu zobrazí indikátor fokusu.
Vylepšená podpora mřížky vlastností
Podřízené PropertyGrid elementy ovládacího prvku nyní vrací
true
pro IsReadOnlyProperty vlastnost pouze v případě, že PropertyGrid element je povolen.Podřízené PropertyGrid prvky ovládacího prvku nyní vrací
Vylepšená navigace pomocí klávesnicefalse
pro IsEnabledProperty vlastnost pouze tehdy, když PropertyGrid element lze změnit uživatelem. Přehled automatizace uživatelského rozhraní najdete v tématu model UI Automation Přehled.ToolStripButton nyní umožňuje fokus, pokud je obsažen v objektu ToolStripPanel , který má vlastnost nastavenou TabStop na
true
hodnotu .
Jméno | Hodnota |
---|---|
Obor | Hlavní verze |
Verze | 4.7.2 |
Typ | Změna cílení |
ContextMenuStrip.SourceControl vlastnost obsahuje platný ovládací prvek v případě vnořených ToolStripMenuItems
Detaily
V rozhraní .NET Framework 4.7.1 a předchozích verzí vrátí ContextMenuStrip.SourceControl vlastnost nesprávně hodnotu null, když uživatel otevře nabídku z vnořených ToolStripMenuItem ovládacích prvků. V rozhraní .NET Framework 4.7.2 a novější SourceControl je vlastnost vždy nastavena na skutečnou správu zdrojového kódu.
Návrh
Jak se odhlásit nebo odhlásit z těchto změn , aby aplikace mohla tyto změny využívat, musí běžet v rozhraní .NET Framework 4.7.2 nebo novějším. Aplikace může využívat tyto změny jedním z následujících způsobů:
- Cílí na rozhraní .NET Framework 4.7.2. Tato změna je ve výchozím nastavení povolena u aplikací model Windows Forms, které cílí na rozhraní .NET Framework 4.7.2 nebo novější.
- Cílí na rozhraní .NET Framework 4.7.1 nebo starší verzi a odhlasuje se ze starší verze chování přístupnosti přidáním následujícího přepínače AppContext do
<runtime>
části souboru app.config a jeho nastavením nafalse
, jak ukazuje následující příklad.
<runtime>
<AppContextSwitchOverrides value="Switch.System.Windows.Forms.UseLegacyContextMenuStripSourceControlValue=false"/>
</runtime>
Aplikace, které cílí na rozhraní .NET Framework 4.7.2 nebo novější, a chtějí zachovat starší chování, se mohou přihlásit k použití starší hodnoty správy zdrojového kódu explicitním nastavením tohoto přepínače AppContext na true
.
Jméno | Hodnota |
---|---|
Obor | Edge |
Verze | 4.7.2 |
Typ | Změna cílení |
Ovlivněná rozhraní API
Metoda PrivateFontCollection.AddFontFile uvolní prostředky písma.
Detaily
V rozhraní .NET Framework 4.7.1 a předchozích verzích System.Drawing.Text.PrivateFontCollection třída nevyvolá prostředky písma GDI+ po PrivateFontCollection odstranění objektů Font , které jsou přidány do této kolekce pomocí AddFontFile(String) metody. V rozhraní .NET Framework 4.7.2 a novějších Dispose verzích vydává písma GDI+ přidaná do kolekce jako soubory.
Návrh
Jak se odhlásit nebo odhlásit z těchto změn , aby aplikace mohla tyto změny využívat, musí běžet v rozhraní .NET Framework 4.7.2 nebo novějším. Aplikace může využívat tyto změny jedním z následujících způsobů:
- Je rekompilován tak, aby cílil na rozhraní .NET Framework 4.7.2. Tato změna je ve výchozím nastavení povolena u aplikací model Windows Forms, které cílí na rozhraní .NET Framework 4.7.2 nebo novější.
- Cílí na rozhraní .NET Framework 4.7.1 nebo starší verzi a odhlasuje se ze starší verze chování přístupnosti přidáním následujícího přepínače AppContext do
<runtime>
části souboru app.config a jeho nastavením nafalse
, jak ukazuje následující příklad.
<runtime>
<AppContextSwitchOverrides value="Switch.System.Drawing.Text.DoNotRemoveGdiFontsResourcesFromFontCollection=false"/>
</runtime>
Aplikace, které cílí na rozhraní .NET Framework 4.7.2 nebo novější a chtějí zachovat starší chování, se můžou rozhodnout, že nebudou vydávat prostředky písem explicitním nastavením tohoto přepínače AppContext na true
.
Jméno | Hodnota |
---|---|
Obor | Edge |
Verze | 4.7.2 |
Typ | Změna cílení |
Ovlivněná rozhraní API
Akce upbuttonu a downbuttonu winFormu se teď synchronizují.
Detaily
V rozhraní .NET Framework 4.7.1 a předchozích verzích DomainUpDown je akce ovládacího prvku ignorována při přítomnosti textu ovládacího prvku DomainUpDown.UpButton() a vývojář musí před použitím DomainUpDown.UpButton() akce použít DomainUpDown.DownButton() akci ovládacího prvku. Počínaje rozhraním .NET Framework 4.7.2 fungují v tomto scénáři nezávisle DomainUpDown.UpButton() na sobě i DomainUpDown.DownButton() akce a zůstávají synchronizované.
Návrh
Aby aplikace mohla tyto změny využívat, musí běžet v rozhraní .NET Framework 4.7.2 nebo novějším. Aplikace může využívat tyto změny jedním z následujících způsobů:
- Je rekompilován tak, aby cílil na rozhraní .NET Framework 4.7.2. Tato změna je ve výchozím nastavení povolena u aplikací model Windows Forms, které cílí na rozhraní .NET Framework 4.7.2 nebo novější.
- Odhlasuje se ze staršího chování posouvání přidáním následujícího přepínače AppContext do
<runtime>
části konfiguračního souboru aplikace a jeho nastavením nafalse
, jak ukazuje následující příklad.
<runtime>
<AppContextSwitchOverrides value="Switch.System.Windows.Forms.DomainUpDown.UseLegacyScrolling=false"/>
</runtime>
Jméno | Hodnota |
---|---|
Obor | Edge |
Verze | 4.7.2 |
Typ | Změna cílení |
Ovlivněná rozhraní API
Windows Presentation Foundation (WPF)
Fokus klávesnice se teď přesouvá správně mezi několika vrstvami hostování WinForms/WPF
Detaily
Zvažte aplikaci WPF hostující ovládací prvek WinForms, který zase hostuje ovládací prvky WPF. Uživatelé nemusí být schopni tabulátor z vrstvy WinForms, pokud první nebo poslední ovládací prvek v této vrstvě je WPF System.Windows.Forms.Integration.ElementHost
. Tato změna tento problém řeší a uživatelé teď můžou tabulátorovat z vrstvy WinForms. Automatizované aplikace, které se spoléhají na fokus, nikdy nevyužívají vrstvu WinForms, už nemusí fungovat podle očekávání.
Návrh
Vývojář, který chce tuto změnu využít při cílení na verzi architektury nižší než .NET 4.7.2, může nastavit následující sadu příznaků AppContext na false, aby se změna povolila.
<configuration>
<runtime>
<AppContextSwitchOverrides value="Switch.UseLegacyAccessibilityFeatures=false;Switch.UseLegacyAccessibilityFeatures.2=false"/>
</runtime>
</configuration>
Aplikace WPF se musí přihlásit ke všem dřívějším vylepšením přístupnosti, aby získaly pozdější vylepšení. Jinými slovy, jak přepínače Switch.UseLegacyAccessibilityFeatures
Switch.UseLegacyAccessibilityFeatures.2
, tak přepínače musí být nastavenY vývojář, který vyžaduje předchozí funkce při cílení na .NET 4.7.2 nebo vyšší, může nastavit následující příznak AppContext na hodnotu true, aby změna byla zakázána.
<configuration>
<runtime>
<AppContextSwitchOverrides value="Switch.UseLegacyAccessibilityFeatures.2=true"/>
</runtime>
</configuration>
Jméno | Hodnota |
---|---|
Obor | Edge |
Verze | 4.7.2 |
Typ | Změna cílení |
Výchozí hashovací algoritmus kompilátoru značek WPF je teď SHA256
Detaily
WPF MarkupCompiler poskytuje kompilační služby pro soubory značek XAML. V rozhraní .NET Framework 4.7.1 a starších verzích byl výchozí algoritmus hash použitý pro kontrolní součty SHA1. Vzhledem k nedávným obavám zabezpečení s SHA1 se toto výchozí nastavení změnilo na SHA256 počínaje rozhraním .NET Framework 4.7.2. Tato změna má vliv na všechny generování kontrolního součtu pro soubory revizí během kompilace.
Návrh
Vývojář, který cílí na rozhraní .NET Framework 4.7.2 nebo vyšší a chce se vrátit k chování hash SHA1, musí nastavit následující příznak AppContext.
<configuration>
<runtime>
<AppContextSwitchOverrides value="Switch.System.Windows.Markup.DoNotUseSha256ForMarkupCompilerChecksumAlgorithm=true"/>
</runtime>
</configuration>
Vývojář, který chce použít hashování SHA256 při cílení na verzi rozhraní nižší než .NET 4.7.2, musí nastavit následující příznak AppContext. Mějte na paměti, že nainstalovaná verze rozhraní .NET Framework musí být 4.7.2 nebo vyšší.
<configuration>
<runtime>
<AppContextSwitchOverrides value="Switch.System.Windows.Markup.DoNotUseSha256ForMarkupCompilerChecksumAlgorithm=false"/>
</runtime>
</configuration>
Jméno | Hodnota |
---|---|
Obor | Průhledné |
Verze | 4.7.2 |
Typ | Změna cílení |
Zpracování vypnutí domény aplikace WPF teď může volat dispatcher.invoke v vyčištění slabých událostí
Detaily
V rozhraní .NET Framework 4.7.1 a starších verzích wpF potenciálně vytvoří System.Windows.Threading.Dispatcher vlákno finalizátoru .NET během vypnutí domény AppDomain. Tento problém byl opraven v rozhraní .NET Framework 4.7.2 a novějších verzích tím, že se vyčisťuje slabé události s podporou vláken. Z tohoto důvodu může WPF volat Dispatcher.Invoke dokončení procesu čištění. V některých aplikacích může tato změna časování finalizátoru způsobit výjimky během vypnutí appdomain nebo procesu. To se obvykle projevuje v aplikacích, které před procesem nebo vypnutím appDomain správně nevypnou dispečery spuštěné na pracovních vláknech. Tyto aplikace by se měly postarat o správnou správu životnosti dispečerů.
Návrh
V rozhraní .NET Framework 4.7.2 a novějších verzích můžou vývojáři tuto opravu zakázat, aby pomohli zmírnit (ale neodstranit) problémy s časováním, ke kterým může dojít kvůli změně čištění. Pokud chcete změnu v vyčištění zakázat, použijte následující příznak AppContext.
<configuration>
<runtime>
<AppContextSwitchOverrides value="Switch.MS.Internal.DoNotInvokeInWeakEventTableShutdownListener=true"/>
</runtime>
</configuration>
Jméno | Hodnota |
---|---|
Obor | Edge |
Verze | 4.7.2 |
Typ | Změna cílení |
Změna primárního klíče WPF při zobrazení dat ADO ve scénáři master/detail
Detaily
Předpokládejme, že máte kolekci položek typu Order
ADO s relací s názvem OrderDetails, která je související s kolekcí položek typu Detail
prostřednictvím primárního klíče OrderID. V aplikaci WPF můžete vytvořit vazbu ovládacího prvku seznamu na podrobnosti pro danou objednávku:
<ListBox ItemsSource="{Binding Path=OrderDetails}" >
kde DataContext je .Order
WPF získá hodnotu OrderDetails
vlastnosti – kolekce D všech Detail
položek, jejichž OrderID
odpovídá OrderID
hlavní položce. Změna chování nastane, když změníte primární klíč OrderID
hlavní položky. ADO automaticky změní OrderID
všechny ovlivněné záznamy v kolekci Details (konkrétně ty zkopírované do kolekce D). Ale co se stane s D?
- Staré chování: Kolekce D je vymazána. Hlavní položka nevyvolá oznámení o změně vlastnosti
OrderDetails
. ListBox nadále používá kolekci D, která je teď prázdná. - Nové chování: Kolekce D se nezmění. Každá z jejích položek vyvolá oznámení o změně vlastnosti
OrderID
. ListBox nadále používá kolekci D a zobrazí podrobnosti s novýmOrderID
. WPF implementuje nové chování vytvořením kolekce D jiným způsobem: voláníM metody DataRowView.CreateChildView(DataRelation, Boolean) ADO s argumentem nastavenýmfollowParent
natrue
.
Návrh
Aplikace získá nové chování pomocí následujícího přepínače AppContext.
<configuration>
<runtime>
<AppContextSwitchOverrides value="Switch.System.Windows.Data.DoNotUseFollowParentWhenBindingToADODataRelation=false"/>
</runtime>
</configuration>
Ve výchozím nastavení se true
u aplikací, které cílí na .NET 4.7.1 nebo novější, a na false
(nové chování) pro aplikace, které cílí na .NET 4.7.2 nebo novější.
Jméno | Hodnota |
---|---|
Obor | Vedlejší |
Verze | 4.7.2 |
Typ | Změna cílení |
WpF FocusVisual pro RadioButton a CheckBox se teď zobrazuje správně, když ovládací prvky nemají žádný obsah
Detaily
V rozhraní .NET Framework 4.7.1 a starších verzích wpF System.Windows.Controls.CheckBox a System.Windows.Controls.RadioButton mají nekonzistentní a v klasických a vysoce kontrastních motivech nesprávné vizuály fokusu. K těmto problémům dochází v případech, kdy ovládací prvky nemají nastavenou žádnou sadu obsahu. Díky tomu může být přechod mezi motivy matoucí a vizuál fokusu obtížně vidět. V rozhraní .NET Framework 4.7.2 jsou teď tyto vizuály konzistentnější napříč motivy a snadněji viditelné v klasických a vysoce kontrastních motivech.
Návrh
Vývojář, který cílí na rozhraní .NET Framework 4.7.2, který se chce vrátit k chování v rozhraní .NET 4.7.1, bude muset nastavit následující příznak AppContext.
<configuration>
<runtime>
<AppContextSwitchOverrides value="Switch.UseLegacyAccessibilityFeatures.2=true;"/>
</runtime>
</configuration>
Vývojář, který chce tuto změnu využít při cílení na architekturu nižší než .NET 4.7.2, musí nastavit následující příznaky AppContext. Všimněte si, že všechny příznaky musí být správně nastaveny a nainstalovaná verze rozhraní .NET Framework musí být 4.7.2 nebo vyšší. Aplikace WPF se vyžadují, aby se přihlásily ke všem dřívějším vylepšením přístupnosti, abyste získali nejnovější vylepšení. Chcete-li to provést, ujistěte se, že oba přepínače AppContext Switch.UseLegacyAccessibilityFeatures a Switch.UseLegacyAccessibilityFeatures.2 jsou nastaveny na false.
<configuration>
<runtime>
<AppContextSwitchOverrides value="Switch.UseLegacyAccessibilityFeatures=false;Switch.UseLegacyAccessibilityFeatures.2=false;"/>
</runtime>
</configuration>
Jméno | Hodnota |
---|---|
Obor | Edge |
Verze | 4.7.2 |
Typ | Změna cílení |
Výběr textu WPF TextBox/PasswordBox neodpovídá systémovým barvám.
Detaily
V rozhraní .NET Framework 4.7.1 a starších verzích může WPF System.Windows.Controls.TextBox
vykreslit System.Windows.Controls.PasswordBox
pouze výběr textu ve vrstvě Adorner. V některých systémových motivech by se text oklidoval, takže se obtížně čte. V rozhraní .NET Framework 4.7.2 a novějších mají vývojáři možnost povolit schéma vykreslování výběru založeného na Adorneru, které tento problém zmírní.
Návrh
Vývojář, který chce tuto změnu využít, musí správně nastavit následující příznak AppContext. Pokud chcete tuto funkci využít, musí mít nainstalovaná verze rozhraní .NET Framework verzi 4.7.2 nebo vyšší. Pokud chcete povolit výběr založený na jiných než adornerech, použijte následující příznak AppContext.
<configuration>
<runtime>
<AppContextSwitchOverrides value="Switch.System.Windows.Controls.Text.UseAdornerForTextboxSelectionRendering=false"/>
</runtime>
</configuration>
Jméno | Hodnota |
---|---|
Obor | Edge |
Verze | 4.7.2 |
Typ | Změna cílení |
Windows Workflow Foundation (WF)
Vyhněte se nekonečné rekurzi pro IWorkflowInstanceManagement.TransactedCancel a IWorkflowInstanceManagement.TransactedTerminate
Detaily
Za určitých okolností při použití IWorkflowInstanceManagement.TransactedCancel nebo IWorkflowInstanceManagement.TransactedTerminate rozhraní API ke zrušení nebo ukončení instance služby pracovního postupu může instance pracovního postupu narazit na přetečení zásobníku kvůli nekonečné rekurzi, když se Workflow
modul runtime pokusí zachovat instanci služby v rámci zpracování požadavku. K problému dochází, pokud je instance pracovního postupu ve stavu, kde čeká na dokončení některého jiného nevyřízených požadavků WCF na jinou službu. TransactedTerminate
Operace TransactedCancel
vytvářejí pracovní položky zařazené do fronty pro instanci služby pracovního postupu. Tyto pracovní položky se nespouštějí jako součást zpracování TransactedCancel/TransactedTerminate
požadavku. Vzhledem k tomu, že instance služby pracovního postupu je zaneprázdněna čekáním na dokončení dalšího nevyřízených požadavků WCF, zůstane vytvořená pracovní položka ve frontě. Operace TransactedCancel/TransactedTerminate
se dokončí a řízení se vrátí zpět klientovi. Když se transakce přidružená k TransactedCancel/TransactedTerminate
operaci pokusí potvrdit, musí zachovat stav instance služby pracovního postupu. Vzhledem k tomu, že pro instanci existuje nevyřízených WCF
požadavků, nemůže modul runtime pracovního postupu zachovat instanci služby pracovního postupu a nekonečná rekurzní smyčka vede k přetečení zásobníku. Protože TransactedCancel
a TransactedTerminate
pouze vytvořit pracovní položku v paměti, skutečnost, že transakce existuje, nemá žádný vliv. Vrácení zpět transakce nezahodí pracovní položku. Abychom tento problém vyřešili tak, že počínaje rozhraním .NET Framework 4.7.2 jsme zavedli AppSetting
možnost přidání do web.config/app.config
služby pracovního postupu, která říká, že má ignorovat transakce pro TransactedCancel
a TransactedTerminate
. To umožňuje transakci potvrdit bez čekání na zachování instance pracovního postupu. AppSetting pro tuto funkci má název microsoft:WorkflowServices:IgnoreTransactionsForTransactedCancelAndTransactedTerminate
. Hodnota true
označuje, že transakce by měla být ignorována, a proto se vyhnout přetečení zásobníku. Výchozí hodnota této appSetting je false
, takže stávající instance služby pracovního postupu nejsou ovlivněny.
Návrh
Pokud používáte AppFabric nebo jiného IWorkflowInstanceManagement klienta a při pokusu o zrušení nebo ukončení instance pracovního postupu dochází k přetečení zásobníku v instanci služby pracovního postupu, můžete do <appSettings>
části souboru web.config/app.config pro službu pracovního postupu přidat následující:
<add key="microsoft:WorkflowServices:IgnoreTransactionsForTransactedCancelAndTransactedTerminate" value="true"/>
Pokud se vám problém nezobrazuje, nemusíte to udělat.
Jméno | Hodnota |
---|---|
Obor | Edge |
Verze | 4.7.2 |
Typ | Změna cílení |