Delen via


Wijzigingen in retargeting voor migratie naar .NET Framework 4.7.x

Dit artikel bevat de compatibiliteitsproblemen met apps die zijn geïntroduceerd in .NET Framework 4.7, 4.7.1en 4.7.2.

.NET Framework 4.7

ASP.NET

HttpRuntime.AppDomainAppPath genereert een NullReferenceException

Bijzonderheden

In .NET Framework 4.6.2 genereert de runtime een T:System.NullReferenceException bij het ophalen van een P:System.Web.HttpRuntime.AppDomainAppPath waarde die null-tekens bevat. 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:

  • Verwerk de T:System.NullReferenceException als uw 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.ArgumentNullExceptionwordt gegooid.
Naam Waarde
Draagwijdte Rand
Versie 4.6.2
Type Opnieuw targeting

Getroffen API's

Gelijktijdige aanvragen per sessie beperken

Bijzonderheden

In de .NET Framework 4.6.2 en eerder, voert ASP.NET aanvragen met dezelfde Sessionid in volgorde uit, en geeft 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 Waarde
Draagwijdte Rand
Versie 4.7
Type Opnieuw targeting

Netwerken

De standaardwaarde van ServicePointManager.SecurityProtocol is SecurityProtocolType.System.Default

Bijzonderheden

Vanaf apps die gericht zijn op .NET Framework 4.7, wordt de standaardwaarde van de eigenschap ServicePointManager.SecurityProtocolSecurityProtocolType.SystemDefault. 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 meer 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 eigenschap ServicePointManager.SecurityProtocol afhankelijk van de versie van het doel .NET Framework. Zie de sectie Netwerken van Retargeting Changes for Migration van .NET Framework 4.5.2 naar 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 systeemstandaard, kunt u de waarde van de eigenschap ServicePointManager.SecurityProtocol expliciet instellen. Als deze wijziging ongewenst is, kunt u zich afmelden door een configuratie-instelling toe te voegen aan de sectie <runtime> van uw toepassingsconfiguratiebestand. In het volgende voorbeeld ziet u zowel de <runtime>-sectie als de Switch.System.Net.DontEnableSystemDefaultTlsVersions opt-outschakelaar:

<runtime>
  <AppContextSwitchOverrides value="Switch.System.Net.DontEnableSystemDefaultTlsVersions=true" />
</runtime>
Naam Waarde
Draagwijdte Minderjarige
Versie 4.7
Type Opnieuw targeting

Getroffen API's

SslStream ondersteunt TLS-waarschuwingen

Bijzonderheden

Na een mislukte TLS-handshake wordt een System.IO.IOException met een interne System.ComponentModel.Win32Exception uitzondering gegenereerd tijdens de eerste lees/schrijf I/O-bewerking. De System.ComponentModel.Win32Exception.NativeErrorCode-code voor de System.ComponentModel.Win32Exception 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 Foutwaarschuwingenvoor 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 IOException of System.TimeoutExceptionverwerken.
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 op false om 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 Waarde
Draagwijdte Rand
Versie 4.7
Type Opnieuw targeting

Beïnvloede API's

Veiligheid

CspParameters.ParentWindowHandle verwacht nu HWND-waarde

Bijzonderheden

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 prompt of toestemmingsdialoogvenster) wordt geopend als een modaal onderliggend element in het opgegeven venster. Vanaf apps die gericht zijn op .NET Framework 4.7, kan een Windows Forms-toepassing de eigenschap ParentWindowHandle instellen met code zoals hieronder:

cspParameters.ParentWindowHandle = form.Handle;

In eerdere versies van .NET Framework zou de waarde naar verwachting een System.IntPtr zijn die een locatie in het geheugen vertegenwoordigt waarin de HWND--waarde zich bevond. Stel de eigenschap in op formulier.Handle 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, kunnen zich afmelden voor de gedragswijziging door de AppContext-switch in te stellen Switch.System.Security.Cryptography.DoNotAddrOfCspParentWindowHandle op true:

  • Door compat-switches programmatisch in te stellen op de AppContext, zoals hier uitgelegd wordt .
  • Door de volgende regel toe te voegen aan de sectie <runtime> van het app.config-bestand:
<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 instellen op false.

Naam Waarde
Draagwijdte Minderjarige
Versie 4.7
Type Opnieuw targeting

Betrokken API's

SslStream ondersteunt TLS-waarschuwingen

Bijzonderheden

Na een mislukte TLS-handshake wordt een System.IO.IOException met een interne System.ComponentModel.Win32Exception uitzondering gegenereerd door de eerste I/O-bewerking voor lezen/schrijven. De System.ComponentModel.Win32Exception.NativeErrorCode-code voor de System.ComponentModel.Win32Exception 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 Foutwaarschuwingenvoor 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 IOException of System.TimeoutExceptionverwerken.
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 op false om 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 Waarde
Draagwijdte Rand
Versie 4.7
Type Opnieuw targeting

Betrokken API's

Windows Communication Foundation (WCF)

Serialisatie van besturingstekens met DataContractJsonSerializer is nu compatibel met ECMAScript V6 en V8

Bijzonderheden

In .NET Framework 4.6.2 en eerdere versies heeft de System.Runtime.Serialization.Json.DataContractJsonSerializer bepaalde 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 sectie <runtime> van het app.config- of web.config-bestand:

<runtime>
  <AppContextSwitchOverrides value="Switch.System.Runtime.Serialization.DoNotUseECMAScriptV6EscapeControlCharacter=false" />
