Wijzigingen voor migratie naar .NET Framework 4.7.x wijzigen
Dit artikel bevat de compatibiliteitsproblemen met apps die zijn geïntroduceerd in .NET Framework 4.7, 4.7.1 en 4.7.2.
.NET Framework 4.7
ASP.NET
HttpRuntime.AppDomainAppPath genereert een NullReferenceException
DETAILS
In .NET Framework 4.6.2 genereert de runtime een T:System.NullReferenceException
waarde die null-tekens bevat. P:System.Web.HttpRuntime.AppDomainAppPath
In .NET Framework 4.6.1 en eerdere versies genereert de runtime een T:System.ArgumentNullException
.
Suggestie
U kunt een van de volgende handelingen uitvoeren om te reageren op deze wijziging:
- Afhandelen of
T:System.NullReferenceException
de toepassing wordt uitgevoerd op .NET Framework 4.6.2. - Voer een upgrade uit naar .NET Framework 4.7, waarmee het vorige gedrag wordt hersteld en een
T:System.ArgumentNullException
.
Naam | Weergegeven als |
---|---|
Bereik | Edge |
Versie | 4.6.2 |
Type | Opnieuw targeting |
Betrokken API's
Gelijktijdige aanvragen per sessie beperken
DETAILS
In .NET Framework 4.6.2 en eerder voert ASP.NET aanvragen met dezelfde Sessionid opeenvolgend uit en ASP.NET de Sessionid altijd standaard via cookies uit. Als het lang duurt voordat een pagina reageert, worden de serverprestaties aanzienlijk verminderd door op F5 in de browser te drukken. In de oplossing hebben we een teller toegevoegd om de in de wachtrij geplaatste aanvragen bij te houden en de aanvragen te beëindigen wanneer ze een opgegeven limiet overschrijden. De standaardwaarde is 50. Als de limiet is bereikt, wordt er een waarschuwing vastgelegd in het gebeurtenislogboek en kan een HTTP 500-antwoord worden vastgelegd in het IIS-logboek.
Suggestie
Als u het oude gedrag wilt herstellen, kunt u de volgende instelling toevoegen aan uw web.config-bestand om u af te wijzen voor het nieuwe gedrag.
<appSettings>
<add key="aspnet:RequestQueueLimitPerSession" value="2147483647"/>
</appSettings>
Naam | Weergegeven als |
---|---|
Bereik | Edge |
Versie | 4.7 |
Type | Opnieuw targeting |
Netwerken
De standaardwaarde van ServicePointManager.SecurityProtocol is SecurityProtocolType.System.Default
DETAILS
Vanaf apps die zich richten op .NET Framework 4.7, is SecurityProtocolType.SystemDefaultde standaardwaarde van de ServicePointManager.SecurityProtocol eigenschap. Met deze wijziging kunnen .NET Framework-netwerk-API's op basis van SslStream (zoals FTP, HTTPS en SMTP) de standaardbeveiligingsprotocollen overnemen van het besturingssysteem in plaats van vastgelegde waarden te gebruiken die zijn gedefinieerd door .NET Framework. De standaardinstelling is afhankelijk van het besturingssysteem en elke aangepaste configuratie die door de systeembeheerder wordt uitgevoerd. Zie Protocollen in TLS/SSL (Schannel SSP) voor informatie over het standaard SChannel-protocol in elke versie van het Windows-besturingssysteem.
Voor toepassingen die zijn gericht op een eerdere versie van .NET Framework, is de standaardwaarde van de ServicePointManager.SecurityProtocol eigenschap afhankelijk van de versie van het doel .NET Framework. Zie de sectie Netwerken van Retargeting Changes for Migration from .NET Framework 4.5.2 to 4.6 (Retargeting Changes for Migration from .NET Framework 4.5.2 to 4.6 ) voor meer informatie.Suggestie
Deze wijziging is van invloed op toepassingen die gericht zijn op .NET Framework 4.7 of nieuwere versies. Als u liever een gedefinieerd protocol gebruikt in plaats van te vertrouwen op de standaardwaarde van het systeem, kunt u de waarde van de ServicePointManager.SecurityProtocol eigenschap expliciet instellen. Als deze wijziging ongewenst is, kunt u zich afmelden door een configuratie-instelling toe te voegen aan de <runtimesectie> van uw toepassingsconfiguratiebestand. In het volgende voorbeeld ziet u zowel de <runtime>
sectie als de Switch.System.Net.DontEnableSystemDefaultTlsVersions
schakeloptie voor afmelden:
<runtime>
<AppContextSwitchOverrides value="Switch.System.Net.DontEnableSystemDefaultTlsVersions=true" />
</runtime>
Naam | Weergegeven als |
---|---|
Bereik | Secundair |
Versie | 4.7 |
Type | Opnieuw targeting |
Betrokken API's
SslStream ondersteunt TLS-waarschuwingen
DETAILS
Na een mislukte TLS-handshake wordt er een System.IO.IOException met een interne System.ComponentModel.Win32Exception uitzondering gegenereerd door de eerste I/O-lees-/schrijfbewerking. De System.ComponentModel.Win32Exception.NativeErrorCode code voor de System.ComponentModel.Win32Exception code kan worden toegewezen aan de TLS-waarschuwing van de externe partij met behulp van de Schannel-foutcodes voor TLS- en SSL-waarschuwingen. Zie RFC 2246: Sectie 7.2.2 Foutwaarschuwingen voor meer informatie.
Het gedrag in .NET Framework 4.6.2 en eerder is dat het transportkanaal (meestal TCP-verbinding) een time-out krijgt tijdens schrijven of lezen als de andere partij de handshake heeft mislukt en onmiddellijk daarna de verbinding heeft afgewezen.
Suggestie
Toepassingen die I/O-API's van het netwerk aanroepen, zoals Read(Byte[], Int32, Int32)/Write(Byte[], Int32, Int32) moeten worden verwerkt IOException of .System.TimeoutException
De functie TLS-waarschuwingen is standaard ingeschakeld vanaf .NET Framework 4.7. Toepassingen die zijn gericht op versies van .NET Framework van 4.0 tot en met 4.6.2 die worden uitgevoerd op een .NET Framework 4.7- of hoger-systeem, hebben de functie uitgeschakeld om de compatibiliteit te behouden.
De volgende configuratie-API is beschikbaar voor het in- of uitschakelen van de functie voor .NET Framework 4.6- en hogertoepassingen die worden uitgevoerd op .NET Framework 4.7 of hoger.
Programmatisch: Dit moet het eerste zijn dat de toepassing doet, omdat ServicePointManager slechts één keer wordt geïnitialiseerd:
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>
Registersleutel (algemeen machine): Stel de waarde in om
false
de functie in te schakelen in .NET Framework 4.6 - 4.6.2.Key: HKLM\SOFTWARE\Wow6432Node\Microsoft\.NETFramework\AppContext\Switch.System.Net.DontEnableTlsAlerts - Type: String - Value: "true"
Naam | Weergegeven als |
---|---|
Bereik | Edge |
Versie | 4.7 |
Type | Opnieuw targeting |
Betrokken API's
- System.Net.Security.SslStream
- System.Net.WebRequest
- System.Net.HttpWebRequest
- System.Net.FtpWebRequest
- System.Net.Mail.SmtpClient
- System.Net.Http
Beveiliging
CspParameters.ParentWindowHandle verwacht nu HWND-waarde
DETAILS
Met de ParentWindowHandle waarde, geïntroduceerd in .NET Framework 2.0, kan een toepassing een bovenliggende vensterwaarde registreren, zodat elke gebruikersinterface die nodig is voor toegang tot de sleutel (zoals een pincodeprompt of toestemmingsdialoogvenster) wordt geopend als een modaal onderliggend element naar het opgegeven venster. Vanaf apps die gericht zijn op .NET Framework 4.7, kan een Windows Forms-toepassing de ParentWindowHandle eigenschap instellen met code als de volgende:
cspParameters.ParentWindowHandle = form.Handle;
In eerdere versies van .NET Framework was de waarde naar verwachting een System.IntPtr locatie in het geheugen waarin de HWND-waarde zich bevond. Stel de eigenschap in op formulier. Ingang op Windows 7 en eerdere versies had geen effect, maar op Windows 8 en latere versies resulteert dit in een 'System.Security.Cryptography.CryptographicException: De parameter is onjuist'.
Suggestie
Toepassingen die gericht zijn op .NET Framework 4.7 of hoger die een bovenliggende vensterrelatie willen registreren, worden aangemoedigd om het vereenvoudigde formulier te gebruiken:
cspParameters.ParentWindowHandle = form.Handle;
Gebruikers die hadden vastgesteld dat de juiste waarde die moet worden doorgegeven, het adres was van een geheugenlocatie die de waarde form.Handle
had, kan zich afmelden voor de gedragswijziging door de AppContext-switch Switch.System.Security.Cryptography.DoNotAddrOfCspParentWindowHandle
in te stellen op true
:
- Door programmatisch compat-switches in te stellen op de AppContext, zoals hier wordt uitgelegd.
- Door de volgende regel toe te voegen aan de
<runtime>
sectie van het bestand app.config:
<runtime>
<AppContextSwitchOverrides value="Switch.System.Security.Cryptography.DoNotAddrOfCspParentWindowHandle=true"/>
</runtime>
Omgekeerd kunnen gebruikers die zich willen aanmelden voor het nieuwe gedrag van de .NET Framework 4.7-runtime wanneer de toepassing wordt geladen onder oudere .NET Framework-versies, de AppContext-switch false
instellen op .
Naam | Weergegeven als |
---|---|
Bereik | Secundair |
Versie | 4.7 |
Type | Opnieuw targeting |
Betrokken API's
SslStream ondersteunt TLS-waarschuwingen
DETAILS
Na een mislukte TLS-handshake wordt er een System.IO.IOException met een interne System.ComponentModel.Win32Exception uitzondering gegenereerd door de eerste I/O-lees-/schrijfbewerking. De System.ComponentModel.Win32Exception.NativeErrorCode code voor de System.ComponentModel.Win32Exception code kan worden toegewezen aan de TLS-waarschuwing van de externe partij met behulp van de Schannel-foutcodes voor TLS- en SSL-waarschuwingen. Zie RFC 2246: Sectie 7.2.2 Foutwaarschuwingen voor meer informatie.
Het gedrag in .NET Framework 4.6.2 en eerder is dat het transportkanaal (meestal TCP-verbinding) een time-out krijgt tijdens schrijven of lezen als de andere partij de handshake heeft mislukt en onmiddellijk daarna de verbinding heeft afgewezen.
Suggestie
Toepassingen die I/O-API's van het netwerk aanroepen, zoals Read(Byte[], Int32, Int32)/Write(Byte[], Int32, Int32) moeten worden verwerkt IOException of .System.TimeoutException
De functie TLS-waarschuwingen is standaard ingeschakeld vanaf .NET Framework 4.7. Toepassingen die zijn gericht op versies van .NET Framework van 4.0 tot en met 4.6.2 die worden uitgevoerd op een .NET Framework 4.7- of hoger-systeem, hebben de functie uitgeschakeld om de compatibiliteit te behouden.
De volgende configuratie-API is beschikbaar voor het in- of uitschakelen van de functie voor .NET Framework 4.6- en hogertoepassingen die worden uitgevoerd op .NET Framework 4.7 of hoger.
Programmatisch: Dit moet het eerste zijn dat de toepassing doet, omdat ServicePointManager slechts één keer wordt geïnitialiseerd:
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>
Registersleutel (algemeen machine): Stel de waarde in om
false
de functie in te schakelen in .NET Framework 4.6 - 4.6.2.Key: HKLM\SOFTWARE\Wow6432Node\Microsoft\.NETFramework\AppContext\Switch.System.Net.DontEnableTlsAlerts - Type: String - Value: "true"
Naam | Weergegeven als |
---|---|
Bereik | Edge |
Versie | 4.7 |
Type | Opnieuw targeting |
Betrokken API's
- System.Net.Security.SslStream
- System.Net.WebRequest
- System.Net.HttpWebRequest
- System.Net.FtpWebRequest
- System.Net.Mail.SmtpClient
- System.Net.Http
Windows Communication Foundation (WCF)
Serialisatie van besturingstekens met DataContractJsonSerializer is nu compatibel met ECMAScript V6 en V8
DETAILS
In .NET Framework 4.6.2 en eerdere versies hebben bepaalde System.Runtime.Serialization.Json.DataContractJsonSerializer speciale besturingstekens, zoals \b, \f en \t, niet geserialiseerd op een manier die compatibel was met de ECMAScript V6- en V8-standaarden. Vanaf .NET Framework 4.7 is serialisatie van deze besturingstekens compatibel met ECMAScript V6 en V8.
Suggestie
Voor apps die zijn gericht op .NET Framework 4.7, is deze functie standaard ingeschakeld. Als dit gedrag niet wenselijk is, kunt u zich afmelden voor deze functie door de volgende regel toe te voegen aan de <runtime>
sectie van het bestand app.config of web.config:
<runtime>
<AppContextSwitchOverrides value="Switch.System.Runtime.Serialization.DoNotUseECMAScriptV6EscapeControlCharacter=false" />
</runtime>
Naam | Weergegeven als |
---|---|
Bereik | Edge |
Versie | 4.7 |
Type | Opnieuw targeting |
Betrokken API's
- DataContractJsonSerializer.WriteObject(Stream, Object)
- DataContractJsonSerializer.WriteObject(XmlDictionaryWriter, Object)
- DataContractJsonSerializer.WriteObject(XmlWriter, Object)
WCF-berichtbeveiliging kan nu TLS1.1 en TLS1.2 gebruiken
DETAILS
Vanaf .NET Framework 4.7 kunnen klanten TLS1.1 of TLS1.2 configureren in WCF-berichtbeveiliging, naast SSL3.0 en TLS1.0 via configuratie-instellingen voor toepassingen.
Suggestie
In .NET Framework 4.7 is ondersteuning voor TLS1.1 en TLS1.2 in WCF-berichtbeveiliging standaard uitgeschakeld. U kunt dit inschakelen door de volgende regel toe te voegen aan de <runtime>
sectie van het bestand app.config of web.config:
<runtime>
<AppContextSwitchOverrides value="Switch.System.ServiceModel.DisableUsingServicePointManagerSecurityProtocols=false;Switch.System.Net.DontEnableSchUseStrongCrypto=false" />
</runtime>
Naam | Weergegeven als |
---|---|
Bereik | Edge |
Versie | 4.7 |
Type | Opnieuw targeting |
Windows Presentation Foundation (WPF)
Aanroepen naar System.Windows.Input.PenContext.Disable on touch-enabled systems may throw an ArgumentException
DETAILS
In sommige gevallen kunnen aanroepen naar de interne methode System.Windows.Intput.PenContext.Disable op systemen met aanraakbediening een onhandig T:System.ArgumentException
gevolg zijn van reentrancy.
Suggestie
Dit probleem is opgelost in .NET Framework 4.7. Als u de uitzondering wilt voorkomen, voert u een upgrade uit naar een versie van .NET Framework die begint met .NET Framework 4.7.
Naam | Weergegeven als |
---|---|
Bereik | Edge |
Versie | 4.6.1 |
Type | Opnieuw targeting |
NullReferenceException in uitzonderingsafhandelingscode van ImageSourceConverter.ConvertFrom
DETAILS
Een fout in de uitzonderingsafhandelingscode waardoor ConvertFrom(ITypeDescriptorContext, CultureInfo, Object) een onjuiste System.NullReferenceException fout is opgetreden in plaats van de beoogde uitzondering ( System.IO.DirectoryNotFoundException of System.IO.FileNotFoundException). Deze wijziging corrigeert die fout, zodat de methode nu de juiste uitzondering genereert.
Standaard blijven alle toepassingen die gericht zijn op .NET Framework 4.6.2 en eerder, System.NullReferenceException nog steeds voor compatibiliteit zorgen. Ontwikkelaars die zich richten op .NET Framework 4.7 en hoger, moeten de juiste uitzonderingen zien.
Suggestie
Ontwikkelaars die willen terugkeren naar System.NullReferenceException het doel van .NET Framework 4.7 of hoger, kunnen het volgende toevoegen/samenvoegen aan het App.config-bestand van hun toepassing:
<configuration>
<runtime>
<AppContextSwitchOverrides value="Switch.System.Windows.Media.ImageSourceConverter.OverrideExceptionWithNullReferenceException=true"/>
</runtime>
</configuration>
Naam | Weergegeven als |
---|---|
Bereik | Edge |
Versie | 4.7 |
Type | Opnieuw targeting |
Betrokken API's
WPF-rastertoewijzing van ruimte aan sterkolommen
DETAILS
Vanaf .NET Framework 4.7 vervangt WPF het algoritme dat Grid wordt gebruikt om ruimte toe te wijzen aan *-columns. Hiermee wordt de werkelijke breedte gewijzigd die is toegewezen aan *-columns in een aantal gevallen:
- Wanneer een of meer *-kolommen ook een minimale of maximale breedte hebben die de proportionele toewijzing voor die kolom overschrijft. (De minimale breedte kan worden afgeleid van een expliciete MinWidth-declaratie of van een impliciet minimum dat is verkregen uit de inhoud van de kolom. De maximale breedte kan alleen expliciet worden gedefinieerd vanuit een MaxWidth-declaratie.)
- Wanneer een of meer *-kolommen een extreem groot *-gewicht declareren, groter dan 10^298.
- Wanneer de *-gewichten voldoende verschillen om instabiliteit van drijvende komma (overloop, onderloop, verlies van precisie).
- Wanneer afronding van de indeling is ingeschakeld en de effectieve dpi van de weergave voldoende hoog is. In de eerste twee gevallen kunnen de breedten die door het nieuwe algoritme worden geproduceerd aanzienlijk afwijken van de breedten die door het oude algoritme worden geproduceerd; In het laatste geval is het verschil maximaal één of twee pixels.
Met het nieuwe algoritme worden verschillende fouten opgelost die aanwezig zijn in het oude algoritme:
De totale toewijzing aan kolommen kan de breedte van het raster overschrijden. Dit kan gebeuren bij het toewijzen van ruimte aan een kolom waarvan de proportionele share kleiner is dan de minimale grootte. Het algoritme wijst de minimale grootte toe, waardoor de beschikbare ruimte voor andere kolommen wordt verkleind. Als er geen *-kolommen meer zijn om toe te wijzen, is de totale toewijzing te groot.
De totale toewijzing kan kort zijn voor de breedte van het raster. Dit is het dubbele probleem voor #1, dat ontstaat bij het toewijzen aan een kolom waarvan de proportionele share groter is dan de maximale grootte, zonder dat er *-kolommen overblijven om de marge in beslag te nemen.
Twee *-kolommen kunnen toewijzingen ontvangen die niet evenredig zijn met hun *-gewichten. Dit is een mildere versie van #1/#2, die ontstaat bij het toewijzen aan *-columns A, B en C (in die volgorde), waarbij B's proportionele share de minimale (of maximale) beperking schendt. Zoals hierboven, verandert de ruimte die beschikbaar is voor kolom C, die minder (of meer) proportionele toewijzing krijgt dan A.
Kolommen met extreem grote gewichten (> 10^298) worden allemaal behandeld alsof ze gewicht 10^298 hadden. Proportionele verschillen tussen deze kolommen (en tussen kolommen met iets kleinere gewichten) worden niet gehonoreerd.
Kolommen met oneindige gewichten worden niet correct verwerkt. (Eigenlijk kunt u geen gewicht instellen op Infinity, maar dit is een kunstmatige beperking. De toewijzingscode probeerde deze te verwerken, maar een slechte taak.)
Verschillende kleine problemen bij het voorkomen van overloop, onderloop, verlies van precisie en vergelijkbare problemen met drijvende komma.
Aanpassingen voor het afronden van de indeling zijn onjuist bij voldoende hoge DPI. Het nieuwe algoritme produceert resultaten die voldoen aan de volgende criteria:
- De werkelijke breedte die is toegewezen aan een *-kolom is nooit kleiner dan de minimale breedte en niet groter dan de maximale breedte.
- Aan elke *-kolom waaraan de minimale of maximale breedte niet is toegewezen, wordt een breedte toegewezen die evenredig is met het *-gewicht. Om precies te zijn, als twee kolommen worden gedeclareerd met respectievelijk breedte x* en y* en als geen van beide kolommen de minimum- of maximumbreedte ontvangt, hebben de werkelijke breedten v en w die aan de kolommen zijn toegewezen, in dezelfde verhouding: v / w = x / y.
- De totale breedte die is toegewezen aan 'proportioneel' *-kolommen is gelijk aan de beschikbare ruimte na toewijzing aan de beperkte kolommen (vaste, automatische en *-kolommen waaraan de minimale of maximale breedte is toegewezen). Dit kan nul zijn, bijvoorbeeld als de som van de minimale breedte groter is dan de beschikbare breedte van het raster.
- Al deze instructies moeten worden geïnterpreteerd met betrekking tot de "ideale" indeling. Wanneer de indelingsafronding van kracht is, kunnen de werkelijke breedten verschillen van de ideale breedtes met zo veel als één pixel.
Notitie
Alles wat wordt gezegd over kolommen en breedten in dit artikel is ook van toepassing op rijen en hoogten.
Suggestie
Standaard zien apps die gericht zijn op versies van .NET Framework die beginnen met .NET Framework 4.7 het nieuwe algoritme, terwijl apps die gericht zijn op .NET Framework 4.6.2 of eerdere versies, het oude algoritme zien.
Als u de standaardinstelling wilt overschrijven, gebruikt u de volgende configuratie-instelling:
<runtime>
<AppContextSwitchOverrides value="Switch.System.Windows.Controls.Grid.StarDefinitionsCanExceedAvailableSpace=true" />
</runtime>
De waarde true
selecteert het oude algoritme en false
selecteert het nieuwe algoritme.
Naam | Weergegeven als |
---|---|
Bereik | Secundair |
Versie | 4.7 |
Type | Opnieuw targeting |
WPF Pointer-Based Touch Stack
DETAILS
Deze wijziging voegt de mogelijkheid toe om een optionele WM_POINTER op basis van WPF touch/stylus stack in te schakelen. Ontwikkelaars die dit niet expliciet inschakelen, zien geen wijzigingen in het gedrag van WPF touch/stylus. Huidige bekende problemen met optionele WM_POINTER touch/stylus stack:
- Geen ondersteuning voor realtime inkt.
- Terwijl inkt en StylusPlugins nog steeds werken, worden ze verwerkt in de UI-thread, wat kan leiden tot slechte prestaties.
- Gedragswijzigingen als gevolg van wijzigingen in promotie van aanraak-/stylus-gebeurtenissen tot muis-gebeurtenissen
- Manipulatie kan zich anders gedragen
- Slepen/neerzetten toont niet de juiste feedback voor aanraakinvoer
- Dit heeft geen invloed op stylusinvoer
- Slepen/neerzetten kan niet meer worden gestart bij aanraak-/stylus-gebeurtenissen
- Dit kan ertoe leiden dat de toepassing niet meer reageert totdat de muisinvoer is gedetecteerd.
- In plaats daarvan moeten ontwikkelaars slepen en neerzetten vanuit muis-gebeurtenissen initiëren.
Suggestie
Ontwikkelaars die deze stack willen inschakelen, kunnen het volgende toevoegen/samenvoegen aan het bestand App.config van hun toepassing:
<configuration>
<runtime>
<AppContextSwitchOverrides value="Switch.System.Windows.Input.Stylus.EnablePointerSupport=true"/>
</runtime>
</configuration>
Als u deze optie verwijdert of de waarde instelt op false, wordt deze optionele stack uitgeschakeld. Houd er rekening mee dat deze stack alleen beschikbaar is op Windows 10-makersupdate en hoger.
Naam | Weergegeven als |
---|---|
Bereik | Edge |
Versie | 4.7 |
Type | Opnieuw targeting |
Windows Workflow Foundation (WF)
Werkstroomcontrolesommen zijn gewijzigd van MD5 in SHA1
DETAILS
Ter ondersteuning van foutopsporing met Visual Studio genereert de workflowruntime een controlesom voor een werkstroomexemplaren met behulp van een hash-algoritme. In de .NET Framework 4.6.2- en eerdere versies gebruikte de werkstroomcontroleomhashing het MD5-algoritme, waardoor problemen op FIPS-systemen zijn veroorzaakt. Vanaf .NET Framework 4.7 is het algoritme SHA1. Als uw code deze controlesommen heeft behouden, zijn ze niet compatibel.
Suggestie
Als uw code geen werkstroomexemplaren kan laden vanwege een controlesomfout, kunt u de AppContext
schakeloptie Switch.System.Activities.UseMD5ForWFDebugger instellen op waar. In code:
System.AppContext.SetSwitch("Switch.System.Activities.UseMD5ForWFDebugger", true);
Of in configuratie:
<configuration>
<runtime>
<AppContextSwitchOverrides value="Switch.System.Activities.UseMD5ForWFDebugger=true" />
</runtime>
</configuration>
Naam | Weergegeven als |
---|---|
Bereik | Secundair |
Versie | 4.7 |
Type | Opnieuw targeting |
.NET Framework 4.7.1
ASP.NET
ASP.NET Toegankelijkheidsverbeteringen in .NET Framework 4.7.1
DETAILS
Vanaf .NET Framework 4.7.1 is ASP.NET verbeterd hoe ASP.NET webbesturingselementen werken met toegankelijkheidstechnologie in Visual Studio om ASP.NET klanten beter te ondersteunen. Dit zijn de volgende wijzigingen:
- Wijzigingen in het implementeren van ontbrekende ui-toegankelijkheidspatronen in besturingselementen, zoals het dialoogvenster Veld toevoegen in de wizard Detailsweergave of het dialoogvenster ListView configureren van de wizard ListView.
- Wijzigingen in het verbeteren van de weergave in de modus Hoog contrast, zoals de editor gegevenspaginavelden.
- Wijzigingen om de toetsenbordnavigatie-ervaringen voor besturingselementen te verbeteren, zoals het dialoogvenster Velden bewerken in de wizard Pager-velden bewerken van het besturingselement DataPager, het dialoogvenster ObjectContext configureren of het dialoogvenster Gegevensselectie configureren van de wizard Gegevensbron configureren.
Suggestie
Hoe u deze wijzigingen kunt in- of uitschakelen om visual Studio Designer te laten profiteren van deze wijzigingen, moet deze worden uitgevoerd op .NET Framework 4.7.1 of hoger. De webtoepassing kan op een van de volgende manieren profiteren van deze wijzigingen:
- Installeer Visual Studio 2017 15.3 of hoger, die standaard de nieuwe toegankelijkheidsfuncties ondersteunt met de volgende AppContext Switch.
- Meld u af voor het verouderde toegankelijkheidsgedrag door de
Switch.UseLegacyAccessibilityFeatures
AppContext-switch toe te voegen aan de<runtime>
sectie in het bestand devenv.exe.config en dit in tefalse
stellen op , zoals in het volgende voorbeeld wordt weergegeven.
<?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>
Toepassingen die zijn gericht op .NET Framework 4.7.1 of hoger en het verouderde toegankelijkheidsgedrag willen behouden, kunnen ervoor kiezen om verouderde toegankelijkheidsfuncties te gebruiken door deze AppContext-switch expliciet in te true
stellen op .
Naam | Weergegeven als |
---|---|
Bereik | Secundair |
Versie | 4.7.1 |
Type | Opnieuw targeting |
Basis
Uitzonderingen voor SerialPort-achtergrondthreads
DETAILS
Achtergrondthreads die met SerialPort streams zijn gemaakt, beëindigen het proces niet meer wanneer er uitzonderingen voor het besturingssysteem worden gegenereerd.
In toepassingen die gericht zijn op .NET Framework 4.7 en eerdere versies, wordt een proces beëindigd wanneer er een uitzondering op het besturingssysteem wordt gegenereerd op een achtergrondthread die is gemaakt met een SerialPort stream.
In toepassingen die zijn gericht op .NET Framework 4.7.1 of een latere versie, wachten achtergrondthreads op gebeurtenissen van het besturingssysteem met betrekking tot de actieve seriële poort en kunnen in sommige gevallen vastlopen, zoals plotselinge verwijdering van de seriële poort.
Suggestie
Voor apps die zijn gericht op .NET Framework 4.7.1, kunt u zich afmelden voor de afhandeling van uitzonderingen als dit niet wenselijk is door het volgende toe te voegen aan de <runtime>
sectie van uw app.config
bestand:
<runtime>
<AppContextSwitchOverrides value="Switch.System.IO.Ports.DoNotCatchSerialStreamThreadExceptions=true" />
</runtime>
Voor apps die gericht zijn op eerdere versies van .NET Framework, maar worden uitgevoerd op .NET Framework 4.7.1 of hoger, kunt u zich aanmelden voor de afhandeling van uitzonderingen door het volgende toe te voegen aan de <runtime>
sectie van uw app.config
bestand:
<runtime>
<AppContextSwitchOverrides value="Switch.System.IO.Ports.DoNotCatchSerialStreamThreadExceptions=false" />
</runtime>
Naam | Weergegeven als |
---|---|
Bereik | Secundair |
Versie | 4.7.1 |
Type | Opnieuw targeting |
Betrokken API's
ServiceBase geeft geen OnStart-uitzonderingen door
DETAILS
In .NET Framework 4.7 en eerdere versies worden uitzonderingen die zijn opgetreden bij het opstarten van de service, niet doorgegeven aan de aanroeper van ServiceBase.Run.
Vanaf toepassingen die zich richten op .NET Framework 4.7.1, worden uitzonderingen door de runtime doorgegeven aan ServiceBase.Run services die niet kunnen worden gestart.
Suggestie
Bij het starten van de service, als er een uitzondering is, wordt die uitzondering doorgegeven. Dit moet helpen bij het vaststellen van gevallen waarin services niet kunnen worden gestart.
Als dit gedrag ongewenst is, kunt u zich afmelden door het volgende AppContextSwitchOverrides
element toe te voegen aan de runtime
sectie van uw toepassingsconfiguratiebestand:
<AppContextSwitchOverrides value="Switch.System.ServiceProcess.DontThrowExceptionsOnStart=true" />
Als uw toepassing is gericht op een eerdere versie dan 4.7.1, maar u dit gedrag wilt hebben, voegt u het volgende AppContextSwitchOverrides
element toe aan de runtime
sectie van uw toepassingsconfiguratiebestand:
<AppContextSwitchOverrides value="Switch.System.ServiceProcess.DontThrowExceptionsOnStart=false" />
Naam | Weergegeven als |
---|---|
Bereik | Secundair |
Versie | 4.7.1 |
Type | Opnieuw targeting |
Betrokken API's
Beveiliging
Standaardalgoritmen SignedXML en SignedXMS zijn gewijzigd in SHA256
DETAILS
In .NET Framework 4.7 en eerder zijn SignedXML en SignedCMS standaard SHA1 voor sommige bewerkingen. Vanaf .NET Framework 4.7.1 is SHA256 standaard ingeschakeld voor deze bewerkingen. Deze wijziging is nodig omdat SHA1 niet langer als veilig wordt beschouwd.
Suggestie
Er zijn twee nieuwe contextswitchwaarden om te bepalen of SHA1 (onveilig) of SHA256 standaard wordt gebruikt:
- Switch.System.Security.Cryptography.Xml.UseInsecureHashAlgorithms
- Switch.System.Security.Cryptography.Pkcs.UseInsecureHashAlgorithms Voor toepassingen die gericht zijn op .NET Framework 4.7.1 en latere versies, als het gebruik van SHA256 ongewenst is, kunt u de standaardwaarde herstellen naar SHA1 door de volgende configuratieswitch toe te voegen aan de runtimesectie van uw app-configuratiebestand:
<AppContextSwitchOverrides value="Switch.System.Security.Cryptography.Xml.UseInsecureHashAlgorithms=true;Switch.System.Security.Cryptography.Pkcs.UseInsecureHashAlgorithms=true" />
Voor toepassingen die gericht zijn op .NET Framework 4.7 en eerdere versies, kunt u zich voor deze wijziging aanmelden door de volgende configuratieswitch toe te voegen aan de runtimesectie van uw app-configuratiebestand:
<AppContextSwitchOverrides value="Switch.System.Security.Cryptography.Xml.UseInsecureHashAlgorithms=false;Switch.System.Security.Cryptography.Pkcs.UseInsecureHashAlgorithms=false" />
Naam | Weergegeven als |
---|---|
Bereik | Secundair |
Versie | 4.7.1 |
Type | Opnieuw targeting |
Betrokken API's
- System.Security.Cryptography.Pkcs.CmsSigner
- System.Security.Cryptography.Xml.SignedXml
- System.Security.Cryptography.Xml.Reference
SignedXml.GetPublicKey retourneert RSACng op net462 (of lightup) zonder wijzigingen opnieuw te wijzigen
DETAILS
Vanaf .NET Framework 4.6.2 is het concrete type van het object dat wordt geretourneerd door de SignedXml.GetPublicKey methode gewijzigd (zonder een quirk) van een CryptoServiceProvider-implementatie naar een Cng-implementatie. Dit komt doordat de implementatie is gewijzigd van het gebruik certificate.PublicKey.Key
van het gebruik van de interne certificate.GetAnyPublicKey
die wordt doorgestuurd naar RSACertificateExtensions.GetRSAPublicKey.
Suggestie
Vanaf apps die worden uitgevoerd op .NET Framework 4.7.1, kunt u de CryptoServiceProvider-implementatie die standaard wordt gebruikt in .NET Framework 4.6.1 en eerdere versies gebruiken door de volgende configuratieswitch toe te voegen aan de runtimesectie van uw app-configuratiebestand:
<AppContextSwitchOverrides value="Switch.System.Security.Cryptography.Xml.SignedXmlUseLegacyCertificatePrivateKey=true" />
Naam | Weergegeven als |
---|---|
Bereik | Edge |
Versie | 4.6.2 |
Type | Opnieuw targeting |
Betrokken API's
Windows Communication Foundation (WCF)
Verbeterde toegankelijkheid voor sommige .NET SDK-hulpprogramma's
DETAILS
In de .NET Framework SDK 4.7.1 zijn de hulpprogramma's SvcConfigEditor.exe en SvcTraceViewer.exe verbeterd door uiteenlopende toegankelijkheidsproblemen op te lossen. De meeste hiervan waren kleine problemen, zoals een naam die niet wordt gedefinieerd of bepaalde UI-automatiseringspatronen niet correct worden geïmplementeerd. Hoewel veel gebruikers zich niet bewust zouden zijn van deze onjuiste waarden, vinden klanten die ondersteunende technologieën zoals schermlezers gebruiken deze SDK-hulpprogramma's toegankelijker. Zeker, deze fixes veranderen enkele eerdere gedragingen, zoals de focusvolgorde van het toetsenbord. Als u alle toegankelijkheidsoplossingen in deze hulpprogramma's wilt ophalen, kunt u het volgende doen in uw app.config-bestand:
<runtime>
<AppContextSwitchOverrides value="Switch.UseLegacyAccessibilityFeatures=false"/>
</runtime>
Naam | Weergegeven als |
---|---|
Bereik | Edge |
Versie | 4.7.1 |
Type | Opnieuw targeting |
Windows Forms
Toegankelijkheidsverbeteringen in Besturingselementen voor Windows Forms
DETAILS
Windows Forms verbetert de werking van toegankelijkheidstechnologieën om klanten van Windows Forms beter te ondersteunen. Dit zijn de volgende wijzigingen die beginnen met .NET Framework 4.7.1:
- Wijzigingen om de weergave tijdens de modus Hoog contrast te verbeteren.
- Wijzigingen om de ervaring van de eigenschappenbrowser te verbeteren. Verbeteringen in de eigenschappenbrowser zijn onder andere:
- Betere toetsenbordnavigatie via de verschillende vervolgkeuzelijsten selectievensters.
- Minder onnodige tabstops.
- Betere rapportage van controletypen.
- Verbeterd vertellergedrag.
- Wijzigingen in het implementeren van ontbrekende ui-toegankelijkheidspatronen in besturingselementen.
Suggestie
Hoe u deze wijzigingen kunt in- of uitschakelen om ervoor te zorgen dat de toepassing van deze wijzigingen kan profiteren, moet deze worden uitgevoerd op .NET Framework 4.7.1 of hoger. De toepassing kan op een van de volgende manieren profiteren van deze wijzigingen:
- Het wordt opnieuw gecompileerd om het .NET Framework 4.7.1 te targeten. Deze toegankelijkheidswijzigingen zijn standaard ingeschakeld voor Windows Forms-toepassingen die gericht zijn op .NET Framework 4.7.1 of hoger.
- Het opt-out van het verouderde toegankelijkheidsgedrag door de volgende AppContext-switch toe te voegen aan de
<runtime>
sectie van het bestand app.config en dit in tefalse
stellen op , zoals in het volgende voorbeeld wordt weergegeven.
<?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>
Toepassingen die zijn gericht op .NET Framework 4.7.1 of hoger en het verouderde toegankelijkheidsgedrag willen behouden, kunnen ervoor kiezen om verouderde toegankelijkheidsfuncties te gebruiken door deze AppContext-switch expliciet in te true
stellen op .
Zie het overzicht van UI Automation voor een overzicht van UI-automatisering.
Ondersteuning toegevoegd voor UI Automation-patronen en -eigenschappen
Toegankelijkheidsclients kunnen profiteren van nieuwe WinForms-toegankelijkheidsfunctionaliteit met behulp van algemene, openbaar beschreven aanroeppatronen. Deze patronen zijn niet specifiek voor WinForms. Toegankelijkheidsclients kunnen bijvoorbeeld de QueryInterface-methode aanroepen op de MAAS (IAccessible Interface) om een IServiceProvider-interface te verkrijgen. Als deze interface beschikbaar is, kunnen clients de QueryService-methode gebruiken om een IAccessibleEx-interface aan te vragen. Zie IAccessibleEx van een client gebruiken voor meer informatie. Vanaf .NET Framework 4.7.1 zijn IServiceProvider en IAccessibleEx (indien van toepassing) beschikbaar voor WinForms-toegankelijkheidsobjecten.
.NET Framework 4.7.1 voegt ondersteuning toe voor de volgende ui-automatiseringspatronen en -eigenschappen:
De ToolStripSplitButton en ComboBox besturingselementen ondersteunen het patroon Uitvouwen/Samenvouwen.
Het ToolStripMenuItem besturingselement heeft een eigenschapswaarde ControlType.MenuItemControlType.
Het ToolStripItem besturingselement ondersteunt de NameProperty eigenschap en hetpatroon Uitvouwen/Samenvouwen.
Het ToolStripDropDownItem besturingselement ondersteunt AccessibleEvents het aangeven van StateChange en NameChange wanneer de vervolgkeuzelijst wordt uitgevouwen of samengevouwen.
Het ToolStripDropDownButton besturingselement heeft een eigenschapswaarde ControlType van ControlType.MenuItem.
Het DataGridViewCheckBoxCell besturingselement ondersteunt het TogglePattern.
De NumericUpDown en DomainUpDown besturingselementen ondersteunen de NameProperty eigenschap en hebben een ControlType van ControlType.Spinner.
Verbeteringen in het PropertyGrid-besturingselement The .NET Framework 4.7.1 voegt de volgende verbeteringen toe aan het besturingselement PropertyBrowser:De knop Details in het foutdialoogvenster dat wordt weergegeven wanneer de gebruiker een onjuiste waarde invoert in het PropertyGrid besturingselement ondersteunt het patroon Uitvouwen/Samenvouwen, status- en naamwijzigingsmeldingen en een ControlType-eigenschap met een waarde van ControlType.MenuItem.
Het berichtvenster dat wordt weergegeven wanneer de knop Details van het foutdialoogvenster is uitgevouwen, is nu toetsenbord toegankelijk en stelt Verteller in staat om de inhoud van het foutbericht aan te kondigen.
De AccessibleRole rijen in het PropertyGrid besturingselement zijn gewijzigd van 'Rij' in 'Cel'. De cel wordt toegewezen aan UIA ControlType 'DataItem', waarmee deze de juiste sneltoetsen en Aankondigingen van Verteller kan ondersteunen.
De PropertyGrid besturingsrijen die koptekstitems vertegenwoordigen wanneer voor het PropertyGrid besturingselement een PropertySort eigenschapswaarde ControlType.Buttonvan ControlType is ingesteld PropertySort.Categorized.
De PropertyGrid besturingsrijen die koptekstitems vertegenwoordigen wanneer voor het PropertyGrid besturingselement een PropertySort eigenschap is ingesteld ter PropertySort.Categorized ondersteuning van het patroon Uitvouwen/Samenvouwen.
Verbeterde toetsenbordnavigatie tussen het raster en de werkbalk erboven. Als u op Shift-Tab drukt, selecteert u nu de eerste knop Op de werkbalk in plaats van de hele werkbalk.
PropertyGrid besturingselementen die worden weergegeven in de modus Hoog contrast, tekenen nu een focusrechthoek rond de knop Werkbalk die overeenkomt met de huidige PropertySort eigenschapswaarde.
PropertyGrid besturingselementen die worden weergegeven in de modus Hoog contrast en met een PropertySort eigenschap die is ingesteld op PropertySort.Categorized , wordt nu de achtergrond van categoriekoppen in een zeer contrasterende kleur weergegeven.
PropertyGrid bepaalt beter onderscheid tussen items op de werkbalk met focus en de items op de werkbalk die de huidige waarde van de PropertySort eigenschap aangeven. Deze oplossing bestaat uit een wijziging in hoog contrast en een wijziging voor scenario's met niet-hoog contrast.
PropertyGridcontrol ToolBar items die de huidige waarde van de PropertySort eigenschap ondersteunen.TogglePattern
Verbeterde ondersteuning voor Verteller voor het onderscheiden van de geselecteerde uitlijning in de uitlijningskiezer.
Wanneer een leeg PropertyGrid besturingselement wordt weergegeven op een formulier, krijgt het nu de focus waar het eerder niet zou zijn.
Het gebruik van door het besturingssysteem gedefinieerde kleuren in thema's met hoog contrast
- De Button en CheckBox besturingselementen waarop FlatStyle de eigenschap is ingesteld FlatStyle.System, wat de standaardstijl is, gebruiken nu door het besturingssysteem gedefinieerde kleuren in het thema Hoog contrast wanneer deze optie is geselecteerd. Voorheen waren tekst- en achtergrondkleuren niet contrasterend en waren ze moeilijk te lezen.
- De Buttonbesturingselementen , CheckBox, RadioButton, en GroupBoxLabelLinkLabelbesturingselementen waarvoor de Enabled eigenschap is ingesteld op onwaar, hebben een gearceerde kleur gebruikt om tekst weer te geven in thema's met hoog contrast, wat resulteert in een laag contrast ten opzichte van de achtergrond. Deze besturingselementen gebruiken nu de kleur Uitgeschakelde tekst die is gedefinieerd door het besturingssysteem. Deze oplossing is van toepassing op besturingselementen waarbij de
FlatStyle
eigenschap is ingesteld op een andere waarde dan FlatStyle.System. De laatste besturingselementen worden weergegeven door het besturingssysteem. - DataGridView geeft nu een zichtbare rechthoek weer rond de inhoud van de cel met de huidige focus. Voorheen was dit niet zichtbaar in bepaalde thema's met hoog contrast.
- ToolStripMenuItem besturingselementen waarvoor de Enabled eigenschap is ingesteld op false , gebruiken nu de kleur Uitgeschakelde tekst die is gedefinieerd door het besturingssysteem.
- ToolStripMenuItem besturingselementen waarvoor de Checked eigenschap is ingesteld op True , geven nu het bijbehorende vinkje weer in een contrasterende systeemkleur. Voorheen was de kleur van het vinkje niet contrasterend genoeg en niet zichtbaar in thema's met hoog contrast. OPMERKING: Windows 10 heeft waarden gewijzigd voor sommige systeemkleuren met hoog contrast. Windows Forms Framework is gebaseerd op het Win32-framework. Voer voor de beste ervaring de nieuwste versie van Windows uit en meld u aan bij de meest recente wijzigingen in het besturingssysteem door een app.manifest-bestand toe te voegen in een testtoepassing en de volgende code uit te schakelen:
<!-- Windows 10 -->
<supportedOS Id="{8e0f7a12-bfb3-4fe8-b9a5-48fd50a15a9a}" />
Verbeterde toetsenbordnavigatie
- Wanneer de eigenschap van een ComboBox besturingselement DropDownStyle is ingesteld ComboBoxStyle.DropDownList op en het eerste besturingselement in de tabvolgorde van het formulier is, wordt nu een focusrechthoek weergegeven wanneer het bovenliggende formulier wordt geopend met het toetsenbord. Vóór deze wijziging was de toetsenbordfocus op dit besturingselement, maar er is geen focusindicator weergegeven.
Verbeterde ondersteuning voor Verteller
Het MonthCalendar besturingselement heeft ondersteuning toegevoegd voor ondersteunende technologieën voor toegang tot het besturingselement, inclusief de mogelijkheid voor Verteller om de waarde van het besturingselement te lezen wanneer dit eerder niet mogelijk was.
Het CheckedListBox besturingselement meldt nu Verteller wanneer een CheckBox.CheckState eigenschap is gewijzigd. Voorheen kreeg Verteller geen melding en als gevolg hiervan zouden gebruikers niet worden geïnformeerd dat de CheckState eigenschap was bijgewerkt.
Het LinkLabel besturingselement heeft de manier gewijzigd waarop Verteller de tekst van het besturingselement op de hoogte stelt. Eerder kondigde Verteller deze tekst twee keer aan en las '&' symbolen als echte tekst, ook al zijn ze niet zichtbaar voor een gebruiker. De gedupliceerde tekst is verwijderd uit de aankondigingen van Verteller, evenals overbodige '&'-symbolen.
De DataGridViewCell besturingstypen rapporteren nu de status alleen-lezen correct aan Verteller en andere ondersteunende technologieën.
Verteller kan nu het systeemmenu van onderliggende vensters lezen in [Multiple-Document Interface]~/docs/framework/winforms/advanced/multiple-document-interface-mdi-applications.md).
Verteller kan nu besturingselementen lezen ToolStripMenuItem met een ToolStripItem.Enabled eigenschap ingesteld op false. Eerder kon Verteller zich niet richten op uitgeschakelde menu-items om de inhoud te lezen.
Naam | Weergegeven als |
---|---|
Bereik | Primair |
Versie | 4.8 |
Type | Opnieuw targeting |
Betrokken API's
- ToolStripDropDownButton.CreateAccessibilityInstance()
- DomainUpDown.DomainUpDownAccessibleObject.Name
- MonthCalendar.AccessibilityObject
Windows Presentation Foundation (WPF)
Toegankelijkheidsverbeteringen in WPF
DETAILS
Verbeteringen in hoog contrast
- De focus voor het Expander besturingselement is nu zichtbaar. In eerdere versies van .NET Framework was het niet.
- De tekst in CheckBox en RadioButton besturingselementen wanneer deze zijn geselecteerd, is nu gemakkelijker te zien dan in eerdere .NET Framework-versies.
- De rand van een uitgeschakelde ComboBox tekst heeft nu dezelfde kleur als de uitgeschakelde tekst. In eerdere versies van .NET Framework was het niet.
- Uitgeschakelde en gerichte knoppen gebruiken nu de juiste themakleur. In eerdere versies van .NET Framework hebben ze dat niet gedaan.
- De vervolgkeuzeknop is nu zichtbaar wanneer de stijl van een ComboBox besturingselement is ingesteld op ToolBar.ComboBoxStyleKey. In eerdere versies van .NET Framework was het niet.
- De indicatorpijl voor sorteren in een DataGrid besturingselement gebruikt nu themakleuren. In eerdere versies van .NET Framework is dit niet gelukt.
- De standaard hyperlinkstijl wordt nu gewijzigd in de juiste themakleur terwijl u met de muis overgaat. In eerdere versies van .NET Framework is dit niet gelukt.
- De focus op het toetsenbord op keuzerondjes is nu zichtbaar. In eerdere versies van .NET Framework was het niet.
- De DataGrid kolom met selectievakjes van het besturingselement gebruikt nu de verwachte kleuren voor feedback over toetsenbordfocus. In eerdere versies van .NET Framework is dit niet gelukt.
- de focusvisuals van het toetsenbord zijn nu zichtbaar voor ComboBox en ListBox besturingselementen. In eerdere versies van .NET Framework was het niet.
Verbeterde interactie van schermlezers
- Expander besturingselementen worden nu correct aangekondigd als groepen (uitvouwen/samenvouwen) door schermlezers.
- DataGridCell besturingselementen worden nu correct aangekondigd als gegevensrastercel (gelokaliseerd) door schermlezers.
- Schermlezers kondigen nu de naam van een bewerkbaar ComboBoxaan.
- PasswordBox besturingselementen worden niet meer aangekondigd als 'geen item in weergave' door schermlezers.
LiveRegion-ondersteuning
Schermlezers, zoals Verteller, helpen mensen de gebruikersinterface (UI) van een toepassing te begrijpen, meestal door het ui-element te beschrijven dat momenteel de focus heeft. Als een UI-element echter ergens in het scherm verandert en deze niet de focus heeft, wordt de gebruiker mogelijk niet geïnformeerd en mist deze belangrijke informatie. LiveRegions zijn bedoeld om dit probleem op te lossen. Een ontwikkelaar kan deze gebruiken om de schermlezer of een andere UI Automation-client te informeren dat er een belangrijke wijziging is aangebracht in een UI-element. De schermlezer kan vervolgens bepalen hoe en wanneer de gebruiker deze wijziging moet informeren. Met de eigenschap LiveSetting kan de schermlezer ook weten hoe belangrijk het is om de gebruiker op de hoogte te stellen van de wijziging die in de gebruikersinterface is aangebracht.
Suggestie
Aanmelden of afmelden voor deze wijzigingen
Om ervoor te zorgen dat de toepassing van deze wijzigingen kan profiteren, moet deze worden uitgevoerd op .NET Framework 4.7.1 of hoger. De toepassing kan op een van de volgende manieren profiteren van deze wijzigingen:
Doel .NET Framework 4.7.1. Dit is de aanbevolen methode. Deze toegankelijkheidswijzigingen zijn standaard ingeschakeld voor WPF-toepassingen die zijn gericht op .NET Framework 4.7.1 of hoger.
Het opt-out van het verouderde toegankelijkheidsgedrag wordt afgekeerd door de volgende AppContext Switch toe te voegen in de
<runtime>
sectie van het app-configuratiebestand en dit in tefalse
stellen op , zoals in het volgende voorbeeld wordt weergegeven.<?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>
Toepassingen die zijn gericht op .NET Framework 4.7.1 of hoger en het verouderde toegankelijkheidsgedrag willen behouden, kunnen ervoor kiezen om verouderde toegankelijkheidsfuncties te gebruiken door deze AppContext-switch expliciet in te true
stellen op .
Zie Overzicht van UI Automation voor een overzicht van UI-automatisering.
Naam | Weergegeven als |
---|---|
Bereik | Primair |
Versie | 4.7.1 |
Type | Opnieuw targeting |
Betrokken API's
- AutomationElementIdentifiers.LiveSettingProperty
- AutomationElementIdentifiers.LiveRegionChangedEvent
- System.Windows.Automation.AutomationLiveSetting
- AutomationProperties.LiveSettingProperty
- AutomationProperties.SetLiveSetting(DependencyObject, AutomationLiveSetting)
- AutomationProperties.GetLiveSetting(DependencyObject)
- AutomationPeer.GetLiveSettingCore()
Selector SelectionChanged-gebeurtenis en eigenschap SelectedValue
DETAILS
Vanaf .NET Framework 4.7.1 wordt Selector de waarde van SelectedValue de eigenschap altijd bijgewerkt voordat de gebeurtenis wordt gegenereerd wanneer de SelectionChanged selectie wordt gewijzigd. Hierdoor is de eigenschap SelectedValue consistent met de andere selectie-eigenschappen (SelectedItem en SelectedIndex), die worden bijgewerkt voordat de gebeurtenis wordt gegenereerd.
In .NET Framework 4.7 en eerdere versies is de update naar SelectedValue in de meeste gevallen uitgevoerd vóór de gebeurtenis, maar het gebeurde na de gebeurtenis als de selectiewijziging werd veroorzaakt door het wijzigen van de SelectedValue eigenschap.
Suggestie
Apps die zijn gericht op .NET Framework 4.7.1 of hoger, kunnen zich afmelden voor deze wijziging en verouderd gedrag gebruiken door het volgende toe te voegen aan de <runtime>
sectie van het toepassingsconfiguratiebestand:
<runtime>
<AppContextSwitchOverrides
value="Switch.System.Windows.Controls.TabControl.SelectionPropertiesCanLagBehindSelectionChangedEvent=true" />
</runtime>
Apps die zijn gericht op .NET Framework 4.7 of eerder, maar die worden uitgevoerd op .NET Framework 4.7.1 of hoger, kunnen het nieuwe gedrag inschakelen door de volgende regel toe te voegen aan de <runtime>
sectie van het .configuration-bestand van de toepassing:
<runtime>
<AppContextSwitchOverrides value="Switch.System.Windows.Controls.TabControl.SelectionPropertiesCanLagBehindSelectionChangedEvent=false" />
</runtime>
Naam | Weergegeven als |
---|---|
Bereik | Secundair |
Versie | 4.7.1 |
Type | Opnieuw targeting |
Betrokken API's
TabControl SelectionChanged-gebeurtenis en eigenschap SelectedContent
DETAILS
Vanaf .NET Framework 4.7.1 TabControl wordt de waarde van SelectedContent de eigenschap bijgewerkt voordat de gebeurtenis wordt gegenereerd wanneer de SelectionChanged selectie wordt gewijzigd. In .NET Framework 4.7 en eerdere versies is de update naar SelectedContent uitgevoerd na de gebeurtenis.
Suggestie
Apps die zijn gericht op .NET Framework 4.7.1 of hoger, kunnen zich afmelden voor deze wijziging en verouderd gedrag gebruiken door het volgende toe te voegen aan de <runtime>
sectie van het toepassingsconfiguratiebestand:
<runtime>
<AppContextSwitchOverrides value="Switch.System.Windows.Controls.TabControl.SelectionPropertiesCanLagBehindSelectionChangedEvent=true" />
</runtime>
Apps die zijn gericht op .NET Framework 4.7 of eerder, maar die worden uitgevoerd op .NET Framework 4.7.1 of hoger, kunnen het nieuwe gedrag inschakelen door de volgende regel toe te voegen aan de <runtime>
sectie van het .configuration-bestand van de toepassing:
<runtime>
<AppContextSwitchOverrides value="Switch.System.Windows.Controls.TabControl.SelectionPropertiesCanLagBehindSelectionChangedEvent=false" />
</runtime>
Naam | Weergegeven als |
---|---|
Bereik | Secundair |
Versie | 4.7.1 |
Type | Opnieuw targeting |
Betrokken API's
Het standaardhashalgoritme voor WPF PackageDigitalSignatureManager is nu SHA256
DETAILS
De System.IO.Packaging.PackageDigitalSignatureManager
functie biedt functionaliteit voor digitale handtekeningen met betrekking tot WPF-pakketten. In .NET Framework 4.7 en eerdere versies was SHA1 het standaardalgoritme (PackageDigitalSignatureManager.DefaultHashAlgorithm) dat wordt gebruikt voor het ondertekenen van onderdelen van een pakket. Vanwege recente beveiligingsproblemen met SHA1 is deze standaardwaarde gewijzigd in SHA256 vanaf .NET Framework 4.7.1. Deze wijziging is van invloed op alle pakketondertekening, inclusief XPS-documenten.
Suggestie
Een ontwikkelaar die deze wijziging wil gebruiken terwijl deze is gericht op een frameworkversie die lager is dan .NET Framework 4.7.1 of een ontwikkelaar die de vorige functionaliteit nodig heeft, terwijl deze is gericht op .NET Framework 4.7.1 of hoger, kan de volgende AppContext-vlag op de juiste manier instellen. Een waarde van true leidt ertoe dat SHA1 wordt gebruikt als het standaardalgoritme; onwaar resulteert in SHA256.
<configuration>
<runtime>
<AppContextSwitchOverrides value="Switch.MS.Internal.UseSha1AsDefaultHashAlgorithmForDigitalSignatures=true"/>
</runtime>
</configuration>
Naam | Weergegeven als |
---|---|
Bereik | Edge |
Versie | 4.7.1 |
Type | Opnieuw targeting |
Betrokken API's
Windows Workflow Foundation (WF)
Toegankelijkheidsverbeteringen in De werkstroomontwerper van Windows Workflow Foundation (WF)
DETAILS
De WF-werkstroomontwerper (Windows Workflow Foundation) verbetert de werking ervan met toegankelijkheidstechnologieën. Deze verbeteringen omvatten de volgende wijzigingen:
- De tabvolgorde wordt gewijzigd van links naar rechts en van boven naar beneden in sommige besturingselementen:
- Het correlatievenster initialiseren voor het instellen van correlatiegegevens voor de InitializeCorrelation activiteit
- Het inhoudsdefinitievenster voor de Receive, Senden SendReplyReceiveReply activiteiten
- Er zijn meer functies beschikbaar via het toetsenbord:
- Wanneer u de eigenschappen van een activiteit bewerkt, kunnen eigenschapsgroepen worden samengevouwen door het toetsenbord wanneer ze de eerste keer zijn gericht.
- Waarschuwingspictogrammen zijn nu toegankelijk via het toetsenbord.
- De knop Meer eigenschappen in de venster Eigenschappen is nu toegankelijk via het toetsenbord.
- Toetsenbordgebruikers hebben nu toegang tot de koptekstitems in de deelvensters Argumenten en Variabelen van de werkstroomontwerper.
- Verbeterde zichtbaarheid van items met focus, zoals wanneer:
- Rijen toevoegen aan gegevensrasters die worden gebruikt door workflowontwerpers en activiteitsontwerpers.
- Tabs door velden in de ReceiveReply en SendReply activiteiten.
- Standaardwaarden instellen voor variabelen of argumenten
- Schermlezers kunnen nu het volgende op de juiste manier herkennen:
- Onderbrekingspunten die zijn ingesteld in de werkstroomontwerper.
- De FlowSwitch<T>, FlowDecisionen CorrelationScope activiteiten.
- De inhoud van de Receive activiteit.
- Het doeltype voor de InvokeMethod activiteit.
- De keuzelijst met invoervak Uitzondering en de sectie Ten slotte in de TryCatch activiteit.
- De keuzelijst met invoervak Berichttype, de splitsfunctie in het venster Correlatie-initialisaties toevoegen, het venster Inhoudsdefinitie en het venster CorrelerenOn-defintion in de berichtenactiviteiten (Receive, Send, SendReplyen ).ReceiveReply
- Statusmachineovergangen en overgangen naar bestemmingen.
- Aantekeningen en connectors voor FlowDecision activiteiten.
- De contextmenu's (met de rechtermuisknop) voor activiteiten.
- De editors voor eigenschapswaarden, de knop Zoeken wissen, de sorteerknoppen Categorie en Alfabetisch en het dialoogvenster Expressie-editor in het eigenschappenraster.
- Het zoompercentage in de werkstroomontwerper.
- Het scheidingsteken in Parallel en Pick activiteiten.
- De InvokeDelegate activiteit.
- Het venster Typen selecteren voor woordenlijstactiviteiten (
Microsoft.Activities.AddToDictionary<TKey,TValue>
,Microsoft.Activities.RemoveFromDictionary<TKey,TValue>
enzovoort). - Het venster Bladeren en .NET-type selecteren.
- Breadcrumbs in de workflowontwerper.
- Gebruikers die thema's met hoog contrast kiezen, zien veel verbeteringen in de zichtbaarheid van de workflowontwerper en de bijbehorende besturingselementen, zoals betere contrastverhoudingen tussen elementen en meer merkbare selectievakken die worden gebruikt voor focuselementen.
Suggestie
Als u een toepassing hebt met een opnieuw gehoste werkstroomontwerper, kan uw toepassing profiteren van deze wijzigingen door een van deze acties uit te voeren:
- Uw toepassing opnieuw compileren om te richten op .NET Framework 4.7.1. Deze toegankelijkheidswijzigingen zijn standaard ingeschakeld.
- Als uw toepassing is gericht op .NET Framework 4.7 of eerder, maar wordt uitgevoerd op .NET Framework 4.7.1, kunt u zich afmelden voor dit verouderde toegankelijkheidsgedrag door de volgende AppContext-switch toe te voegen aan de
<runtime>
sectie van het bestand app.config en dit in tefalse
stellen op , zoals in het volgende voorbeeld wordt weergegeven.
<?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>
Toepassingen die zijn gericht op .NET Framework 4.7.1 of hoger en het verouderde toegankelijkheidsgedrag willen behouden, kunnen ervoor kiezen om verouderde toegankelijkheidsfuncties te gebruiken door deze AppContext-switch expliciet in te true
stellen op .
Naam | Weergegeven als |
---|---|
Bereik | Secundair |
Versie | 4.7.1 |
Type | Opnieuw targeting |
.NET Framework 4.7.2
Basis
Unicode Bidirectionele besturingstekens in URI's toestaan
DETAILS
Unicode geeft verschillende speciale besturingstekens op die worden gebruikt om de afdrukstand van tekst op te geven. In eerdere versies van .NET Framework zijn deze tekens onjuist verwijderd van alle URI's, zelfs als ze aanwezig waren in hun procentcodeerde vorm. Om RFC 3987 beter te kunnen volgen, staan we deze tekens nu toe in URI's. Wanneer niet-gecodeerde waarden in een URI worden gevonden, worden ze gecodeerd met procenten. Wanneer procentcodering is gevonden, blijven ze ongewijzigd.
Suggestie
Voor toepassingen die gericht zijn op versies van .NET Framework vanaf 4.7.2, is ondersteuning voor Unicode bidirectionele tekens standaard ingeschakeld. Als deze wijziging ongewenst is, kunt u deze uitschakelen door de volgende AppContextSwitchOverrides-switch toe te voegen aan de <runtime>
sectie van het toepassingsconfiguratiebestand:
<runtime>
<AppContextSwitchOverrides value="Switch.System.Uri.DontKeepUnicodeBidiFormattingCharacters=true" />
</runtime>
Voor toepassingen die gericht zijn op eerdere versies van .NET Framework, maar worden uitgevoerd onder versies die beginnen met .NET Framework 4.7.2, is ondersteuning voor Unicode-bidirectionele tekens standaard uitgeschakeld. U kunt dit inschakelen door de volgende AppContextSwitchOverrides-switch toe te voegen aan de <runtime>
sectie van het toepassingsconfiguratiebestand::
<runtime>
<AppContextSwitchOverrides value="Switch.System.Uri.DontKeepUnicodeBidiFormattingCharacters=false" />
</runtime>
Naam | Weergegeven als |
---|---|
Bereik | Secundair |
Versie | 4.7.2 |
Type | Opnieuw targeting |
Betrokken API's
DeflateStream maakt gebruik van systeemeigen API's voor decompressie
DETAILS
Vanaf .NET Framework 4.7.2 is de implementatie van decompressie in de T:System.IO.Compression.DeflateStream
klasse gewijzigd om standaard systeemeigen Windows-API's te gebruiken. Dit resulteert doorgaans in een aanzienlijke prestatieverbetering. Alle .NET-toepassingen die zijn gericht op .NET Framework versie 4.7.2 of hoger, maken gebruik van de systeemeigen implementatie. Deze wijziging kan leiden tot enkele verschillen in gedrag, waaronder:
- Uitzonderingsberichten kunnen afwijken. Het type uitzondering dat is gegenereerd, blijft echter hetzelfde.
- Sommige speciale situaties, zoals onvoldoende geheugen om een bewerking te voltooien, kunnen anders worden verwerkt.
- Er zijn bekende verschillen voor het parseren van gzip-header (opmerking: alleen
GZipStream
ingesteld voor decompressie wordt beïnvloed): - Uitzonderingen bij het parseren van ongeldige headers kunnen op verschillende momenten worden gegenereerd.
- De systeemeigen implementatie dwingt af dat waarden voor sommige gereserveerde vlaggen in de gzip-header (dat wil gezegd FLG) zijn ingesteld op basis van de specificatie, wat ertoe kan leiden dat er een uitzondering wordt gegenereerd waarbij eerder ongeldige waarden werden genegeerd.
Suggestie
Als decompressie met systeemeigen API's het gedrag van uw app nadelig heeft beïnvloed, kunt u zich afmelden voor deze functie door de Switch.System.IO.Compression.DoNotUseNativeZipLibraryForDecompression
switch toe te voegen aan de runtime
sectie van uw app.config-bestand en deze in te stellen op true
:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<runtime>
<AppContextSwitchOverrides value="Switch.System.IO.Compression.DoNotUseNativeZipLibraryForDecompression=true" />
</runtime>
</configuration>
Naam | Weergegeven als |
---|---|
Bereik | Secundair |
Versie | 4.7.2 |
Type | Opnieuw targeting |
Betrokken API's
Zorg ervoor dat System.Uri gebruikmaakt van een consistente gereserveerde tekenset
DETAILS
In System.Urisommige procenten gecodeerde tekens die soms zijn gedecodeerd, worden nu consistent gecodeerd. Dit gebeurt in de eigenschappen en methoden die toegang hebben tot het pad, de query, het fragment of de gebruikersinfo-onderdelen van de URI. Het gedrag wordt alleen gewijzigd wanneer beide van de volgende waar zijn:
- De URI bevat de gecodeerde vorm van een van de volgende gereserveerde tekens:
:
,'
,(
,)
of!
*
. - De URI bevat een Unicode- of gecodeerd niet-gereserveerd teken. Als beide bovenstaande waarden waar zijn, worden de gecodeerde gereserveerde tekens achtergelaten. In eerdere versies van .NET Framework worden ze gedecodeerd.
Suggestie
Voor toepassingen die gericht zijn op versies van .NET Framework vanaf 4.7.2, is het nieuwe decoderingsgedrag standaard ingeschakeld. Als deze wijziging ongewenst is, kunt u deze uitschakelen door de volgende AppContextSwitchOverrides-switch toe te voegen aan de <runtime>
sectie van het toepassingsconfiguratiebestand:
<runtime>
<AppContextSwitchOverrides value="Switch.System.Uri.DontEnableStrictRFC3986ReservedCharacterSets=true" />
</runtime>
Voor toepassingen die gericht zijn op eerdere versies van .NET Framework, maar worden uitgevoerd onder versies die beginnen met .NET Framework 4.7.2, is het nieuwe decoderingsgedrag standaard uitgeschakeld. U kunt dit inschakelen door de volgende AppContextSwitchOverrides-switch toe te voegen aan de <runtime>
sectie van het toepassingsconfiguratiebestand:
<runtime>
<AppContextSwitchOverrides value="Switch.System.Uri.DontEnableStrictRFC3986ReservedCharacterSets=false" />
</runtime>
Naam | Weergegeven als |
---|---|
Bereik | Secundair |
Versie | 4.7.2 |
Type | Opnieuw targeting |
Betrokken API's
Resgen weigert inhoud van het web te laden
DETAILS
.resx-bestanden kunnen binaire indelingsinvoer bevatten. Als u probeert resgen te gebruiken om een bestand te laden dat is gedownload van een niet-vertrouwde locatie, kan de invoer niet standaard worden geladen.
Suggestie
Gebruikers die binair opgemaakte invoer van niet-vertrouwde locaties moeten laden, kunnen de markering van het web verwijderen uit het invoerbestand of de afmelding toepassen. Voeg de volgende registerinstelling toe om de opt-out voor de machine breed toe te passen: [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft.NETFramework\SDK] "AllowProcessOfUntrustedResourceFiles"="true"
Naam | Weergegeven als |
---|---|
Bereik | Edge |
Versie | 4.7.2 |
Type | Opnieuw targeting |
Stacktraceringen die worden verkregen bij het gebruik van draagbare PDBs bevatten nu bronbestands- en regelgegevens, indien aangevraagd
DETAILS
Vanaf .NET Framework 4.7.2 bevatten stacktraceringen die zijn verkregen bij het gebruik van draagbare PDBs bronbestand en regelinformatie wanneer dit wordt aangevraagd. In versies vóór .NET Framework 4.7.2 zijn bronbestands- en regelgegevens niet beschikbaar bij het gebruik van draagbare PDBs, zelfs als dit expliciet wordt aangevraagd.
Suggestie
Voor toepassingen die gericht zijn op .NET Framework 4.7.2, kunt u zich afmelden voor het bronbestand en regelinformatie bij het gebruik van draagbare PDBs als dit niet wenselijk is door het volgende toe te voegen aan de <runtime>
sectie van uw app.config
bestand:
<runtime>
<AppContextSwitchOverrides value="Switch.System.Diagnostics.IgnorePortablePDBsInStackTraces=true" />
</runtime>
Voor toepassingen die gericht zijn op eerdere versies van .NET Framework, maar worden uitgevoerd op .NET Framework 4.7.2 of hoger, kunt u zich aanmelden voor het bronbestand en regelinformatie wanneer u draagbare PDF-bestanden gebruikt door het volgende toe te voegen aan de <runtime>
sectie van uw app.config
bestand:
<runtime>
<AppContextSwitchOverrides value="Switch.System.Diagnostics.IgnorePortablePDBsInStackTraces=false" />
</runtime>
Naam | Weergegeven als |
---|---|
Bereik | Edge |
Versie | 4.7.2 |
Type | Opnieuw targeting |
Betrokken API's
Windows Forms
Toegankelijkheidsverbeteringen in Besturingselementen voor Windows Forms voor .NET 4.7.2
DETAILS
Windows Forms Framework verbetert de werking van toegankelijkheidstechnologieën om klanten van Windows Forms beter te ondersteunen. Dit zijn de volgende wijzigingen:
- Wijzigingen om de weergave tijdens de modus Hoog contrast te verbeteren.
- Wijzigingen in het verbeteren van de toetsenbordnavigatie in de besturingselementen DataGridView en MenuStrip.
- Wijzigingen in interactie met Verteller.
Suggestie
Hoe u deze wijzigingen kunt in- of uitschakelen om ervoor te zorgen dat de toepassing van deze wijzigingen kan profiteren, moet deze worden uitgevoerd op .NET Framework 4.7.2 of hoger. De toepassing kan op een van de volgende manieren profiteren van deze wijzigingen:
- Het wordt opnieuw gecompileerd om het .NET Framework 4.7.2 te targeten. Deze toegankelijkheidswijzigingen zijn standaard ingeschakeld voor Windows Forms-toepassingen die gericht zijn op .NET Framework 4.7.2 of hoger.
- Het is gericht op .NET Framework 4.7.1 of eerdere versie en opt-out van het verouderde toegankelijkheidsgedrag door de volgende AppContext Switch toe te voegen aan de
<runtime>
sectie van het app-configuratiebestand en dit in tefalse
stellen op , zoals in het volgende voorbeeld wordt weergegeven.
<?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>
Als u zich wilt aanmelden voor de toegankelijkheidsfuncties die zijn toegevoegd in .NET Framework 4.7.2, moet u zich ook aanmelden voor toegankelijkheidsfuncties van .NET Framework 4.7.1. Toepassingen die zijn gericht op .NET Framework 4.7.2 of hoger en die het verouderde toegankelijkheidsgedrag willen behouden, kunnen ervoor kiezen om verouderde toegankelijkheidsfuncties te gebruiken door deze AppContext-switch expliciet in te true
stellen op .
Het gebruik van door het besturingssysteem gedefinieerde kleuren in thema's met hoog contrast
- In de vervolgkeuzepijl van het besturingssysteem worden nu door het ToolStripDropDownButton besturingssysteem gedefinieerde kleuren gebruikt in het thema Hoog contrast.
- Buttonen RadioButtonCheckBox besturingselementen die zijn FlatStyle ingesteld op FlatStyle.Flat of FlatStyle.Popup nu gebruikmaken van door het besturingssysteem gedefinieerde kleuren in het thema Hoog contrast wanneer deze optie is geselecteerd. Voorheen waren tekst- en achtergrondkleuren niet contrasterend en waren ze moeilijk te lezen.
- Besturingselementen in een GroupBox object waarop de Enabled eigenschap is ingesteld
false
, gebruiken nu door het besturingssysteem gedefinieerde kleuren in het thema Hoog contrast. - De ToolStripButton, ToolStripComboBoxen ToolStripDropDownButton besturingselementen hebben een verhoogde helderheidscontrastverhouding in de modus Hoog contrast.
- DataGridViewLinkCell maakt standaard gebruik van door het besturingssysteem gedefinieerde kleuren in de modus Hoog contrast voor de DataGridViewLinkCell.LinkColor eigenschap. OPMERKING: Windows 10 heeft waarden gewijzigd voor sommige systeemkleuren met hoog contrast. Windows Forms Framework is gebaseerd op het Win32-framework. Voer voor de beste ervaring de nieuwste versie van Windows uit en meld u aan bij de meest recente wijzigingen in het besturingssysteem door een app.manifest-bestand toe te voegen in een testtoepassing en de volgende code uit te schakelen:
<!-- Windows 10 -->
<supportedOS Id="{8e0f7a12-bfb3-4fe8-b9a5-48fd50a15a9a}" />
Verbeterde ondersteuning voor Verteller
- Verteller kondigt nu de waarde van de ToolStripMenuItem.ShortcutKeys eigenschap aan bij het aankondigen van de tekst van een ToolStripMenuItem.
- Verteller geeft nu aan wanneer de ToolStripMenuItem eigenschap is Enabled ingesteld op
false
. - Verteller geeft nu feedback over de status van een selectievakje wanneer de ListView.CheckBoxes eigenschap is ingesteld op
true
. - De focusvolgorde van de scanmodus van Verteller is nu consistent met de visuele volgorde van de besturingselementen in het dialoogvenster ClickOnce-download.
Verbeterde ondersteuning voor DataGridView-toegankelijkheid
- Rijen in een DataGridView kunnen nu worden gesorteerd met behulp van het toetsenbord. Een gebruiker kan nu de F3-sleutel gebruiken om te sorteren op de huidige kolom.
- Wanneer de DataGridView.SelectionMode kolomkop is ingesteld DataGridViewSelectionMode.FullRowSelectop, wordt de kleur van de kolomkop gewijzigd om de huidige kolom aan te geven als de gebruikerstabbladen door de cellen in de huidige rij.
- De DataGridViewCell.DataGridViewCellAccessibleObject.Parent eigenschap retourneert nu het juiste bovenliggende besturingselement.
Verbeterde visuele aanwijzingen
- De RadioButton besturingselementen CheckBox met een lege Text eigenschap geven nu een focusindicator weer wanneer ze de focus krijgen.
Verbeterde ondersteuning voor Property Grid
De PropertyGrid onderliggende elementen van het IsReadOnlyProperty besturingselement retourneren nu alleen een
true
eigenschap wanneer een PropertyGrid-element is ingeschakeld.De PropertyGrid onderliggende elementen van het IsEnabledProperty besturingselement retourneren nu alleen een
Verbeterde toetsenbordnavigatiefalse
eigenschap als een PropertyGrid-element door de gebruiker kan worden gewijzigd. Zie het overzicht van UI Automation voor een overzicht van UI-automatisering.ToolStripButton staat nu de focus toe wanneer deze zich in een ToolStripPanel bevindt waarop de TabStop eigenschap is ingesteld
true
.
Naam | Weergegeven als |
---|---|
Bereik | Primair |
Versie | 4.7.2 |
Type | Opnieuw targeting |
De eigenschap ContextMenuStrip.SourceControl bevat een geldig besturingselement in het geval van geneste ToolStripMenuItems
DETAILS
In .NET Framework 4.7.1 en eerdere versies retourneert de ContextMenuStrip.SourceControl eigenschap ten onrechte null wanneer de gebruiker het menu opent vanuit geneste ToolStripMenuItem besturingselementen. In .NET Framework 4.7.2 en hoger SourceControl is de eigenschap altijd ingesteld op het werkelijke broncodebeheer.
Suggestie
Hoe u zich kunt aanmelden of afmelden voor deze wijzigingen om een toepassing te laten profiteren van deze wijzigingen, moet deze worden uitgevoerd op .NET Framework 4.7.2 of hoger. De toepassing kan op een van de volgende manieren profiteren van deze wijzigingen:
- Het is gericht op .NET Framework 4.7.2. Deze wijziging is standaard ingeschakeld voor Windows Forms-toepassingen die zijn gericht op .NET Framework 4.7.2 of hoger.
- Het is gericht op .NET Framework 4.7.1 of een eerdere versie en opt-out van het verouderde toegankelijkheidsgedrag door de volgende AppContext Switch toe te voegen aan de
<runtime>
sectie van het app.config-bestand en dit in tefalse
stellen op , zoals in het volgende voorbeeld wordt weergegeven.
<runtime>
<AppContextSwitchOverrides value="Switch.System.Windows.Forms.UseLegacyContextMenuStripSourceControlValue=false"/>
</runtime>
Toepassingen die zijn gericht op .NET Framework 4.7.2 of hoger en die het verouderde gedrag willen behouden, kunnen zich aanmelden voor het gebruik van de verouderde waarde voor broncodebeheer door deze AppContext-switch expliciet in te true
stellen op .
Naam | Weergegeven als |
---|---|
Bereik | Edge |
Versie | 4.7.2 |
Type | Opnieuw targeting |
Betrokken API's
Met de methode PrivateFontCollection.AddFontFile worden lettertyperesources uitgebracht
DETAILS
In .NET Framework 4.7.1 en eerdere versies geeft de System.Drawing.Text.PrivateFontCollection klasse de GDI+ lettertypebronnen niet vrij nadat het PrivateFontCollection is verwijderd voor Font objecten die met behulp van de AddFontFile(String) methode aan deze verzameling worden toegevoegd. In .NET Framework 4.7.2 en hoger Dispose worden de GDI+-lettertypen uitgebracht die als bestanden aan de verzameling zijn toegevoegd.
Suggestie
Hoe u zich kunt aanmelden of afmelden voor deze wijzigingen om een toepassing te laten profiteren van deze wijzigingen, moet deze worden uitgevoerd op .NET Framework 4.7.2 of hoger. De toepassing kan op een van de volgende manieren profiteren van deze wijzigingen:
- Het wordt opnieuw gecompileerd om het .NET Framework 4.7.2 te targeten. Deze wijziging is standaard ingeschakeld voor Windows Forms-toepassingen die zijn gericht op .NET Framework 4.7.2 of hoger.
- Het is gericht op .NET Framework 4.7.1 of een eerdere versie en opt-out van het verouderde toegankelijkheidsgedrag door de volgende AppContext Switch toe te voegen aan de
<runtime>
sectie van het app.config-bestand en dit in tefalse
stellen op , zoals in het volgende voorbeeld wordt weergegeven.
<runtime>
<AppContextSwitchOverrides value="Switch.System.Drawing.Text.DoNotRemoveGdiFontsResourcesFromFontCollection=false"/>
</runtime>
Toepassingen die zijn gericht op .NET Framework 4.7.2 of hoger en die het verouderde gedrag willen behouden, kunnen ervoor kiezen om geen lettertyperesources vrij te geven door deze AppContext-switch expliciet in te true
stellen op .
Naam | Weergegeven als |
---|---|
Bereik | Edge |
Versie | 4.7.2 |
Type | Opnieuw targeting |
Betrokken API's
De acties domein-upbutton en downbutton van WinForm zijn nu gesynchroniseerd
DETAILS
In .NET Framework 4.7.1 en eerdere versies wordt de actie van het DomainUpDown besturingselement genegeerd wanneer tekst van het besturingselement aanwezig is en moet de ontwikkelaar actie op het besturingselement gebruiken voordat de actie wordt gebruikt DomainUpDown.DownButton()DomainUpDown.UpButton().DomainUpDown.UpButton() Vanaf .NET Framework 4.7.2 werken zowel de als de DomainUpDown.UpButton()DomainUpDown.DownButton() acties onafhankelijk in dit scenario en blijven ze gesynchroniseerd.
Suggestie
Als een toepassing van deze wijzigingen kan profiteren, moet deze worden uitgevoerd op .NET Framework 4.7.2 of hoger. De toepassing kan op een van de volgende manieren profiteren van deze wijzigingen:
- Het wordt opnieuw gecompileerd om het .NET Framework 4.7.2 te targeten. Deze wijziging is standaard ingeschakeld voor Windows Forms-toepassingen die zijn gericht op .NET Framework 4.7.2 of hoger.
- Het opt-out van het verouderde schuifgedrag door de volgende AppContext Switch toe te voegen aan de
<runtime>
sectie van het app-configuratiebestand en dit in tefalse
stellen op , zoals in het volgende voorbeeld wordt weergegeven.
<runtime>
<AppContextSwitchOverrides value="Switch.System.Windows.Forms.DomainUpDown.UseLegacyScrolling=false"/>
</runtime>
Naam | Weergegeven als |
---|---|
Bereik | Edge |
Versie | 4.7.2 |
Type | Opnieuw targeting |
Betrokken API's
Windows Presentation Foundation (WPF)
De focus van het toetsenbord wordt nu correct verplaatst over meerdere lagen van WinForms/WPF-hosting
DETAILS
Overweeg een WPF-toepassing die als host fungeert voor een WinForms-besturingselement dat op zijn beurt WPF-besturingselementen host. Gebruikers kunnen mogelijk geen tabs uitvoeren op de WinForms-laag als het eerste of laatste besturingselement in die laag de WPF System.Windows.Forms.Integration.ElementHost
is. Met deze wijziging wordt dit probleem opgelost en kunnen gebruikers nu een tab uitvoeren op de WinForms-laag. Geautomatiseerde toepassingen die afhankelijk zijn van focus, werken mogelijk niet meer zoals verwacht in de WinForms-laag.
Suggestie
Een ontwikkelaar die deze wijziging wil gebruiken terwijl deze is gericht op een frameworkversie die lager is dan .NET 4.7.2, kan de volgende set AppContext-vlaggen instellen op false om de wijziging in te schakelen.
<configuration>
<runtime>
<AppContextSwitchOverrides value="Switch.UseLegacyAccessibilityFeatures=false;Switch.UseLegacyAccessibilityFeatures.2=false"/>
</runtime>
</configuration>
WPF-toepassingen moeten zich aanmelden voor alle verbeteringen in de vroege toegankelijkheid om de latere verbeteringen te verkrijgen. Met andere woorden, zowel de Switch.UseLegacyAccessibilityFeatures
als de Switch.UseLegacyAccessibilityFeatures.2
switches moeten zijn ingesteld op een ontwikkelaar die de vorige functionaliteit vereist, terwijl het doel .NET 4.7.2 of hoger is, kan de volgende AppContext-vlag instellen op waar voor de wijziging die moet worden uitgeschakeld.
<configuration>
<runtime>
<AppContextSwitchOverrides value="Switch.UseLegacyAccessibilityFeatures.2=true"/>
</runtime>
</configuration>
Naam | Weergegeven als |
---|---|
Bereik | Edge |
Versie | 4.7.2 |
Type | Opnieuw targeting |
Het standaardhashalgoritme voor de Markup Compiler van WPF is nu SHA256
DETAILS
De WPF MarkupCompiler biedt compilatieservices voor XAML-markeringsbestanden. In .NET Framework 4.7.1 en eerdere versies was SHA1 het standaard-hashalgoritme dat wordt gebruikt voor controlesommen. Vanwege recente beveiligingsproblemen met SHA1 is deze standaardwaarde gewijzigd in SHA256 vanaf .NET Framework 4.7.2. Deze wijziging is van invloed op alle controlesomgeneratie voor markeringsbestanden tijdens de compilatie.
Suggestie
Een ontwikkelaar die zich richt op .NET Framework 4.7.2 of hoger en die wil terugkeren naar sha1-hashinggedrag, moet de volgende AppContext-vlag instellen.
<configuration>
<runtime>
<AppContextSwitchOverrides value="Switch.System.Windows.Markup.DoNotUseSha256ForMarkupCompilerChecksumAlgorithm=true"/>
</runtime>
</configuration>
Een ontwikkelaar die SHA256-hashing wil gebruiken terwijl deze is gericht op een frameworkversie onder .NET 4.7.2, moet de onderstaande AppContext-vlag instellen. Houd er rekening mee dat de geïnstalleerde versie van .NET Framework 4.7.2 of hoger moet zijn.
<configuration>
<runtime>
<AppContextSwitchOverrides value="Switch.System.Windows.Markup.DoNotUseSha256ForMarkupCompilerChecksumAlgorithm=false"/>
</runtime>
</configuration>
Naam | Weergegeven als |
---|---|
Bereik | Transparant |
Versie | 4.7.2 |
Type | Opnieuw targeting |
WPF AppDomain Shutdown Handling May Now Call Dispatcher.Invoke in Cleanup of Weak Events
DETAILS
In .NET Framework 4.7.1 en eerdere versies maakt WPF mogelijk een System.Windows.Threading.Dispatcher op de .NET finalizer-thread tijdens het afsluiten van AppDomain. Dit is opgelost in .NET Framework 4.7.2 en latere versies door het opschonen van zwakke gebeurtenissen threadbewust. Als gevolg hiervan kan WPF aanroepen Dispatcher.Invoke om het opschoonproces te voltooien. In bepaalde toepassingen kan deze wijziging in de timing van de finalizer mogelijk uitzonderingen veroorzaken tijdens het afsluiten van AppDomain of proces. Dit wordt over het algemeen gezien in toepassingen die dispatchers die worden uitgevoerd op werkthreads niet correct afsluiten vóór het proces of het afsluiten van AppDomain. Dergelijke toepassingen moeten ervoor zorgen dat de levensduur van dispatchers goed wordt beheerd.
Suggestie
In .NET Framework 4.7.2 en latere versies kunnen ontwikkelaars deze oplossing uitschakelen om tijdsproblemen die kunnen optreden als gevolg van de opschoonwijziging, te helpen verlichten (maar niet elimineren). Gebruik de volgende AppContext-vlag om de wijziging in opschoning uit te schakelen.
<configuration>
<runtime>
<AppContextSwitchOverrides value="Switch.MS.Internal.DoNotInvokeInWeakEventTableShutdownListener=true"/>
</runtime>
</configuration>
Naam | Weergegeven als |
---|---|
Bereik | Edge |
Versie | 4.7.2 |
Type | Opnieuw targeting |
WPF: een primaire sleutel wijzigen bij het weergeven van ADO-gegevens in een master-/detailscenario
DETAILS
Stel dat u een ADO-verzameling items van het type Order
hebt, met een relatie met de naam 'OrderDetails' die betrekking heeft op een verzameling items van het type Detail
via de primaire sleutel 'OrderID'. In uw WPF-app kunt u een lijstbesturingselement binden aan de details voor een bepaalde bestelling:
<ListBox ItemsSource="{Binding Path=OrderDetails}" >
waarbij de DataContext een Order
. WPF haalt de waarde van de OrderDetails
eigenschap op: een verzameling D van alle Detail
items waarvan OrderID
het overeenkomt met het OrderID
hoofditem. De gedragswijziging ontstaat wanneer u de primaire sleutel OrderID
van het hoofditem wijzigt. ADO wijzigt automatisch de OrderID
gegevens van elk van de betrokken records in de verzameling Details (namelijk de records die naar verzameling D zijn gekopieerd). Maar wat gebeurt er met D?
- Oud gedrag: Verzameling D is gewist. Het hoofditem genereert geen wijzigingsmelding voor de eigenschap
OrderDetails
. De keuzelijst blijft verzameling D gebruiken, die nu leeg is. - Nieuw gedrag: Verzameling D is ongewijzigd. Elk van de items genereert een wijzigingsmelding voor de
OrderID
eigenschap. De keuzelijst blijft verzameling D gebruiken en geeft de details weer met de nieuweOrderID
. WPF implementeert het nieuwe gedrag door verzameling D op een andere manier te maken: door de ADO-methode DataRowView.CreateChildView(DataRelation, Boolean) aan te roepen met hetfollowParent
argument ingesteld optrue
.
Suggestie
Een app krijgt het nieuwe gedrag met behulp van de volgende AppContext-switch.
<configuration>
<runtime>
<AppContextSwitchOverrides value="Switch.System.Windows.Data.DoNotUseFollowParentWhenBindingToADODataRelation=false"/>
</runtime>
</configuration>
De schakeloptie wordt true
standaard ingesteld op (oud gedrag) voor apps die zijn gericht op .NET 4.7.1 of lager, en op false
(nieuw gedrag) voor apps die zijn gericht op .NET 4.7.2 of hoger.
Naam | Weergegeven als |
---|---|
Bereik | Secundair |
Versie | 4.7.2 |
Type | Opnieuw targeting |
WPF FocusVisual voor RadioButton en selectievakje wordt nu correct weergegeven wanneer de besturingselementen geen inhoud hebben
DETAILS
In .NET Framework 4.7.1 en eerdere versies hebben WPF System.Windows.Controls.CheckBox inconsistente en System.Windows.Controls.RadioButton , in klassieke en hoog contrastthema's, onjuiste focusvisuals. Deze problemen treden op in gevallen waarin de besturingselementen geen inhoudsset hebben. Hierdoor kan de overgang tussen thema's verwarrend zijn en de focusvisual moeilijk te zien is. In .NET Framework 4.7.2 zijn deze visuals nu consistenter voor thema's en gemakkelijker zichtbaar in klassieke en hoog contrastthema's.
Suggestie
Een ontwikkelaar die is gericht op .NET Framework 4.7.2 die het gedrag in .NET 4.7.1 wil herstellen, moet de volgende AppContext-vlag instellen.
<configuration>
<runtime>
<AppContextSwitchOverrides value="Switch.UseLegacyAccessibilityFeatures.2=true;"/>
</runtime>
</configuration>
Een ontwikkelaar die deze wijziging wil gebruiken terwijl deze is gericht op een frameworkversie die lager is dan .NET 4.7.2, moet de volgende AppContext-vlaggen instellen. Houd er rekening mee dat alle vlaggen op de juiste wijze moeten worden ingesteld en dat de geïnstalleerde versie van .NET Framework 4.7.2 of hoger moet zijn. WPF-toepassingen moeten zich aanmelden voor alle eerdere toegankelijkheidsverbeteringen om de nieuwste verbeteringen te verkrijgen. Om dit te doen, moet u ervoor zorgen dat zowel de AppContext-schakeloptie Switch.UseLegacyAccessibilityFeatures' als 'Switch.UseLegacyAccessibilityFeatures.2' is ingesteld op false.
<configuration>
<runtime>
<AppContextSwitchOverrides value="Switch.UseLegacyAccessibilityFeatures=false;Switch.UseLegacyAccessibilityFeatures.2=false;"/>
</runtime>
</configuration>
Naam | Weergegeven als |
---|---|
Bereik | Edge |
Versie | 4.7.2 |
Type | Opnieuw targeting |
Tekstselectie WPF-tekstvak/wachtwoordvak volgt geen systeemkleuren
DETAILS
In .NET Framework 4.7.1 en eerdere versies kon WPF System.Windows.Controls.TextBox
alleen System.Windows.Controls.PasswordBox
een tekstselectie weergeven in de versieringslaag. In sommige systeemthema's zou dit tekst bevatten, waardoor het moeilijk te lezen is. In .NET Framework 4.7.2 en hoger hebben ontwikkelaars de mogelijkheid om een selectierenderingsschema op basis van niet-Versier in te schakelen waarmee dit probleem wordt verholpen.
Suggestie
Een ontwikkelaar die deze wijziging wil gebruiken, moet de volgende AppContext-vlag op de juiste manier instellen. Als u deze functie wilt gebruiken, moet de geïnstalleerde .NET Framework-versie 4.7.2 of hoger zijn. Als u de niet-sierlijke selectie wilt inschakelen, gebruikt u de volgende AppContext-vlag.
<configuration>
<runtime>
<AppContextSwitchOverrides value="Switch.System.Windows.Controls.Text.UseAdornerForTextboxSelectionRendering=false"/>
</runtime>
</configuration>
Naam | Weergegeven als |
---|---|
Bereik | Edge |
Versie | 4.7.2 |
Type | Opnieuw targeting |
Windows Workflow Foundation (WF)
Eindeloze recursie voor IWorkflowInstanceManagement.TransactedCancel en IWorkflowInstanceManagement.TransactedTerminate vermijden
DETAILS
Onder bepaalde omstandigheden wanneer u IWorkflowInstanceManagement.TransactedCancel een werkstroomservice-exemplaar wilt annuleren of IWorkflowInstanceManagement.TransactedTerminate beëindigen, kan het werkstroomexemplaren een stack-overloop tegenkomen als gevolg van eindeloze recursie wanneer de runtime probeert Workflow
het service-exemplaar te behouden als onderdeel van het verwerken van de aanvraag. Het probleem treedt op als het werkstroomexemplaren zich in een status bevinden waarin wordt gewacht tot een andere openstaande WCF-aanvraag naar een andere service is voltooid. Met de TransactedCancel
bewerkingen TransactedTerminate
worden werkitems gemaakt die in de wachtrij staan voor het werkstroomservice-exemplaar. Deze werkitems worden niet uitgevoerd als onderdeel van de verwerking van de TransactedCancel/TransactedTerminate
aanvraag. Omdat het exemplaar van de werkstroomservice bezig is met wachten tot de andere openstaande WCF-aanvraag is voltooid, blijft het gemaakte werkitem in de wachtrij. De TransactedCancel/TransactedTerminate
bewerking wordt voltooid en het besturingselement wordt teruggezet naar de client. Wanneer de transactie die is gekoppeld aan de TransactedCancel/TransactedTerminate
bewerking probeert door te voeren, moet deze de status van het exemplaar van de werkstroomservice behouden. Maar omdat er een openstaande WCF
aanvraag voor het exemplaar is, kan de werkstroomruntime het exemplaar van de werkstroomservice niet persistent maken en leidt een eindeloze recursielus naar de stack-overloop. Omdat TransactedCancel
en TransactedTerminate
alleen een werkitem in het geheugen maakt, heeft het feit dat er een transactie bestaat geen effect. Een terugdraaiactie van de transactie negeert het werkitem niet. Om dit probleem op te lossen, hebben we vanaf .NET Framework 4.7.2 een AppSetting
toegevoegd die kan worden toegevoegd aan de web.config/app.config
werkstroomservice waarmee wordt aangegeven dat transacties voor TransactedCancel
en TransactedTerminate
worden genegeerd. Hierdoor kan de transactie worden doorgevoerd zonder te wachten tot het werkstroomexemplaren zich blijft voordoen. De AppSetting voor deze functie heeft de naam microsoft:WorkflowServices:IgnoreTransactionsForTransactedCancelAndTransactedTerminate
. Een waarde van true
geeft aan dat de transactie moet worden genegeerd, waardoor de stack-overloop wordt vermeden. De standaardwaarde van deze AppSetting is false
, zodat bestaande werkstroomservice-exemplaren niet worden beïnvloed.
Suggestie
Als u AppFabric of een andere IWorkflowInstanceManagement client gebruikt en een stack-overloop in het werkstroomservice-exemplaar tegenkomt wanneer u een werkstroomexemplaren probeert te annuleren of beëindigen, kunt u het volgende toevoegen aan de <appSettings>
sectie van het bestand web.config/app.config voor de werkstroomservice:
<add key="microsoft:WorkflowServices:IgnoreTransactionsForTransactedCancelAndTransactedTerminate" value="true"/>
Als u het probleem niet tegenkomt, hoeft u dit niet te doen.
Naam | Weergegeven als |
---|---|
Bereik | Edge |
Versie | 4.7.2 |
Type | Opnieuw targeting |