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.1a 4.7.2.

.NET Framework 4.7

ASP.NET

HttpRuntime.AppDomainAppPath vyvolá výjimku NullReferenceException

Podrobnosti

V rozhraní .NET Framework 4.6.2 vyvolá modul runtime T:System.NullReferenceException při načítání hodnoty P:System.Web.HttpRuntime.AppDomainAppPath, která obsahuje znaky null. V rozhraní .NET Framework 4.6.1 a starších verzích modul runtime vyvolá T:System.ArgumentNullException.

Návrh

Na tuto změnu můžete odpovědět některým z následujících kroků:

  • Řešte T:System.NullReferenceException, pokud aplikace běží na rozhraní .NET Framework 4.6.2.
  • Upgradujte na rozhraní .NET Framework 4.7, který obnoví předchozí chování a vyvolá T:System.ArgumentNullException.
Jméno Hodnota
Scope Edge
Verze 4.6.2
Typ Změna cílení

Ovlivněná rozhraní API

Omezení souběžných požadavků na relaci

Podrobnosti

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 ve výchozím nastavení vždy vydává ID relace prostřednictvím souborů cookie. Pokud odezva stránky trvá dlouho, 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í, abyste se odhlásili od nového chování.

<appSettings>
    <add key="aspnet:RequestQueueLimitPerSession" value="2147483647"/>
</appSettings>
Jméno Hodnota
Scope Edge
Verze 4.7
Typ Změna cílení

Sítě

Výchozí hodnota ServicePointManager.SecurityProtocol je SecurityProtocolType.System.Default

Podrobnosti

Počínaje aplikacemi, které cílí na rozhraní .NET Framework 4.7, je výchozí hodnota vlastnosti ServicePointManager.SecurityProtocolSecurityProtocolType.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 vlastnosti ServicePointManager.SecurityProtocol závisí na verzi cílové rozhraní .NET Framework. Další informace najdete v sekci Síťové technologie v tématu Změny přesměrování pro 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 vlastnosti ServicePointManager.SecurityProtocol. Pokud je tato změna nežádoucí, můžete se z ní odhlásit přidáním nastavení konfigurace do <modulu runtime> oddílu konfiguračního souboru vaší aplikace. Následující příklad ukazuje oddíl <runtime> i přepínač pro odhlášení Switch.System.Net.DontEnableSystemDefaultTlsVersions:

<runtime>
  <AppContextSwitchOverrides value="Switch.System.Net.DontEnableSystemDefaultTlsVersions=true" />
</runtime>
Jméno Hodnota
Scope Menší
Verze 4.7
Typ Změna cílení

Ovlivněná rozhraní API

SslStream podporuje upozornění PROTOKOLU TLS

Podrobnosti

Po neúspěšném handshake protokolu TLS bude první vstupně-výstupní operací čtení/zápisu vyvolána výjimka System.IO.IOException s vnitřní výjimkou System.ComponentModel.Win32Exception. Kód System.ComponentModel.Win32Exception.NativeErrorCode pro System.ComponentModel.Win32Exception lze mapovat na výstrahu protokolu TLS ze vzdálené strany pomocí kódů chyb Schannel pro výstrahy TLS a SSL. Další informace naleznete v tématu RFC 2246: Oddíl 7.2.2 Chybové výstrahy.
Chování v .NET Framework 4.6.2 a dřívějších verzích je takové, že přenosový kanál (obvykle připojení TCP) vyprší buď během zápisu, nebo čtení, pokud druhá strana selhala v metodě handshake a poté ihned připojení odmítla.

Návrh

Aplikace volající rozhraní API pro vstupně-výstupní operace sítě, 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 (celosystémový): Nastavte hodnotu na false a povolte funkci 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
Scope Edge
Verze 4.7
Typ Změna cílení

Ovlivněná rozhraní API

Zabezpečení

CspParameters.ParentWindowHandle teď očekává hodnotu HWND.

Podrobnosti

Hodnota ParentWindowHandle zavedená v rozhraní .NET Framework 2.0 umožňuje aplikaci zaregistrovat hodnotu popisovače nadřazeného okna tak, aby se jakékoli uživatelské rozhraní potřebné pro přístup ke klíči (například dialogové okno výzvy k zadání kódu PIN nebo dialogové okno souhlasu) otevřelo jako modální potom k určenému oknu. Počínaje aplikacemi cílenými na rozhraní .NET Framework 4.7 může aplikace model Windows Forms nastavit vlastnost ParentWindowHandle pomocí kódu, jako je následující:

cspParameters.ParentWindowHandle = form.Handle;

V předchozích verzích rozhraní .NET Framework se očekávala hodnota System.IntPtr představující umístění v paměti, kde se nachází hodnota HWND. Nastavení vlastnosti form.Handle ve Windows 7 a starších verzích nemělo žádný vliv, ale ve Windows 8 a novějších má za následek "System.Security.Cryptography.CryptographicException: Parametr je nesprávný."

Návrh

Aplikacím, které cílí na rozhraní .NET Framework 4.7 nebo vyšší a které chtějí zaregistrovat vztah nadřazeného okna, se doporučuje použít zjednodušený způsob:

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é obsahovalo hodnotu form.Handle mohou odhlásit změnu chování nastavením přepínače AppContext Switch.System.Security.Cryptography.DoNotAddrOfCspParentWindowHandle na true:

  • Nastavením compat přepínače na AppContext prostřednictvím kódu programu, jak je vysvětleno v oznámeních .NET v buildu 2015.
  • Přidáním následujícího řádku do části <runtime> souboru app.config:
<runtime>
 <AppContextSwitchOverrides value="Switch.System.Security.Cryptography.DoNotAddrOfCspParentWindowHandle=true"/>
</runtime>

Naopak uživatelé, kteří chtějí zvolit nové chování v prostředí runtime .NET Framework 4.7 při spuštění aplikace na starších verzích rozhraní .NET Framework, mohou nastavit přepínač AppContext na false.

Jméno Hodnota
Scope Menší
Verze 4.7
Typ Změna cílení

Ovlivněná rozhraní API

SslStream podporuje upozornění PROTOKOLU TLS

Podrobnosti

Po neúspěšném handshake protokolu TLS bude první vstupně-výstupní operací čtení/zápisu vyvolána výjimka System.IO.IOException s vnitřní výjimkou System.ComponentModel.Win32Exception. Kód System.ComponentModel.Win32Exception.NativeErrorCode pro System.ComponentModel.Win32Exception lze mapovat na výstrahu protokolu TLS ze vzdálené strany pomocí kódů chyb Schannel pro výstrahy TLS a SSL. Další informace naleznete v tématu RFC 2246: Oddíl 7.2.2 Chybové výstrahy.
Chování v .NET Framework 4.6.2 a dřívějších verzích je takové, že přenosový kanál (obvykle připojení TCP) vyprší buď během zápisu, nebo čtení, pokud druhá strana selhala v metodě handshake a poté ihned připojení odmítla.

Návrh

Aplikace volající rozhraní API pro vstupně-výstupní operace sítě, 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 (celosystémový): Nastavte hodnotu na false a povolte funkci 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
Scope Edge
Verze 4.7
Typ Změna cílení

Ovlivněná rozhraní API

WCF (Windows Communication Foundation)

Serializace řídicích znaků pomocí DataContractJsonSerializer je nyní kompatibilní s ECMAScript V6 a V8

Podrobnosti

V rozhraní .NET Framework 4.6.2 a starších verzích System.Runtime.Serialization.Json.DataContractJsonSerializer nez serializoval 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 zrušit přidáním následujícího řádku do části <runtime> souboru app.config nebo web.config:

<runtime>
  <AppContextSwitchOverrides value="Switch.System.Runtime.Serialization.DoNotUseECMAScriptV6EscapeControlCharacter=false" />
</runtime>
Jméno Hodnota
Scope Edge
Verze 4.7
Typ Změna cílení

Ovlivněná rozhraní API

Zabezpečení zpráv WCF teď může používat protokoly TLS1.1 a TLS1.2

Podrobnosti

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 části <runtime> souboru app.config nebo web.config:

<runtime>
<AppContextSwitchOverrides value="Switch.System.ServiceModel.DisableUsingServicePointManagerSecurityProtocols=false;Switch.System.Net.DontEnableSchUseStrongCrypto=false" />
</runtime>
Jméno Hodnota
Scope Edge
Verze 4.7
Typ Změna cílení

Windows Presentation Foundation (WPF (Windows Presentation Foundation))

Volání metody System.Windows.Input.PenContext.Disable na systémech s podporou dotykového ovládání může vyvolat výjimku typu ArgumentException.

Podrobnosti

Za určitých okolností mohou volání interní metody System.Windows.Input.PenContext.Disable v systémech s podporou dotykového ovládání vyvolat neošetřenou T:System.ArgumentException kvůli znovuvstupu.

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
Scope Edge
Verze 4.6.1
Typ Změna cílení

NullReferenceException v kódu zpracování výjimek z ImageSourceConverter.ConvertFrom

Podrobnosti

Chyba v kódu zpracování výjimek pro ConvertFrom(ITypeDescriptorContext, CultureInfo, Object) způsobila nesprávné vyhození System.NullReferenceException mí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 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
Scope Edge
Verze 4.7
Typ Změna cílení

Ovlivněná rozhraní API

Rozložení mřížky WPF (Windows Presentation Foundation) na hvězdicové sloupce

Podrobnosti