</runtime>
Naam Waarde
Draagwijdte Rand
Versie 4.7
Type Hergericht adverteren

Getroffen API's

WCF-berichtbeveiliging kan nu TLS1.1 en TLS1.2 gebruiken

Bijzonderheden

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 sectie <runtime> van het app.config- of web.config-bestand:

<runtime>
<AppContextSwitchOverrides value="Switch.System.ServiceModel.DisableUsingServicePointManagerSecurityProtocols=false;Switch.System.Net.DontEnableSchUseStrongCrypto=false" />
</runtime>
Naam Waarde
Draagwijdte Rand
Versie 4.7
Soort Opnieuw targeting

Windows Presentation Foundation (WPF)

Oproepen van System.Windows.Input.PenContext.Disable op systemen met aanraakfunctionaliteit kan een ArgumentException genereren.

Bijzonderheden

In sommige omstandigheden kan het aanroepen van de interne System.Windows.Input.PenContext.Disable Methode op systemen met aanraakbediening een onverwerkte T:System.ArgumentException veroorzaken door re-entrant gedrag.

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 Waarde
Draagwijdte Rand
Versie 4.6.1
Type Opnieuw targeting

NullReferenceException in uitzonderingsafhandelingscode van ImageSourceConverter.ConvertFrom

Bijzonderheden

Een fout in de uitzonderingsafhandelingscode voor ConvertFrom(ITypeDescriptorContext, CultureInfo, Object) heeft een onjuiste System.NullReferenceException veroorzaakt 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 zullen alle toepassingen die zijn gericht op .NET Framework 4.6.2 en eerder System.NullReferenceException blijven genereren voor compatibiliteitsdoeleinden. Ontwikkelaars die zich richten op .NET Framework 4.7 en hoger, moeten de juiste uitzonderingen zien.

Suggestie

Ontwikkelaars die willen terugkeren naar System.NullReferenceException bij het richten 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 Waarde
Draagwijdte Rand
Versie 4.7
Soort Opnieuw targeting

Beïnvloede API's

WPF-rastertoewijzing van ruimte aan sterkolommen

Bijzonderheden

Vanaf .NET Framework 4.7 vervangt WPF het algoritme dat Grid 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, kan dit leiden tot instabiliteit van zwevende-komma, zoals overloop, onderloop, of 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 tekortschieten voor de breedte van het raster. Dit is het tweede probleem voor #1, dat ontstaat bij het toewijzen aan een kolom waarvan het proportionele aandeel groter is dan de maximale grootte, zonder dat er *-kolommen overblijven om het tekort op te vangen.

  • 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 een oneindig gewicht worden niet correct verwerkt. (Eigenlijk kunt u een gewicht niet instellen op Infinity, maar dit is een kunstmatige beperking. De toewijzingscode probeerde dit te verwerken, maar deed dat slecht.)

  • 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 een voldoende hoge DPI-waarde. 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 'proportionele' *-kolommen is gelijk aan de ruimte die overblijft 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 het oude algoritme selecteert, false het nieuwe algoritme selecteert.

Naam Waarde
Draagwijdte Minderjarige
Versie 4.7
Type Opnieuw targeting

WPF Pointer-Based Touch Stack

Bijzonderheden

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 digitale inkting.
  • 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 en neerzetten kan niet meer gestart worden bij aanraak- of 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 App.config-bestand 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 in Windows 10 Creators Update en hoger.

Naam Waarde
Draagwijdte Edge
Versie 4.7
Soort Opnieuw targeting

Windows Workflow Foundation (WF)

Werkstroomcontrolesommen zijn gewijzigd van MD5 in SHA1

Bijzonderheden

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 workflow-checksum-hashing het MD5-algoritme, wat problemen veroorzaakte op systemen met FIPS ingeschakeld. 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, stel dan de AppContext switch "Switch.System.Activities.UseMD5ForWFDebugger" in op true. In de code:

System.AppContext.SetSwitch("Switch.System.Activities.UseMD5ForWFDebugger", true);

Of in de configuratie:

<configuration>
  <runtime>
    <AppContextSwitchOverrides value="Switch.System.Activities.UseMD5ForWFDebugger=true" />
  </runtime>
</configuration>
Naam Waarde
Draagwijdte Minderjarige
Versie 4.7
Type Opnieuw targeting

.NET Framework 4.7.1

ASP.NET

ASP.NET Toegankelijkheidsverbeteringen in .NET Framework 4.7.1

Bijzonderheden

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 de implementatie van ontbrekende UI-toegankelijkheidspatronen binnen besturingselementen, zoals het dialoogvenster 'Veld toevoegen' in de wizard 'Detailsweergave' of het dialoogvenster 'ListView configureren' van de wizard 'ListView'.
  • Wijzigingen om de weergave te verbeteren in de modus 'Hoog Contrast', zoals de editor voor gegevenspaginavelden.
  • Wijzigingen om de toetsenbordnavigatie-ervaring voor besturingselementen te verbeteren, zoals het Velden-dialoogvenster in de wizard Velden bewerken van het DataPager-besturingselement, het dialoogvenster ObjectContext configureren of het dialoogvenster Gegevensselectie configureren van de wizard Gegevensbron configureren.

Suggestie

Hoe u zich kunt aanmelden of afmelden voor deze wijzigingen Om Visual Studio Designer te kunnen 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 sectie <runtime> in het devenv.exe.config-bestand en dit in te stellen op false, 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 gericht zijn 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 stellen op true.

Naam Waarde
Draagwijdte Minderjarige
Versie 4.7.1
Type Opnieuw targeting

