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

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

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

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

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

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í:

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

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

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 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
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 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 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 falsehodnotu .
  • 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 truehodnotu .
  • 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

  • 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í

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 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
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 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 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 na false, 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.UseLegacyAccessibilityFeaturesSwitch.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 OrderADO 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ým OrderID. 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ým followParent 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>

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í