Počínaje rozhraním .NET Framework 4.7 nahrazuje WPF (Windows Presentation Foundation) algoritmus, který Grid používá k přidělení místa 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 došlo k nestabilitě s plovoucím desetinným bodem (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 již nezbyly žádné *-sloupce k přidělení, celkové přidělení bude příliš velké.

  • Celkové přidělení může být menší než šířka mřížky. Jedná se o duální problém k číslu 1, který vzniká při přidělování do sloupce, jehož proporcionální podíl je větší než jeho maximální velikost, bez zbylých *-sloupců, které by mohly převzít nadbytek.

  • Dva *-sloupce mohou dostat přidělení, která nejsou úměrná jejich *-váhám. 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 již bylo zmíněno, změní se prostor dostupný pro sloupec C, který získá méně (nebo více) poměrného přidělení než 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 nejsou zpracovány 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í do omezených sloupců (pevné, automatické a *-sloupce, kterým je přidělena jejich minimální nebo maximální šířka). 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, false vybere nový algoritmus.

Jméno Hodnota
Scope Menší
Verze 4.7
Typ Změna cílení

WPF (Windows Presentation Foundation) struktura pro dotykové vstupy založené na ukazateli

Podrobnosti

Tato změna přidává možnost povolit volitelnou WM_POINTER sadu WPF (Windows Presentation Foundation) touch/stylus. Vývojáři, kteří to explicitně nepovolují, by neměli zaznamenat žádné změny v chování dotykového ovládání nebo stylusu WPF (Windows Presentation Foundation). Aktuální známé problémy s volitelnými zásobníky pro dotykové ovládání/stylus založené na WM_POINTER:

  • Žá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í vyvolané přechodem z událostí dotykového ovládání nebo stylusu na události s myší.
  • Manipulace se může chovat jinak
  • Při přetažení se nezobrazí příslušná zpětná vazba pro dotykové ovládá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í pomocí událostí myši.

Návrh

Vývojáři, kteří chtějí povolit tento technologický stack, můžou do souboru aplikace App.config 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
Scope 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

Podrobnosti

Pro podporu ladění ve Visual Studio běhové prostředí pracovního postupu generuje pomocí algoritmu hash kontrolní součet instance pracovního postupu. V rozhraní .NET Framework 4.6.2 a starších verzích používal kontrolní součet pracovního postupu hashovací 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 přepínač AppContext "Switch.System.Activities.UseMD5ForWFDebugger" na 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
Scope Menší
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

Podrobnosti

Počínaje rozhraním .NET Framework 4.7.1 se v ASP.NET zlepšilo fungování webových ovládacích prvků s technologiemi přístupnosti v sadě Visual Studio, aby lépe podporovaly zákazníky ASP.NET. Patří mezi ně následující změny:

  • Změny k implementaci chybějících vzorů přístupnosti uživatelského rozhraní v ovládacích prvcích, například dialogové okno Přidat pole v průvodci Zobrazením podrobností nebo dialogové okno Konfigurovat ListView v průvodci ListView.
  • Změny pro zlepšení zobrazení v režimu vysokého kontrastu, například editor polí pro stránkování dat.
  • Změny, které zlepšují navigaci pomocí klávesnice pro ovládací prvky, jako je dialogové okno Pole v průvodci Úpravou polí ovládacího prvku DataPager, dialogové okno Konfigurovat ObjectContext nebo dialogové okno Konfigurovat výběr dat v průvodci Konfigurovat zdroj dat.

Návrh

Jak se přihlá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 tak, že do oddílu Switch.UseLegacyAccessibilityFeatures v souboru devenv.exe.config přidáte přepínač <runtime> AppContext a nastavíte ho na false, 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
Scope Menší
Verze 4.7.1
Typ Změna cílení

Jádro

Výjimky na pozadí vlákna SerialPort

Podrobnosti

Vlákna na pozadí vytvořená s datovými proudy SerialPort 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, je proces ukončen při vyvolání výjimky operačního systému ve vlákně na pozadí vytvořeném s datovým proudem SerialPort.
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 části <runtime> 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 příkazu do části <runtime> souboru app.config:

<runtime>
  <AppContextSwitchOverrides value="Switch.System.IO.Ports.DoNotCatchSerialStreamThreadExceptions=false" />
</runtime>
Jméno Hodnota
Scope Menší
Verze 4.7.1
Typ Změna cílení

Ovlivněná rozhraní API

ServiceBase nešíří výjimky OnStart

Podrobnosti

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 na 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 elementu 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 AppContextSwitchOverrides části konfiguračního souboru aplikace následující prvek runtime:

<AppContextSwitchOverrides value="Switch.System.ServiceProcess.DontThrowExceptionsOnStart=false" />
Jméno Hodnota
Scope Menší
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

Podrobnosti

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, můžete v případě nežádoucího použití SHA256 obnovit výchozí hodnotu SHA1 přidáním následujícího přepínače konfigurace do modulu runtime části 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, se můžete 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
Scope Menší
Verze 4.7.1
Typ Změna cílení

Ovlivněná rozhraní API

SignedXml.GetPublicKey vrátí RSACng na net462 (nebo lightupu) bez změny cílení.

Podrobnosti

Počínaje rozhraním .NET Framework 4.6.2 se konkrétní typ objektu vráceného metodou SignedXml.GetPublicKey změnil (bez nutnosti) z implementace CryptoServiceProvider na implementaci Cng. Důvodem je, že implementace se změnila z použití certificate.PublicKey.Key na použití interního certificate.GetAnyPublicKey, které vede k RSACertificateExtensions.GetRSAPublicKey.

Návrh

Počínaje aplikacemi spuštěnými v rozhraní .NET Framework 4.7.1 můžete pomocí přidání následujícího přepínače konfigurace do části runtime konfiguračního souboru aplikace použít ve výchozím nastavení implementaci CryptoServiceProvider, která byla používána v rozhraní .NET Framework 4.6.1 a starších verzích.

<AppContextSwitchOverrides value="Switch.System.Security.Cryptography.Xml.SignedXmlUseLegacyCertificatePrivateKey=true" />
Jméno Hodnota
Scope 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

Podrobnosti

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
Scope Edge
Verze 4.7.1
Typ Změna cílení

model model Windows Forms

Vylepšení přístupnosti v ovládacích prvcích model Windows Forms

Podrobnosti

model Windows Forms vylepšuje, jak pracuje s technologiemi přístupnosti, aby lépe podporovaly zákazníky model Windows Forms. 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
  • Bylo sníženo množství nepotřebných zarážek tabulátoru.
  • Lepší reportování typů ovládání
  • Vylepšené chování vypravěče
  • Změny implementace chybějících vzorů přístupnosti uživatelského rozhraní v ovládacích prvcích

Návrh

Jak se zapsat 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ší.
  • Deaktivuje starší funkce přístupnosti přidáním přepínače AppContext do oddílu <runtime> souboru app.config a jeho nastavením na false, jak ukazuje příklad níže.
<?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 přehledu automatizace uživatelského rozhraní.

Přidání podpory pro vzory a vlastnosti automatizace uživatelského rozhraní

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 od klienta. Počínaje rozhraním .NET Framework 4.7.1, IServiceProvider a IAccessibleEx (kde je to možné) jsou k dispozici pro objekty přístupnosti WinForms.

.NET Framework 4.7.1 přidává podporu pro následující vzory a vlastnosti automatizace uživatelského rozhraní:

Použití barev definovaných operačním systémem v motivech s vysokým kontrastem

  • Ovládací prvky Button a CheckBox s vlastnostmi FlatStyle nastavenými na FlatStyle.System, což je výchozí styl, teď při výběru motivu s vysokým kontrastem používají barvy definované operačním systémem. Dříve nebyly barvy textu a pozadí kontrastní a byly obtížně čitelné.
  • Ovládací prvky Button, CheckBox, RadioButton, Label, LinkLabela GroupBox s vlastností Enabled nastavenou na false použily stínovanou barvu k vykreslení textu v motivech s vysokým kontrastem, což vedlo k nízkému kontrastu oproti pozadí. Teď tyto ovládací prvky používají barvu Zakázaného textu definovanou operačním systémem. Tato oprava platí pro ovládací prvky s vlastností FlatStyle 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 nyní používají barvu deaktivovaného textu definovanou operačním systémem.
  • ToolStripMenuItem ovládací prvky, u kterých je vlastnost Checked nastavena na true, nyní vykreslují příslušnou zaškrtávací značku 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

  • Pokud má ovládací prvek ComboBox vlastnost DropDownStyle nastavenou na ComboBoxStyle.DropDownList a je první ovládací prvek v pořadí ovládacích prvků ve formuláři, zobrazí teď 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 Narratoru

  • Ovládací prvek MonthCalendar přidal podporu technologiím usnadnění pro přístup k ovládacímu prvku, včetně schopnosti, aby aplikace Předčítání nyní mohla přečíst hodnotu ovládacího prvku, což dříve nemohla.

  • Ovládací prvek CheckedListBox nyní upozorní Předčítání, když dojde ke změně vlastnosti CheckBox.CheckState. Dříve program Předčítání neobdržel oznámení, takže uživatelé nebyli informováni, že vlastnost CheckState byla aktualizována.

  • Ovládací prvek LinkLabel změnil způsob, jakým upozorní Program Předčítání na text v ovládacím prvku. Program Předčítání oznámil tento text dvakrát a přečetl symboly "&" jako skutečný text, přestože nejsou viditelné pro uživatele. Duplicitní text byl odstraněn z oznámení Předčítání, stejně jako nepotřebné symboly "&".

  • Typy ovládacích prvků DataGridViewCell nyní správně uvádějí stav jen pro čtení programu Narrátor a dalším pomůckám pro usnadnění.

  • Narrátor je teď schopen 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.md).

  • Program Předčítání teď dokáže číst ovládací prvky ToolStripMenuItem s vlastností ToolStripItem.Enabled nastavenou na false. Předčítání se dříve nemohlo zaměřit na deaktivované položky nabídky pro čtení obsahu.