Kern

Uitzonderingen voor SerialPort-achtergrondthread-excepties

Bijzonderheden

Achtergrondthreads die zijn gemaakt met SerialPort streams beëindigen het proces niet meer wanneer 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 gericht zijn 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 sectie <runtime> 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 sectie <runtime> van uw app.config-bestand:

<runtime>
  <AppContextSwitchOverrides value="Switch.System.IO.Ports.DoNotCatchSerialStreamThreadExceptions=false" />
</runtime>
Naam Waarde
Draagwijdte Minderjarige
Versie 4.7.1
Type Opnieuw targeting

Getroffen API's

ServiceBase geeft geen OnStart-uitzonderingen door

Bijzonderheden

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 zijn gericht op .NET Framework 4.7.1, worden uitzonderingen door de runtime doorgegeven aan ServiceBase.Run voor 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 sectie runtime 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 sectie runtime van uw toepassingsconfiguratiebestand:

<AppContextSwitchOverrides value="Switch.System.ServiceProcess.DontThrowExceptionsOnStart=false" />
Naam Waarde
Draagwijdte Minderjarige
Versie 4.7.1
Type Opnieuw targeting

Getroffen API's

Veiligheid

Standaardalgoritmen SignedXML en SignedXMS zijn gewijzigd in SHA256

Bijzonderheden

In .NET Framework 4.7 en eerder zijn SignedXML en SignedCMS standaard ingesteld op 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 applicaties die gericht zijn op het .NET Framework 4.7.1 en latere versies, als het gebruik van SHA256 ongewenst is, kunt u de standaardinstelling terugzetten naar SHA1 door de volgende configuratieschakelaar toe te voegen aan de runtime sectie van uw app-configuratiebestand:
<AppContextSwitchOverrides value="Switch.System.Security.Cryptography.Xml.UseInsecureHashAlgorithms=true;Switch.System.Security.Cryptography.Pkcs.UseInsecureHashAlgorithms=true" />

Voor toepassingen die zijn gericht op .NET Framework 4.7 en eerdere versies, kunt u zich voor deze wijziging aanmelden door de volgende configuratieswitch toe te voegen aan de runtime- sectie van uw app-configuratiebestand:

<AppContextSwitchOverrides value="Switch.System.Security.Cryptography.Xml.UseInsecureHashAlgorithms=false;Switch.System.Security.Cryptography.Pkcs.UseInsecureHashAlgorithms=false" />
Naam Waarde
Draagwijdte Minderjarige
Versie 4.7.1
Soort Opnieuw targeting

Beïnvloede API's

SignedXml.GetPublicKey retourneert RSACng op net462 (of lightup) zonder retargetingwijziging.

Bijzonderheden

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 in een Cng-implementatie. Dit komt doordat de implementatie is gewijzigd van het gebruik van certificate.PublicKey.Key in 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 sectie runtime van uw app-configuratiebestand:

<AppContextSwitchOverrides value="Switch.System.Security.Cryptography.Xml.SignedXmlUseLegacyCertificatePrivateKey=true" />
Naam Waarde
Draagwijdte Rand
Versie 4.6.2
Type Opnieuw targeting

Getroffen API's

Windows Communication Foundation (WCF)

Verbeterde toegankelijkheid voor sommige .NET SDK-hulpprogramma's

Bijzonderheden

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 aan uw app.config-bestand toevoegen:

<runtime>
  <AppContextSwitchOverrides value="Switch.UseLegacyAccessibilityFeatures=false"/>
</runtime>
Naam Waarde
Draagwijdte Rand
Versie 4.7.1
Type Heroriënteren

Windows Forms

Toegankelijkheidsverbeteringen in Besturingselementen voor Windows Forms

Bijzonderheden

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 eigenschappen-browser te verbeteren. Verbeteringen in de eigenschappenbrowser zijn onder andere het volgende:
  • Betere navigatie met het toetsenbord door de verschillende selectievensters van de vervolgkeuzelijsten.
  • Minder onnodige tabstops.
  • Betere rapportage van controletypen.
  • Verbeterd vertellergedrag.
  • Wijzigingen om ontbrekende toegankelijkheidspatronen voor de gebruikersinterface in besturingselementen te implementeren.

Suggestie

Hoe u zich kunt afmelden voor deze wijzigingen Om ervoor te zorgen dat de toepassing gebruik kan maken van deze wijzigingen, 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 sluit zichzelf uit van het verouderde toegankelijkheidsgedrag door de volgende AppContext-switch toe te voegen aan de sectie <runtime> van het app.config-bestand en deze te configureren als false, zoals in het volgende voorbeeld.
<?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 gericht zijn 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 stellen op true.

Voor een overzicht van UI-automatisering, zie de UI Automation Overview.

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 gebruiken vanuit een clientvoor 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:

Het gebruik van door het besturingssysteem gedefinieerde kleuren in thema's met hoog contrast

  • De controls Button en CheckBox, waarop de eigenschap FlatStyle is ingesteld op FlatStyle.System, wat de standaardstijl is, gebruiken nu door het besturingssysteem gedefinieerde kleuren in het door het besturingssysteem bepaalde thema Hoog contrast wanneer geselecteerd. Voorheen waren tekst- en achtergrondkleuren niet contrasterend en waren ze moeilijk te lezen.
  • De besturingselementen Button, CheckBox, RadioButton, Label, LinkLabelen GroupBox met de eigenschap Enabled ingesteld op niet waar gebruikten een gearceerde kleur om tekst weer te geven in thema's met hoog contrast, wat leidde tot een laag contrast ten opzichte van de achtergrond. Deze besturingselementen maken nu gebruik van de kleur "Uitgeschakelde tekst", zoals gedefinieerd door het besturingssysteem. Deze oplossing is van toepassing op besturingselementen waarbij de eigenschap FlatStyle is ingesteld op een andere waarde dan FlatStyle.System. Deze 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 eigenschap Enabled is ingesteld op onwaar gebruikt nu de kleur Uitgeschakelde tekst die is gedefinieerd door het besturingssysteem.
  • ToolStripMenuItem besturingselementen met de eigenschap Checked ingesteld op waar wordt nu het bijbehorende vinkje weergegeven 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 een ComboBox besturingselement de eigenschap DropDownStyle heeft ingesteld op ComboBoxStyle.DropDownList en het eerste besturingselement in de tabvolgorde van het formulier is, wordt er 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 verteller-ondersteuning

  • 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 besturingselement CheckedListBox meldt Verteller nu wanneer een CheckBox.CheckState eigenschap is gewijzigd. Eerder kreeg Verteller geen melding en als gevolg hiervan zouden gebruikers niet worden geïnformeerd dat de eigenschap CheckState is bijgewerkt.

  • Het besturingselement LinkLabel heeft de manier gewijzigd waarop het Verteller op de hoogte stelt van de tekst binnen het besturingselement. 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 onnodige "&" symbolen.

  • De DataGridViewCell controletypen 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 ToolStripMenuItem besturingselementen lezen met een ToolStripItem.Enabled eigenschap ingesteld op onwaar . Eerder kon Verteller zich niet richten op uitgeschakelde menu-items om de inhoud te lezen.

Naam Waarde
Draagwijdte Majoor
Versie 4.8
Type Opnieuw targeting

Getroffen API's

Windows Presentation Foundation (WPF)

Toegankelijkheidsverbeteringen in WPF

Bijzonderheden

Verbeteringen voor hoogcontrast

  • De focus voor het besturingselement Expander 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 is nu dezelfde kleur als de uitgeschakelde tekst. In eerdere versies van .NET Framework was dat niet het geval.
  • Uitgeschakelde en gerichte knoppen gebruiken nu de juiste themakleur. In eerdere versies van .NET Framework hebben ze dat niet gedaan.
  • De dropdownknop is nu zichtbaar wanneer de stijl van een ComboBox controle is ingesteld op ToolBar.ComboBoxStyleKey. In eerdere versies van het .NET Framework was dit niet mogelijk.
  • De sorteerindicatorpijl in een DataGrid controle gebruikt nu themakleuren. In eerdere versies van .NET Framework is dit niet gelukt.
  • De standaard hyperlinkstijl verandert nu naar de juiste themakleur als u er met de muis overheen gaat. In eerdere versies van .NET Framework is dit niet gelukt.
  • De toetsenbordfocus op keuzerondjes is nu zichtbaar. In eerdere versies van het .NET Framework was deze functionaliteit niet beschikbaar.
  • De selectievakjeskolom van besturingselement DataGrid gebruikt nu de verwachte kleuren voor toetsenbordfocusterugkoppeling. In eerdere versies van .NET Framework is dit niet gelukt.
  • De focus-indicatoren van het toetsenbord zijn nu zichtbaar op ComboBox en ListBox besturingselementen. In eerdere versies van de .NET Framework was het niet mogelijk.

Verbeteringen in de interactie van schermlezers

  • Expander bedieningselementen worden nu correct als groepen (uitvouwen/samenvouwen) aangekondigd door schermlezers.
  • DataGridCell besturingselementen worden nu correct als gegevenscel in een raster (gelokaliseerd) aangekondigd door schermlezers.
  • Schermlezers zullen nu de naam van een bewerkbare ComboBoxaankondigen.
  • PasswordBox besturingselementen worden niet langer als 'geen item in zicht' aangekondigd 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

Deze wijzigingen 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:

  • Richt je op .NET Framework 4.7.1. Dit is de aanbevolen aanpak. Deze toegankelijkheidswijzigingen zijn standaard ingeschakeld voor WPF-toepassingen die zijn gericht op .NET Framework 4.7.1 of hoger.

  • Er wordt afgezien van het verouderde toegankelijkheidsgedrag door de volgende AppContext Switch toe te voegen in de sectie <runtime> van het app-configuratiebestand en deze in te stellen op false, 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 zich richten 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 stellen op true. Zie Overzicht van UI Automationvoor een overzicht van UI-automatisering.

Naam Waarde
Draagwijdte Majoor
Versie 4.7.1
Typ Opnieuw targeting

Beïnvloede API's

Selector SelectionChanged-gebeurtenis en eigenschap SelectedValue

Bijzonderheden

Vanaf .NET Framework 4.7.1 werkt een Selector altijd de waarde van de eigenschap SelectedValue bij voordat de SelectionChanged gebeurtenis wordt opgeroepen wanneer de selectie verandert. 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 eigenschap SelectedValue.

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 sectie <runtime> 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 sectie <runtime> van het configuratiebestand van de toepassing:

<runtime>
<AppContextSwitchOverrides value="Switch.System.Windows.Controls.TabControl.SelectionPropertiesCanLagBehindSelectionChangedEvent=false" />
</runtime>
Naam Waarde
Draagwijdte Minderjarige
Versie 4.7.1
Type Opnieuw targeting

Beïnvloede API's

TabControl SelectionChanged-gebeurtenis en eigenschap SelectedContent

Bijzonderheden

Vanaf .NET Framework 4.7.1 werkt een TabControl de waarde van de eigenschap SelectedContent bij voordat de SelectionChanged gebeurtenis wordt gegenereerd wanneer de 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 sectie <runtime> 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 sectie <runtime> van het configuratiebestand van de toepassing:

<runtime>
<AppContextSwitchOverrides value="Switch.System.Windows.Controls.TabControl.SelectionPropertiesCanLagBehindSelectionChangedEvent=false" />
</runtime>
Naam Waarde
Draagwijdte Minderjarige
Versie 4.7.1
Type Opnieuw targeting

Betrokken API's

Het standaardhashalgoritme voor WPF PackageDigitalSignatureManager is nu SHA256

Bijzonderheden

De System.IO.Packaging.PackageDigitalSignatureManager biedt functionaliteit voor digitale handtekeningen met betrekking tot WPF-pakketten. In de .NET Framework 4.7- en eerdere versies was SHA1 het standaardalgoritme (PackageDigitalSignatureManager.DefaultHashAlgorithm) dat wordt gebruikt voor ondertekeningsonderdelen 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 Waarde
Draagwijdte Rand
Versie 4.7.1
Type Opnieuw targeting

Betrokken API's

Windows Workflow Foundation (WF)

Toegankelijkheidsverbeteringen in De werkstroomontwerper van Windows Workflow Foundation (WF)

Bijzonderheden

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:
  • Initialiseer het correlatievenster om correlatiegegevens voor de InitializeCorrelation-activiteit in te stellen.
  • Het inhoudsdefinitie-venster voor de activiteiten Receive, Send, SendReplyen ReceiveReply
  • Er zijn meer functies beschikbaar via het toetsenbord:
  • Wanneer u de eigenschappen van een activiteit bewerkt, kunnen eigenschapsgroepen worden samengevouwen met het toetsenbord de eerste keer dat ze de focus krijgen.
  • Waarschuwingspictogrammen zijn nu toegankelijk via het toetsenbord.
  • De knop Meer eigenschappen in het 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.
  • Door velden in de ReceiveReply en SendReply activiteiten te navigeren met tabbladen.
  • Standaardwaarden instellen voor variabelen of argumenten
  • Schermlezers kunnen nu het volgende op de juiste manier herkennen:
  • Onderbrekingspunten die zijn ingesteld in de werkstroomontwerper.
  • De activiteiten FlowSwitch<T>, FlowDecisionen CorrelationScope.
  • De inhoud van de Receive-activiteit.
  • Het doeltype voor de InvokeMethod-activiteit.
  • De keuzelijst Uitzondering en de sectie Finally in de TryCatch-activiteit.
  • De keuzelijst Berichttype, de schuifregelaar in het venster Correlatie-Initialisatoren toevoegen, het venster Inhoudsdefinitie en het venster CorrelatesOn Defintion in de berichtenactiviteiten (Receive, Send, SendReplyen ReceiveReply).
  • Statusmachineovergangen en overgangen naar bestemmingen.
  • Aantekeningen en verbindingsstukken voor de FlowDecision-activiteiten.
  • De contextmenu's (met de rechtermuisknop) voor activiteiten.
  • De editors voor eigenschapswaarden, de knop Zoeken wissen, de sorteerknoppen op Categorie en op Alfabetische volgorde, 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 Selecteren van .NET-type.
  • Breadcrumbs in de workflow-ontwerper.
  • 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 sectie <runtime> van het app.config-bestand en dit in te stellen op false, 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 gericht zijn 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 stellen op true.

Naam Waarde
Draagwijdte Minderjarige
Versie 4.7.1
Type Opnieuw targeting

.NET Framework 4.7.2

Kern

Unicode Bidirectionele besturingstekens in URI's toestaan

Bijzonderheden

Unicode specificeert verschillende speciale controlekarakters die worden gebruikt om de oriëntatie 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 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, worden ze achtergelaten as-is.

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 toe te voegen over te schakelen naar de sectie <runtime> 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 toe te voegen over te schakelen naar de sectie <runtime> van het toepassingsconfiguratiebestand:

<runtime>
<AppContextSwitchOverrides value="Switch.System.Uri.DontKeepUnicodeBidiFormattingCharacters=false" />
</runtime>
Naam Waarde
Draagwijdte Minderjarige
Versie 4.7.2
Typ Opnieuw targeting

Betrokken API's

DeflateStream maakt gebruik van systeemeigen API's voor decompressie

Bijzonderheden

Vanaf .NET Framework 4.7.2 is de implementatie van decomprimatie in de klasse T:System.IO.Compression.DeflateStream standaard gewijzigd in het gebruik van systeemeigen Windows-API's. 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 opgeworpen.
  • De systeemeigen implementatie dwingt af dat waarden voor sommige gereserveerde vlaggen in de gzip-header (bijvoorbeeld FLG-) zijn ingesteld op basis van de specificatie, waardoor er mogelijk 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 sectie runtime 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 Waarde
Draagwijdte Minderjarige
Versie 4.7.2
Type Opnieuw targeting

Getroffen API's

Zorg ervoor dat System.Uri gebruikmaakt van een consistente gereserveerde tekenset

Bijzonderheden

In System.Uriworden bepaalde procentcodeerde tekens die soms zijn gedecodeerd, nu consistent achtergelaten. 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 toe te voegen over te schakelen naar de sectie <runtime> 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-schakelaar toe te voegen aan de <runtime>-sectie van het toepassingsconfiguratiebestand:

<runtime>
  <AppContextSwitchOverrides value="Switch.System.Uri.DontEnableStrictRFC3986ReservedCharacterSets=false" />
</runtime>
Naam Waarde
Draagwijdte Minderjarige
Versie 4.7.2
Type Opnieuw targeting

Getroffen API's

Resgen weigert inhoud van het web te laden

Bijzonderheden

.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

Resgen-gebruikers die binair opgemaakte invoer van niet-vertrouwde locaties moeten laden, kunnen ofwel de markering "Mark of the Web" uit het invoerbestand verwijderen of de opt-out aanpassing toepassen. Voeg de volgende registerinstelling toe om de algehele opt-out aanpassing toe te passen: [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft.NETFramework\SDK] "AllowProcessOfUntrustedResourceFiles"="true"

Naam Waarde
Draagwijdte Rand
Versie 4.7.2
Type Opnieuw targeting

Stacktraceringen die worden verkregen bij het gebruik van draagbare PDBs bevatten nu bronbestands- en regelgegevens, indien aangevraagd

Bijzonderheden

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 zijn gericht op .NET Framework 4.7.2, kunt u zich afmelden voor bronbestand- en regelinformatie bij het gebruik van draagbare PDB-bestanden als dit niet wenselijk is door het volgende toe te voegen aan de sectie <runtime> 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 bij het gebruik van draagbare PDF-bestanden door het volgende toe te voegen aan de sectie <runtime> van uw app.config-bestand:

<runtime>
  <AppContextSwitchOverrides value="Switch.System.Diagnostics.IgnorePortablePDBsInStackTraces=false" />
</runtime>
Naam Waarde
Draagwijdte Rand
Versie 4.7.2
Type Opnieuw targeting

Getroffen API's

Windows Forms

Toegankelijkheidsverbeteringen in Besturingselementen voor Windows Forms voor .NET 4.7.2

Bijzonderheden

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 om de toetsenbordnavigatie in de besturingselementen DataGridView en MenuStrip te verbeteren.
  • Wijzigingen in interactie met Verteller.

Suggestie

Hoe u zich kunt 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.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 richt zich op .NET Framework 4.7.1 of een eerdere versie en sluit zich uit van het legacy-gedrag voor toegankelijkheid door de volgende AppContext Switch toe te voegen aan de <runtime>-sectie van het app-configuratiebestand en dit in te stellen op false, zoals weergegeven in het volgende voorbeeld.
<?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 oudere toegankelijkheidsgedrag willen behouden, kunnen zich aanmelden voor het gebruik van verouderde toegankelijkheidsfuncties door deze AppContext-switch expliciet in te stellen op true.

Het gebruik van door het besturingssysteem gedefinieerde kleuren in thema's met hoog contrast

  • De vervolgkeuzepijl van het ToolStripDropDownButton gebruikt nu door het besturingssysteem gedefinieerde kleuren in het thema Hoog contrast.
  • Button, RadioButton en CheckBox bedieningsknoppen met FlatStyle ingesteld op FlatStyle.Flat of FlatStyle.Popup gebruiken nu door het besturingssysteem gedefinieerde kleuren in het thema Hoog contrast wanneer geselecteerd. Voorheen waren tekst- en achtergrondkleuren niet contrasterend en waren ze moeilijk te lezen.
  • Besturingselementen in een GroupBox waarop de eigenschap Enabled is ingesteld op false gebruiken nu door het besturingssysteem gedefinieerde kleuren in het thema Hoog contrast.
  • De besturingselementen ToolStripButton, ToolStripComboBoxen ToolStripDropDownButton hebben een verhoogde helderheidscontrastverhouding in de modus Hoog contrast.
  • DataGridViewLinkCell gebruikt standaard door het besturingssysteem gedefinieerde kleuren in de modus Hoog contrast voor de eigenschap DataGridViewLinkCell.LinkColor. 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 verteller-ondersteuning

  • Verteller kondigt nu de waarde van de eigenschap ToolStripMenuItem.ShortcutKeys aan wanneer hij de tekst van een ToolStripMenuItemaankondigt.
  • Verteller geeft nu aan wanneer een ToolStripMenuItem de eigenschap Enabled heeft ingesteld op false.
  • Verteller geeft nu feedback over de status van een selectievakje wanneer de eigenschap ListView.CheckBoxes is ingesteld op true.
  • De focusvolgorde van de scanmodus van Verteller is nu consistent met de visuele volgorde van de bedieningselementen in het ClickOnce-downloadvenster.

Verbeterde ondersteuning voor DataGridView-toegankelijkheid

verbeterde visuele aanwijzingen

  • De besturingselementen RadioButton en CheckBox met een lege eigenschap Text geven nu een focusindicator weer wanneer ze de focus krijgen.

verbeterde ondersteuning voor Property Grid

Naam Waarde
Draagwijdte Majoor
Versie 4.7.2
Type Opnieuw targeting

De eigenschap ContextMenuStrip.SourceControl bevat een geldig besturingselement als er sprake is van geneste ToolStripMenuItems.

Bijzonderheden

In de .NET Framework 4.7.1 en eerdere versies retourneert de eigenschap ContextMenuStrip.SourceControl onterecht null wanneer de gebruiker het menu opent vanuit geneste ToolStripMenuItem-besturingselementen. In .NET Framework 4.7.2 en hoger is SourceControl eigenschap altijd ingesteld op het werkelijke broncodebeheer.

Suggestie