Jméno Hodnota
Scope Hlavní
Verze 4.8
Typ Změna cílení

Ovlivněná rozhraní API

Windows Presentation Foundation (WPF (Windows Presentation Foundation))

Vylepšení přístupnosti ve WPF (Windows Presentation Foundation)

Podrobnosti

vylepšení vysokého kontrastu

  • Fokus ovládacího prvku Expander je teď viditelný. V předchozích verzích rozhraní .NET Framework to nebylo.
  • Text v ovládacích prvcích CheckBox a RadioButton při jejich výběru je teď přehlednější než v předchozích verzích rozhraní .NET Framework.
  • Ohraničení deaktivovaného ComboBox je teď stejné barvy jako deaktivovaný 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ích verzích .NET Framework tomu tak nebylo.
  • Tlačítko rozevíracího seznamu je nyní viditelné, když je styl ovládacího prvku ComboBox nastaven na ToolBar.ComboBoxStyleKey. V předchozích verzích rozhraní .NET Framework to nebylo.
  • Šipka indikátoru řazení v ovládacím prvku DataGrid teď používá barvy motivu. V předchozích verzích rozhraní .NET Framework to nebylo.
  • Výchozí styl hypertextového odkazu se nyní změní na správnou barvu motivu při najetí myší. V předchozích verzích rozhraní .NET Framework to nebylo.
  • Fokus klávesnice na rádiových tlačítkách je teď viditelný. V předchozích verzích rozhraní .NET Framework to nebylo.
  • Sloupec zaškrtávacího políčka ovládacího prvku DataGrid 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 ovládacích prvcích ComboBox a ListBox. V předchozích verzích rozhraní .NET Framework to nebylo.

Vylepšení interakce čtečky obrazovky

  • Expander ovládací prvky jsou teď správně označeny jako skupiny (rozbalit/sbalit) čtečkami obrazovky.
  • Čtečky obrazovky nyní správně oznamují ovládací prvky DataGridCell jako buňku datové mřížky (lokalizovaně).
  • Čtečky obrazovky nyní oznámí název upravitelného ComboBox.
  • PasswordBox už nejsou čtečkami obrazovky oznamovány jako 'žádná položka v zobrazení'.

podpora pro LiveRegion

Čtečky obrazovky, jako je Předčítání, pomáhají lidem pochopit UI aplikace, obvykle popisem prvku, na který je aktuálně zaměřený fokus. Pokud se ale prvek uživatelského rozhraní někde na obrazovce změní bez fokusu, nemusí být uživatel informovaný a mohl by zmeškat 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 automatizace uživatelského rozhraní, že u prvku uživatelského rozhraní došlo k důležité změně. Č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 přihlá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ý přístup. Tyto změny přístupnosti jsou ve výchozím nastavení povolené u aplikací WPF (Windows Presentation Foundation), které cílí na rozhraní .NET Framework 4.7.1 nebo novější.

  • Vypíná starší chování přístupnosti přidáním následujícího AppContext Switch v části <runtime> konfiguračního souboru aplikace a nastavením hodnoty na false, jak ukazuje následující ukázka.

    <?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 Přehled automatizace uživatelského rozhraní.

Jméno Hodnota
Scope Hlavní
Verze 4.7.1
Typ Změna cílení

Ovlivněná rozhraní API

Událost SelectionChanged a vlastnost SelectedValue řadiče

Podrobnosti

Počínaje rozhraním .NET Framework 4.7.1, Selector vždy aktualizuje hodnotu své vlastnosti SelectedValue před vyvoláním události SelectionChanged, když se změní výběr. 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 a starších verzí došlo k aktualizaci 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 vlastnosti SelectedValue.

Návrh

Aplikace, které cílí na rozhraní .NET Framework 4.7.1 nebo novější, se můžou z této změny odhlásit a používat starší chování přidáním následujícího kódu do části <runtime> 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 běží na rozhraní .NET Framework 4.7.1 nebo novějším, můžou nové chování povolit přidáním následujícího řádku do oddílu <runtime> souboru .configuration aplikace:

<runtime>
<AppContextSwitchOverrides value="Switch.System.Windows.Controls.TabControl.SelectionPropertiesCanLagBehindSelectionChangedEvent=false" />
</runtime>
Jméno Hodnota
Scope Menší
Verze 4.7.1
Typ Změna cílení

Ovlivněná rozhraní API

Událost výběru a vlastnost vybraného obsahu v TabControlu

Podrobnosti

Počínaje rozhraním .NET Framework 4.7.1 TabControl aktualizuje hodnotu vlastnosti SelectedContent před vyvolání události SelectionChanged 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 z této změny odhlásit a používat starší chování přidáním následujícího kódu do části <runtime> 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 běží na rozhraní .NET Framework 4.7.1 nebo novějším, můžou nové chování povolit přidáním následujícího řádku do oddílu <runtime> souboru .configuration aplikace:

<runtime>
<AppContextSwitchOverrides value="Switch.System.Windows.Controls.TabControl.SelectionPropertiesCanLagBehindSelectionChangedEvent=false" />
</runtime>
Jméno Hodnota
Scope Menší
Verze 4.7.1
Typ Změna cílení

Ovlivněná rozhraní API

Výchozí algoritmus hash pro WPF (Windows Presentation Foundation) PackageDigitalSignatureManager je teď SHA256

Podrobnosti

System.IO.Packaging.PackageDigitalSignatureManager poskytuje funkce digitálních podpisů ve vztahu k balíčkům WPF (Windows Presentation Foundation). V rozhraní .NET Framework 4.7 a starších verzích byl výchozí algoritmus (PackageDigitalSignatureManager.DefaultHashAlgorithm) používaný pro 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
Scope 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)

Podrobnosti

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 aktivitu InitializeCorrelation
  • Okno definice obsahu pro aktivity Receive, Send, SendReplya ReceiveReply
  • 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 okně Vlastnosti je nyní 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
  • Přepínání pomocí klávesy Tab mezi poli v aktivitách ReceiveReply a SendReply.
  • Nastavení výchozích hodnot pro proměnné nebo argumenty
  • Čtečky obrazovky nyní můžou správně rozpoznat:
  • Body přerušení nastaveny v návrháři pracovního postupu
  • Aktivity FlowSwitch<T>, FlowDecisiona CorrelationScope.
  • Obsah aktivity Receive.
  • Typ cíle pro aktivitu InvokeMethod.
  • Kombinované pole Exception a sekce Finally v aktivitě TryCatch.
  • Kombinované pole Typ zprávy, rozdělovač v okně Přidat inicializátory korelace, okno Definice obsahu a okno KorelaceOn definice 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 týkající se aktivit FlowDecision
  • Kontextová menu pro aktivity (při pravém kliknutí)
  • 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č v aktivitách Parallel a Pick.
  • Aktivita InvokeDelegate.
  • Okno pro výběr typů pro aktivity slovníku (Microsoft.Activities.AddToDictionary<TKey,TValue>, Microsoft.Activities.RemoveFromDictionary<TKey,TValue>atd.).
  • Okno Procházení a Výběr typu rozhraní .NET.
  • Drobečková navigace 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 AppContext přepnout do části <runtime> souboru app.config a nastavit ho na false, 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
Scope Menší
Verze 4.7.1
Typ Změna cílení

.NET Framework 4.7.2

Jádro

Povolit obousměrné znaky ovládacího prvku Unicode v identifikátorech URI

Podrobnosti

Unicode určuje několik speciálních řídicích znaků, které slouží k určení orientace textu. V předchozích verzích .NET Frameworku byly tyto znaky nesprávně odstraněny ze všech URI, i když byly přítomny ve formě s procentním kódováním. Abychom mohli lépe dodržovat RFC 3987, nyní tyto znaky povolujeme v identifikátorech URI. Pokud se v URI najdou nezakódované, jsou procentuálně kódované. Když jsou nalezeny procentově kódovány, zůstanou as-is.

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 části <runtime> 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 tím, že do části konfiguračního souboru aplikace přidáte následující přepínač <runtime>:

<runtime>
<AppContextSwitchOverrides value="Switch.System.Uri.DontKeepUnicodeBidiFormattingCharacters=false" />
</runtime>
Jméno Hodnota
Scope Menší
Verze 4.7.2
Typ Změna cílení

Ovlivněná rozhraní API

DeflateStream používá nativní rozhraní API pro dekompresi.

Podrobnosti

Počínaje .NET Framework 4.7.2 se implementace dekomprese ve třídě DeflateStream změnila tak, aby ve výchozím nastavení používala nativní rozhraní API Windows. Obvykle to vede ke značnému zlepšení výkonu. Všechny .NET aplikace cílené na .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 můžou 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ě.
  • Při analýze hlaviček gzip existují známé rozdíly (pouze při GZipStream použití pro dekompresi).
  • Výjimky při analýze neplatných hlaviček můžou být vyvolány v různých časech.
  • Nativní implementace vynucuje, že hodnoty některých rezervovaných příznaků uvnitř hlavičky gzip jsou 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ě ovlivnila chování vaší aplikace, můžete se této funkce odhlásit přidáním přepínače Switch.System.IO.Compression.DoNotUseNativeZipLibraryForDecompression do oddílu runtime vašeho souboru app.config a jeho nastavením na true:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <runtime>
    <AppContextSwitchOverrides value="Switch.System.IO.Compression.DoNotUseNativeZipLibraryForDecompression=true" />
  </runtime>
</configuration>
Jméno Hodnota
Scope Menší
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.

Podrobnosti

V System.Urijsou některé procentuálně kódované znaky, které byly někdy dekódovány, nyní důsledně ponechány kódované. K tomu dochází napříč vlastnostmi a metodami, které přistupují 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 kó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 obě výše uvedené podmínky splněny, zůstanou zakódované rezervované znaky zakódované. 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 části <runtime> 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 tím, že do části konfiguračního souboru aplikace přidáte následující přepínač <runtime>:

<runtime>
  <AppContextSwitchOverrides value="Switch.System.Uri.DontEnableStrictRFC3986ReservedCharacterSets=false" />
</runtime>
Jméno Hodnota
Scope Menší
Verze 4.7.2
Typ Změna cílení

Ovlivněná rozhraní API

Resgen odmítá načíst obsah z webu.

Podrobnosti

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 označení webu nebo použít možnost odmítnutí. Přidejte následující nastavení registru, abyste použili strojovou možnost odmítnutí pro celý počítač: [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft.NETFramework\SDK] "AllowProcessOfUntrustedResourceFiles"="true"

Jméno Hodnota
Scope Edge
Verze 4.7.2
Typ Změna cílení

Zásobníkové stopy získané při použití přenosných souborů PDB nyní, pokud je požadováno, obsahují informace o zdrojovém souboru a lince.

Podrobnosti

Počínaje rozhraním .NET Framework 4.7.2 obsahují trasování zásobníku získaná při použití přenosných PDB informace o zdrojovém souboru a řádku, pokud jsou vyžádány. 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 nesouhlas se zdrojovým souborem a řádkovými informacemi při použití přenosných souborů PDB, pokud není žádoucí, přidáním následujícího kódu do části <runtime> souboru app.config:

<runtime>
  <AppContextSwitchOverrides value="Switch.System.Diagnostics.IgnorePortablePDBsInStackTraces=true" />
</runtime>

U aplikací, 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 informacím řádku při použití přenosných souborů PDB tak, že do oddílu <runtime> souboru app.config přidáte následující informace:

<runtime>
  <AppContextSwitchOverrides value="Switch.System.Diagnostics.IgnorePortablePDBsInStackTraces=false" />
</runtime>
Jméno Hodnota
Scope Edge
Verze 4.7.2
Typ Změna cílení

Ovlivněná rozhraní API

model model Windows Forms

Vylepšení přístupnosti v ovládacích prvcích model Windows Forms pro .NET 4.7.2

Podrobnosti

model Windows Forms Framework vylepšuje, jak funguje s technologiemi přístupnosti, aby lépe podporovala zákazníky Modelu model Windows Forms. 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 přihlá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.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í povolené v aplikacích 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 odhlásí se ze starší verze chování přístupnosti přidáním následujícího přepínače AppContext do části <runtime> konfiguračního souboru aplikace a nastavením na false, 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 rozbalovacího menu ToolStripDropDownButton teď používá barvy definované operačním systémem v motivu s vysokým kontrastem.
  • Button, ovládací prvky RadioButton a CheckBox s FlatStyle nastavenými na FlatStyle.Flat nebo FlatStyle.Popup teď při výběru používají barvy definované operačním systémem v motivu Vysoký kontrast. Dříve nebyly barvy textu a pozadí kontrastní a byly obtížně čitelné.
  • Ovládací prvky obsažené v GroupBox, které mají vlastnost Enabled nastavenou na false, teď budou používat barvy definované operačním systémem v motivu Vysoký kontrast.
  • Ovládací prvky ToolStripButton, ToolStripComboBoxa ToolStripDropDownButton mají v režimu vysokého kontrastu vyšší jas.
  • DataGridViewLinkCell ve výchozím nastavení použije pro vlastnost DataGridViewLinkCell.LinkColor barvy definované operačním systémem v režimu 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 Narratoru

  • Vypravěč nyní oznamuje hodnotu vlastnosti ToolStripMenuItem.ShortcutKeys při oznamování textu objektu ToolStripMenuItem.
  • Program Předčítání teď označuje, kdy má ToolStripMenuItem vlastnost Enabled nastavenou na false.
  • Program Předčítání teď dává zpětnou vazbu ke stavu zaškrtávacího políčka, když je vlastnost ListView.CheckBoxes nastavená na true.
  • 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