Hoe u zich kunt afmelden voor deze wijzigingen Om een toepassing te kunnen 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 richt zich op .NET Framework 4.7.1 of een eerdere versie en maakt opt-out van de verouderde toegankelijkheidsgedragingen door de volgende AppContext Switch- toe te voegen aan de sectie <runtime> in het bestand app.config en deze in te stellen op false, zoals in het volgende voorbeeld wordt weergegeven.
<runtime>
  <AppContextSwitchOverrides value="Switch.System.Windows.Forms.UseLegacyContextMenuStripSourceControlValue=false"/>
</runtime>

Toepassingen die gericht zijn op .NET Framework 4.7.2 of hoger en die het verouderde gedrag willen behouden, kunnen zich aanmelden voor het gebruik van de verouderde broncodebeheerwaarde door deze AppContext-switch expliciet in te stellen op true.

Naam Waarde
Draagwijdte Edge
Versie 4.7.2
Type Opnieuw targeting

Getroffen API's

Met de methode PrivateFontCollection.AddFontFile worden lettertyperesources uitgebracht

Bijzonderheden

In .NET Framework 4.7.1 en eerdere versies geeft de System.Drawing.Text.PrivateFontCollection klasse de GDI+ lettertypebronnen niet vrij nadat de PrivateFontCollection is verwijderd voor Font objecten die aan deze verzameling worden toegevoegd met behulp van de methode AddFontFile(String). In .NET Framework 4.7.2 en hoger geeft Dispose de GDI+-lettertypen uit die als bestanden aan de verzameling zijn toegevoegd.

Suggestie

Hoe u zich kunt afmelden voor deze wijzigingen Om een toepassing te kunnen 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 richt zich op .NET Framework 4.7.1 of een eerdere versie en meldt zich af voor de verouderde toegankelijkheidsfuncties door de volgende AppContext Switch toe te voegen aan de sectie <runtime> van het app.config-bestand en deze in te stellen op false, zoals in het volgende voorbeeld wordt weergegeven.
<runtime>
<AppContextSwitchOverrides value="Switch.System.Drawing.Text.DoNotRemoveGdiFontsResourcesFromFontCollection=false"/>
</runtime>

Toepassingen die gericht zijn 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 stellen op true.

Naam Waarde
Draagwijdte Rand
Versie 4.7.2
Type Opnieuw targeting

Getroffen API's

De acties voor de omhoogknop en omlaagknop binnen WinForm zijn nu gesynchroniseerd.

Bijzonderheden

In .NET Framework 4.7.1 en eerdere versies wordt de DomainUpDown.UpButton() actie van het DomainUpDown besturingselement genegeerd wanneer tekst van het besturingselement aanwezig is en moet de ontwikkelaar DomainUpDown.DownButton() actie op het besturingselement gebruiken voordat DomainUpDown.UpButton() actie wordt gebruikt. Vanaf .NET Framework 4.7.2 werken zowel de DomainUpDown.UpButton() als 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 vermijdt het verouderde schuifgedrag door de volgende AppContext Switch toe te voegen aan de <runtime>-sectie van het app-configuratiebestand en in te stellen op false, zoals het volgende voorbeeld laat zien.
<runtime>
<AppContextSwitchOverrides value="Switch.System.Windows.Forms.DomainUpDown.UseLegacyScrolling=false"/>
</runtime>
Naam Waarde
Draagwijdte Rand
Versie 4.7.2
Typ Heroriënteren

Betrokken API's

Windows Presentation Foundation (WPF)

De focus van het toetsenbord wordt nu correct verplaatst over meerdere lagen van WinForms/WPF-hosting

Bijzonderheden

Overweeg een WPF-toepassing die als host fungeert voor een WinForms-besturingselement dat op zijn beurt WPF-besturingselementen host. Gebruikers kunnen mogelijk niet tabben uit de WinForms-laag als het eerste of laatste element in die laag de WPF-System.Windows.Forms.Integration.ElementHostis. Met deze wijziging wordt dit probleem opgelost en kunnen gebruikers nu via het tabblad de WinForms-laag verlaten. Geautomatiseerde toepassingen die afhankelijk zijn van focus in de WinForms-laag, werken mogelijk niet meer zoals verwacht.

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. Een ontwikkelaar die de vorige functionaliteit nodig heeft terwijl hij zich richt op .NET 4.7.2 of hoger, kan de volgende AppContext-vlag op 'true' instellen om de wijziging uit te schakelen.

<configuration>
<runtime>
<AppContextSwitchOverrides value="Switch.UseLegacyAccessibilityFeatures.2=true"/>
</runtime>
</configuration>
Naam Waarde
Draagwijdte Rand
Versie 4.7.2
Soort Opnieuw targeting

Het standaardhashalgoritme voor de Markup Compiler van WPF is nu SHA256

Bijzonderheden

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 Waarde
Draagwijdte Doorzichtig
Versie 4.7.2
Typ Opnieuw targeting

WPF AppDomain-afsluitbeheer kan nu Dispatcher.Invoke aanroepen tijdens het opruimen van zwakke gebeurtenissen.

Bijzonderheden

In .NET Framework 4.7.1 en eerdere versies kan WPF mogelijk een System.Windows.Threading.Dispatcher creëren op de .NET-finalizerthread tijdens het sluiten van AppDomain. Dit is opgelost in .NET Framework 4.7.2 en latere versies door zwakke gebeurtenissen thread-bewust op te schonen. Hierdoor kan WPF Dispatcher.Invoke aanroepen 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 Waarde
Draagwijdte Rand
Versie 4.7.2
Type Opnieuw targeting

WPF: een primaire sleutel wijzigen bij het weergeven van ADO-gegevens in een master-/detailscenario