vylepšené vizuální pomůcky

  • Ovládací prvky RadioButton a CheckBox s prázdnou vlastností Text teď při příjmu fokusu zobrazí indikátor fokusu.

vylepšená podpora mřížky vlastností

Jméno Hodnota
Scope Hlavní
Verze 4.7.2
Typ Změna cílení

ContextMenuStrip.SourceControl vlastnost obsahuje platný ovládací prvek v případě vnořených položek ToolStripMenuItems.

Podrobnosti

V rozhraní .NET Framework 4.7.1 a předchozích verzích vrátí vlastnost ContextMenuStrip.SourceControl nesprávně hodnotu null, když uživatel otevře nabídku z vnořených ovládacích prvků ToolStripMenuItem. V rozhraní .NET Framework 4.7.2 a novějších je vlastnost SourceControl vždy nastavena na skutečnou správu zdrojového kódu.

Návrh

Jak se k těmto změnám přihlásit nebo odhlásit Aby aplikace mohla tyto změny využívat, musí běžet na 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 v aplikacích 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 vypne starší chování přístupnosti přidáním následujícího přepínače AppContext do části <runtime> souboru app.config a jeho nastavením na false, 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
Scope Edge
Verze 4.7.2
Typ Změna cílení

Ovlivněná rozhraní API

Metoda PrivateFontCollection.AddFontFile uvolní prostředky písma.

Podrobnosti

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 odstranění PrivateFontCollection pro objekty Font přidané do této kolekce pomocí metody AddFontFile(String). V rozhraní .NET Framework 4.7.2 a novějším Dispose uvolní písma GDI+ přidaná do kolekce jako soubory.

Návrh

Jak se k těmto změnám přihlásit nebo odhlásit Aby aplikace mohla tyto změny využívat, musí běžet na 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 v aplikacích 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 vypne starší chování přístupnosti přidáním následujícího přepínače AppContext do části <runtime> souboru app.config a jeho nastavením na false, 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 původní chování, mohou tím, že nenastaví uvolňování fontových zdrojů, použít tento přepínač AppContext konfigurováním na true.

Jméno Hodnota
Scope Edge
Verze 4.7.2
Typ Změna cílení

Ovlivněná rozhraní API

Akce tlačítek nahoru a dolů ve WinForm jsou nyní synchronizovány.

Podrobnosti

V rozhraní .NET Framework 4.7.1 a v předchozích verzích je akce DomainUpDown ovládacího prvku DomainUpDown.UpButton() ignorována, pokud je přítomen text v ovládacím prvku, a vývojář musí použít akci DomainUpDown.DownButton() na ovládacím prvku před použitím akce DomainUpDown.UpButton(). Počínaje rozhraním .NET Framework 4.7.2 fungují akce DomainUpDown.UpButton() i DomainUpDown.DownButton() nezávisle v tomto scénáři 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 v aplikacích model Windows Forms, které cílí na rozhraní .NET Framework 4.7.2 nebo novější.
  • Vyřazuje se ze staršího způsobu posouvání tím, že přidáte následující AppContext Switch do oddílu <runtime> v konfiguračním souboru aplikace a nastavíte ho na false, jak je znázorněno v následujícím příkladu.
<runtime>
<AppContextSwitchOverrides value="Switch.System.Windows.Forms.DomainUpDown.UseLegacyScrolling=false"/>
</runtime>
Jméno Hodnota
Scope Edge
Verze 4.7.2
Typ Změna cílení

Ovlivněná rozhraní API

Windows Presentation Foundation (WPF (Windows Presentation Foundation))

Fokus klávesnice se teď přesouvá správně mezi několika vrstvami hostování WinForms/WPF (Windows Presentation Foundation)

Podrobnosti

Zvažte aplikaci WPF (Windows Presentation Foundation) hostující ovládací prvek WinForms, který zase hostuje ovládací prvky WPF (Windows Presentation Foundation). Uživatelé nemusí být schopni přepnout z vrstvy WinForms pomocí tabulátoru, jestliže první nebo poslední ovládací prvek v této vrstvě je WPF (Windows Presentation Foundation) System.Windows.Forms.Integration.ElementHost. Tato změna tento problém řeší a uživatelé nyní mohou přejít z vrstvy WinForms pomocí tabulátoru. Automatizované aplikace, které se spoléhají na to, že fokus zůstane ve vrstvě WinForms, nemusí nyní 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 (Windows Presentation Foundation) 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 Switch.UseLegacyAccessibilityFeatures, tak přepínače Switch.UseLegacyAccessibilityFeatures.2 musí být nastavené vývojářeM, 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
Scope Edge
Verze 4.7.2
Typ Změna cílení

Výchozí hashovací algoritmus kompilátoru značek WPF (Windows Presentation Foundation) je teď SHA256

Podrobnosti

WPF (Windows Presentation Foundation) 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 ovlivňuje všechny generace kontrolních součtů pro soubory značek při kompilaci.

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
Scope Transparentní
Verze 4.7.2
Typ Změna cílení

Zpracování vypnutí domény aplikace WPF (Windows Presentation Foundation) teď může volat dispatcher.Invoke při vyčištění slabých událostí

Podrobnosti

V rozhraní .NET Framework 4.7.1 a starších verzích může WPF (Windows Presentation Foundation) vytvořit System.Windows.Threading.Dispatcher na vláknu finalizátoru .NET během vypnutí AppDomain. Tento problém byl opraven v rozhraní .NET Framework 4.7.2 a novějších verzích tím, že úklid slabých událostí je nyní prováděn s ohledem na vlákna. Proto může WPF (Windows Presentation Foundation) volat Dispatcher.Invoke dokončit proces čištění. V některých aplikacích může tato změna 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 ukončením procesu nebo vypnutím AppDomain korektně nevypnou dispečery běžící 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
Scope Edge
Verze 4.7.2
Typ Změna cílení

Změna primárního klíče WPF (Windows Presentation Foundation) při zobrazení dat ADO ve scénáři master/detail

Podrobnosti

Předpokládejme, že máte kolekci položek typu Orders relací s názvem OrderDetails, která se vztahuje k kolekci položek typu Detail prostřednictvím primárního klíče OrderID. V aplikaci WPF (Windows Presentation Foundation) můžete vytvořit vazbu ovládacího prvku seznamu na podrobnosti pro danou objednávku:

<ListBox ItemsSource="{Binding Path=OrderDetails}" >

kde je DataContext Order. WPF (Windows Presentation Foundation) získá hodnotu vlastnosti OrderDetails – kolekce D všech položek Detail, jejichž OrderID odpovídá OrderID hlavní položky. Změna chování nastane, když změníte primární klíč OrderID hlavního objektu. ADO automaticky změní OrderID každého ovlivněného záznamu v kolekci Details (konkrétně záznamy zkopírované do kolekce D). Ale co se stane s D?

  • Staré chování: Kolekce D je vyprázdněna. Hlavní položka nevyvolá upozornění na změnu pro vlastnost 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ě pro vlastnost OrderID. ListBox bude nadále používat kolekci D a bude zobrazovat podrobnosti s novým OrderID. WPF (Windows Presentation Foundation) implementuje nové chování vytvořením kolekce D jiným způsobem: voláním metody ADO DataRowView.CreateChildView(DataRelation, Boolean) s argumentem followParent nastaveným na true.

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>

Přepínač má výchozí nastavení true (staré chování) pro aplikace, které cílí na .NET 4.7.1 nebo nižší, a na false (nové chování) pro aplikace, které cílí na .NET 4.7.2 nebo novější.

Jméno Hodnota
Scope Menší
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

Podrobnosti

V rozhraní .NET Framework 4.7.1 a starších verzích mají WPF (Windows Presentation Foundation) System.Windows.Controls.CheckBox a System.Windows.Controls.RadioButton 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 (Windows Presentation Foundation) 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
Scope Edge
Verze 4.7.2
Typ Změna cílení

Výběr textu WPF (Windows Presentation Foundation) TextBox/PasswordBox neodpovídá systémovým barvám.

Podrobnosti

V rozhraní .NET Framework 4.7.1 a starších verzích může WPF (Windows Presentation Foundation) System.Windows.Controls.TextBox a System.Windows.Controls.PasswordBox vykreslit pouze výběr textu ve vrstvě Adorner. Ve některých systémových motivech by text zakrýval, což ztěžuje čitelnost. 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, které není založené na Adorneru, a tím zmírnit tento problém.

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
Scope 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

Podrobnosti

Za určitých okolností při použití IWorkflowInstanceManagement.TransactedCancel nebo IWorkflowInstanceManagement.TransactedTerminate rozhraní API ke zrušení nebo ukončení instance pracovního postupu může instance služby narazit na přetečení zásobníku kvůli nekonečné rekurzi, pokud se Workflow runtime pokusí uložit instanci služby jako součást 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. Operace TransactedCancel a TransactedTerminate vytvářejí pracovní položky, které jsou zařazeny do fronty instance služby pracovního postupu. Tyto pracovní položky se nespouštějí jako součást zpracování požadavku TransactedCancel/TransactedTerminate. Vzhledem k tomu, že instance služby pracovního postupu je zaneprázdněna čekáním na dokončení dalšího nevyřízeného požadavku WCF, zůstává 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 operaci TransactedCancel/TransactedTerminate pokusí potvrdit, musí uchovat stav instance služby pracovního postupu. Vzhledem k tomu, že pro instanci existuje nevyřízený WCF požadavek, 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 vytvoří pouze pracovní položku v paměti, skutečnost, že transakce existuje, nemá žádný vliv. Vrácení transakce nezahodí pracovní položku. K řešení tohoto problému jsme počínaje rozhraním .NET Framework 4.7.2 zavedli AppSetting, které lze přidat do web.config/app.config služby pracovního postupu. Tímto způsobem je službě signalizováno, aby ignorovala 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, čímž se zabrání přetečení zásobníku. Výchozí hodnota tohoto 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 klienta IWorkflowInstanceManagement 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 služby pracovního postupu přidat následující položky:

<add key="microsoft:WorkflowServices:IgnoreTransactionsForTransactedCancelAndTransactedTerminate" value="true"/>

Pokud se s problémem nesetkáváte, nemusíte to dělat.

Jméno Hodnota
Scope Edge
Verze 4.7.2
Typ Změna cílení