Bijzonderheden

Stel dat u een ADO-verzameling items van het type Orderhebt, 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 DataContext een Orderis. WPF haalt de waarde op van de eigenschap OrderDetails- een verzameling D van alle Detail items waarvan de OrderID overeenkomt met de OrderID van het hoofditem. De gedragswijziging ontstaat wanneer u de primaire sleutel OrderID van het hoofditem wijzigt. ADO wijzigt automatisch de OrderID van elk van de betrokken records in de verzameling Details (namelijk de records die zijn gekopieerd naar verzameling D). Maar wat gebeurt er met D?

  • Oud gedrag: De verzameling D is leeggemaakt. Het hoofditem geeft geen wijzigingsmelding voor 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 eigenschap OrderID. De keuzelijst blijft verzameling D gebruiken en geeft met de nieuwe OrderIDde details weer. WPF implementeert het nieuwe gedrag door verzameling D op een andere manier te maken: door de ADO-methode aan te roepen DataRowView.CreateChildView(DataRelation, Boolean) met het argument followParent ingesteld op true.

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 standaard ingesteld op true (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 Waarde
Draagwijdte Minderjarige
Versie 4.7.2
Type Opnieuw targeting

WPF FocusVisual voor RadioButton en CheckBox wordt nu correct weergegeven wanneer de besturingselementen geen inhoud hebben.

Bijzonderheden

In .NET Framework 4.7.1 en eerdere versies hebben WPF System.Windows.Controls.CheckBox en System.Windows.Controls.RadioButton inconsistente en in klassieke en hoogcontrastthema'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 werkt met .NET Framework 4.7.2 en wil terugkeren naar het gedrag van .NET 4.7.1, 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 Waarde
Draagwijdte Rand
Versie 4.7.2
Type Opnieuw targeting

De tekstselectie van de WPF TextBox/PasswordBox volgt de systeemkleuren niet

Bijzonderheden

In .NET Framework 4.7.1 en eerdere versies konden WPF-System.Windows.Controls.TextBox en System.Windows.Controls.PasswordBox alleen een tekstselectie weergeven in de versieringslaag. In sommige systeemthema's zou dit tekst verbergen, waardoor het moeilijk te lezen is. In .NET Framework 4.7.2 en later hebben ontwikkelaars de mogelijkheid om een selectierenderingsschema in te schakelen dat niet op Adorner is gebaseerd, wat dit probleem verhelpt.

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. Om de niet-versieringsgebaseerde selectie in te schakelen, gebruikt u de volgende AppContext-vlag.

<configuration>
<runtime>
<AppContextSwitchOverrides value="Switch.System.Windows.Controls.Text.UseAdornerForTextboxSelectionRendering=false"/>
</runtime>
</configuration>
Naam Waarde
Draagwijdte Rand
Versie 4.7.2
Type Opnieuw targeting

Windows Workflow Foundation (WF)

Eindeloze recursie voor IWorkflowInstanceManagement.TransactedCancel en IWorkflowInstanceManagement.TransactedTerminate vermijden

Bijzonderheden

Onder bepaalde omstandigheden, wanneer u IWorkflowInstanceManagement.TransactedCancel- of IWorkflowInstanceManagement.TransactedTerminate-API's gebruikt om een werkstroomservice-exemplaar te annuleren of te beëindigen, kan het werkstroomservice-exemplaar een stack overflow ondervinden als gevolg van eindeloze recursie wanneer de Workflow-runtime probeert het service-exemplaar op te slaan als onderdeel van de verwerking van de aanvraag. Het probleem treedt op als het werkstroomexemplaar in een staat verkeert waar het wacht op een andere openstaande WCF-aanvraag naar een andere service om te voltooien. Met de bewerkingen TransactedCancel en TransactedTerminate worden werkitems gemaakt die in de wachtrij worden geplaatst voor de werkstroomservice-instance. Deze werkitems worden niet uitgevoerd als onderdeel van de verwerking van de TransactedCancel/TransactedTerminate aanvraag. Omdat het exemplaar van de werkstroomservice druk is met wachten op de voltooiing van de andere openstaande WCF-aanvraag, blijft het aangemaakte werkitem in de wachtrij staan. De TransactedCancel/TransactedTerminate bewerking is 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 toestand van de werkstroomservice-instantie behouden. Maar omdat er een openstaand WCF verzoek voor de instantie is, kan de workflowruntime de instantie van de werkstroomservice niet opslaan, en resulteert een eindeloze recursielus in stack overflow. Omdat TransactedCancel en TransactedTerminate alleen een werkitem in het geheugen maken, 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 geïntroduceerd die kan worden toegevoegd aan de web.config/app.config van de werkstroomservice waarmee wordt aangegeven dat transacties voor TransactedCancel en TransactedTerminatemoeten worden genegeerd. Hierdoor kan de transactie worden doorgevoerd zonder te wachten tot de workflow-instantie wordt opgeslagen. 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 exemplaren van de werkstroomservice niet worden beïnvloed.

Suggestie

Als u AppFabric of een andere IWorkflowInstanceManagement-client gebruikt en een stack-overflow in de werkstroomservice-instantie tegenkomt wanneer u een werkstroomexemplaar wilt annuleren of beëindigen, kunt u het volgende toevoegen aan de sectie <appSettings> van het web.config/app.config-bestand voor de werkstroomservice:

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

Als u het probleem niet tegenkomt, hoeft u dit niet te doen.

Naam Waarde
Draagwijdte Rand
Versie 4.7.2
Type Opnieuw targeting