Neuzuweisungsänderungen für die Migration zu .NET Framework 4.7.x
In diesem Artikel werden App-Kompatibilitätsprobleme aufgeführt, die in .NET Framework 4.7, 4.7.1 und 4.7.2 auftreten.
.NET Framework 4.7
ASP.NET
HttpRuntime.AppDomainAppPath löst NullReferenceException aus
Details
In .NET Framework 4.6.2 löst die Laufzeit T:System.NullReferenceException
aus, wenn ein P:System.Web.HttpRuntime.AppDomainAppPath
-Wert abgerufen wird, der NULL-Zeichen enthält. In .NET Framework 4.6.1 und früheren Versionen löst die Laufzeit eine T:System.ArgumentNullException
aus.
Vorschlag
Sie können mit einer der folgenden Möglichkeiten auf diese Änderung reagieren:
- Behandeln Sie die
T:System.NullReferenceException
, wenn Ihre Anwendung in .NET Framework 4.6.2 ausgeführt wird. - Führen Sie ein Upgrade auf .NET Framework 4.7 durch, sodass das vorherige Verhalten wiederhergestellt und eine
T:System.ArgumentNullException
ausgelöst wird.
name | Wert |
---|---|
Bereich | Microsoft Edge |
Version | 4.6.2 |
Typ | Neuzuweisung |
Betroffene APIs
Einschränken von gleichzeitigen Anforderungen pro Sitzung
Details
In .NET Framework 4.6.2 und früheren Versionen führt ASP.NET Anforderungen mit der gleichen SessionID sequentiell durch, und ASP.NET stellt die SessionID standardmäßig über Cookies aus. Wenn eine Seite zum Reagieren viel Zeit in Anspruch nimmt, wird die Serverleistung allein durch Drücken von F5 im Browser erheblich eingeschränkt. Mit der Fehlerbehebung verfolgt ein Zähler die in die Warteschlange eingestellten Anforderungen nach und beendet die Anforderungen, wenn sie einen angegebenen Grenzwert überschreiten. Der Standardwert ist 50. Wenn der Grenzwert erreicht wird, wird eine Warnung in das Ereignisprotokoll geschrieben, und möglicherweise wird eine HTTP 500-Antwort im IIS-Protokoll aufgezeichnet.
Vorschlag
Um das alte Verhalten wiederherzustellen, können Sie Ihrer web.config-Datei die folgende Einstellung hinzufügen, um sich gegen das neue Verhalten zu entscheiden.
<appSettings>
<add key="aspnet:RequestQueueLimitPerSession" value="2147483647"/>
</appSettings>
name | Wert |
---|---|
Bereich | Microsoft Edge |
Version | 4.7 |
Typ | Neuzuweisung |
Netzwerk
Der Standardwert von ServicePointManager.SecurityProtocol ist SecurityProtocolType.System.Default
Details
Bei Apps mit der Zielplattform .NET Framework 4.7 und höher ist der Standardwert der ServicePointManager.SecurityProtocol-Eigenschaft SecurityProtocolType.SystemDefault. Diese Änderungen ermöglicht den Netzwerk-APIs von .NET Framework, die auf SslStream (z.B. FTP, HTTPS und SMTP) basieren, die Standardsicherheitsprotokolle des Betriebssystems zu erben, anstatt hartcodierte Werte zu verwenden, die von .NET Framework definiert werden. Der Standard variiert je nach Betriebssystem und sämtlichen benutzerdefinierten Konfigurationen, die vom Systemadministrator vorgenommen werden. Informationen zum standardmäßigen SChannel-Protokoll in der jeweiligen Version des Windows-Betriebssystems finden Sie unter Protokolle in TLS/SSL (SChannel SSP).
Bei Anwendungen, die auf eine frühere Version des .NET-Frameworks ausgelegt sind, hängt der Standardwert der ServicePointManager.SecurityProtocol-Eigenschaft von der .NET Framework-Zielversion ab. Weitere Informationen finden Sie im Abschnitt „Netzwerk“ des Artikels „Neuzuweisung von Änderungen für die Migration von .NET Framework 4.5.2 zu 4.6“.Vorschlag
Diese Änderung betrifft nur Anwendungen, die auf .NET Framework 4.7 oder höher ausgelegt sind. Wenn Sie lieber ein definiertes Protokoll anstelle des Systemstandards verwenden möchten, können Sie den Wert der ServicePointManager.SecurityProtocol-Eigenschaft explizit festlegen. Wenn diese Änderung nicht erwünscht ist, können Sie sich dagegen entscheiden, indem Sie dem Abschnitt <runtime> Ihrer Anwendungskonfigurationsdatei eine Konfigurationseinstellung hinzufügen. Im folgenden Beispiel sind sowohl der Abschnitt <runtime>
als auch die Ablehnungsoption Switch.System.Net.DontEnableSystemDefaultTlsVersions
dargestellt:
<runtime>
<AppContextSwitchOverrides value="Switch.System.Net.DontEnableSystemDefaultTlsVersions=true" />
</runtime>
name | Wert |
---|---|
Bereich | Gering |
Version | 4.7 |
Typ | Neuzuweisung |
Betroffene APIs
SslStream unterstützt TLS-Warnungen
Details
Nach einem fehlgeschlagenen TLS-Handshake wird eine System.IO.IOException mit einer inneren System.ComponentModel.Win32Exception von dem ersten E/A-Lese-/Schreibvorgang ausgelöst. Der System.ComponentModel.Win32Exception.NativeErrorCode-Code für die System.ComponentModel.Win32Exception kann der TLS-Warnung von der Remotepartei mit den Schannel-Fehlercodes für TLS- und SSL-Warnungen zugeordnet werden. Weitere Informationen finden Sie unter RFC 2246: Abschnitt 7.2.2, Fehlerwarnungen.
Das Verhalten in .NET Framework 4.6.2 und früheren Versionen besteht darin, dass für den Transportkanal (in der Regel eine TCP-Verbindung) ein Timeout während des Schreib- oder Lesevorgangs auftritt, wenn beim Handshake bei der anderen Partei ein Fehler aufgetreten ist und die Verbindung unmittelbar danach zurückgewiesen wurde.
Vorschlag
Anwendungen, die Netzwerk-E/A-APIs aufrufen (z.B. Read(Byte[], Int32, Int32)/Write(Byte[], Int32, Int32)) sollten IOException oder System.TimeoutException verarbeiten.
Die TLS-Warnfunktion ist ab .NET Framework 4.7 standardmäßig aktiviert. Für Anwendungen für Versionen von .NET Framework von 4.0 bis 4.6.2, die auf einem System mit .NET Framework 4.7 oder höher ausgeführt werden, ist diese Funktion deaktiviert, um die Kompatibilität zu erhalten.
Die folgende Konfigurations-API ist zum Aktivieren oder Deaktivieren des Features für .NET Framework 4.6- oder höhere Anwendungen, die unter .NET Framework 4.7 oder höher ausgeführt werden, verfügbar.
Programmgesteuert: Die Verarbeitung muss direkt nach dem Anwendungsstart erfolgen, da ServicePointManager nur einmal initialisiert wird:
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>
Registrierungsschlüssel (globaler Wert für einen Computer): Legen Sie den Wert auf
false
fest, um das Feature in .NET Framework 4.6 bis 4.6.2 zu aktivieren.Key: HKLM\SOFTWARE\Wow6432Node\Microsoft\.NETFramework\AppContext\Switch.System.Net.DontEnableTlsAlerts - Type: String - Value: "true"
Name | Wert |
---|---|
Bereich | Microsoft Edge |
Version | 4.7 |
Typ | Neuzuweisung |
Betroffene APIs
- System.Net.Security.SslStream
- System.Net.WebRequest
- System.Net.HttpWebRequest
- System.Net.FtpWebRequest
- System.Net.Mail.SmtpClient
- System.Net.Http
Sicherheit
CspParameters.ParentWindowHandle erwartet nun einen HWND-Wert
Details
Der ParentWindowHandle-Wert, der in .NET Framework 2.0 eingeführt wurde, ermöglicht einer Anwendung die Registrierung eines Handlewerts für das übergeordnete Fenster, sodass jedes Benutzeroberflächenelement, das auf den Schlüssel zugreifen muss (wie etwa eine PIN-Eingabeaufforderung oder ein Zustimmungsdialogfeld), als untergeordnetes modales Fenster des angegebenen Fensters geöffnet wird. Für eine Windows Forms-App, deren Zielplattform .NET Framework 4.7 oder höher ist, kann die Eigenschaft ParentWindowHandle beispielsweise mit dem folgenden Code festgelegt werden:
cspParameters.ParentWindowHandle = form.Handle;
In früheren Versionen von .NET Framework wurde erwartet, dass der Wert ein System.IntPtr-Objekt ist, das einen Speicherort im Arbeitsspeicher darstellt, an dem sich der HWND-Wert befindet. Das Festlegen der Eigenschaft auf „form.Handle“ hatte unter Windows 7 und früheren Versionen keine Auswirkungen, unter Windows 8 und höheren Versionen resultiert dies jedoch in der Fehlermeldung „System.Security.Cryptography.CryptographicException: Der Parameter ist falsch.“
Vorschlag
Für Apps mit der Zielplattform .NET Framework 4.7 oder höher, die eine übergeordnete Fensterbeziehung registrieren sollen, wird die Verwendung eines vereinfachten Formulars wie dem folgenden empfohlen:
cspParameters.ParentWindowHandle = form.Handle;
Einige Benutzer haben erkannt, dass der richtige zu übergebende Wert die Adresse eines Speicherorts im Arbeitsspeicher war, der den Wert form.Handle
enthielt. Benutzer können sich gegen dieses geänderte Verhalten entscheiden, indem sie die AppContext-Option Switch.System.Security.Cryptography.DoNotAddrOfCspParentWindowHandle
auf true
festlegen. Dies kann
- durch programmgesteuertes Festlegen von Kompatibilitätsoptionen für AppContext, wie hier beschrieben wird,
- Durch Hinzufügen der folgenden Zeile zum Abschnitt
<runtime>
der app.config-Datei:
<runtime>
<AppContextSwitchOverrides value="Switch.System.Security.Cryptography.DoNotAddrOfCspParentWindowHandle=true"/>
</runtime>
Benutzer, die sich umgekehrt für das neue Verhalten der Laufzeit von .NET Framework 4.7 entscheiden, können die AppContext-Option auf false
festlegen, wenn die Anwendung in älteren Versionen von .NET Framework geladen wird.
name | Wert |
---|---|
Bereich | Gering |
Version | 4.7 |
Typ | Neuzuweisung |
Betroffene APIs
SslStream unterstützt TLS-Warnungen
Details
Nach einem fehlgeschlagenen TLS-Handshake wird eine System.IO.IOException mit einer inneren System.ComponentModel.Win32Exception von dem ersten E/A-Lese-/Schreibvorgang ausgelöst. Der System.ComponentModel.Win32Exception.NativeErrorCode-Code für die System.ComponentModel.Win32Exception kann der TLS-Warnung von der Remotepartei mit den Schannel-Fehlercodes für TLS- und SSL-Warnungen zugeordnet werden. Weitere Informationen finden Sie unter RFC 2246: Abschnitt 7.2.2, Fehlerwarnungen.
Das Verhalten in .NET Framework 4.6.2 und früheren Versionen besteht darin, dass für den Transportkanal (in der Regel eine TCP-Verbindung) ein Timeout während des Schreib- oder Lesevorgangs auftritt, wenn beim Handshake bei der anderen Partei ein Fehler aufgetreten ist und die Verbindung unmittelbar danach zurückgewiesen wurde.
Vorschlag
Anwendungen, die Netzwerk-E/A-APIs aufrufen (z.B. Read(Byte[], Int32, Int32)/Write(Byte[], Int32, Int32)) sollten IOException oder System.TimeoutException verarbeiten.
Die TLS-Warnfunktion ist ab .NET Framework 4.7 standardmäßig aktiviert. Für Anwendungen für Versionen von .NET Framework von 4.0 bis 4.6.2, die auf einem System mit .NET Framework 4.7 oder höher ausgeführt werden, ist diese Funktion deaktiviert, um die Kompatibilität zu erhalten.
Die folgende Konfigurations-API ist zum Aktivieren oder Deaktivieren des Features für .NET Framework 4.6- oder höhere Anwendungen, die unter .NET Framework 4.7 oder höher ausgeführt werden, verfügbar.
Programmgesteuert: Die Verarbeitung muss direkt nach dem Anwendungsstart erfolgen, da ServicePointManager nur einmal initialisiert wird:
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>
Registrierungsschlüssel (globaler Wert für einen Computer): Legen Sie den Wert auf
false
fest, um das Feature in .NET Framework 4.6 bis 4.6.2 zu aktivieren.Key: HKLM\SOFTWARE\Wow6432Node\Microsoft\.NETFramework\AppContext\Switch.System.Net.DontEnableTlsAlerts - Type: String - Value: "true"
Name | Wert |
---|---|
Bereich | Microsoft Edge |
Version | 4.7 |
Typ | Neuzuweisung |
Betroffene APIs
- System.Net.Security.SslStream
- System.Net.WebRequest
- System.Net.HttpWebRequest
- System.Net.FtpWebRequest
- System.Net.Mail.SmtpClient
- System.Net.Http
Windows Communication Foundation (WCF)
Die Serialisierung von Steuerzeichen in DataContractJsonSerializer ist jetzt konform mit ECMAScript V6 und V8
Details
In .NET Framework 4.6.2 und früheren Versionen serialisierte System.Runtime.Serialization.Json.DataContractJsonSerializer einige besondere Steuerzeichen, wie etwa \b, \f und \t nicht in einer Weise, die mit den Standards ECMAScript V6 und V8 kompatibel ist. Ab .NET Framework 4.7 ist die Serialisierung dieser Steuerzeichen mit ECMAScript V6 und V8 kompatibel.
Vorschlag
Standardmäßig wird dieses neue Feature nur für Apps aktiviert, die für .NET Framework 4.7 konzipiert sind. Wenn dieses Verhalten unerwünscht ist, können Sie sich gegen diese Funktion entscheiden, indem Sie dem Abschnitt <runtime>
der app.config- oder web.config-Datei die folgende Zeile hinzufügen:
<runtime>
<AppContextSwitchOverrides value="Switch.System.Runtime.Serialization.DoNotUseECMAScriptV6EscapeControlCharacter=false" />
</runtime>
name | Wert |
---|---|
Bereich | Microsoft Edge |
Version | 4.7 |
Typ | Neuzuweisung |
Betroffene APIs
- DataContractJsonSerializer.WriteObject(Stream, Object)
- DataContractJsonSerializer.WriteObject(XmlDictionaryWriter, Object)
- DataContractJsonSerializer.WriteObject(XmlWriter, Object)
WCF-Nachrichtensicherheit kann jetzt TLS1.1 und TLS1.2 verwenden
Details
Ab .NET Framework 4.7 können Kunden über die Anwendungskonfigurationseinstellungen neben SSL3.0 und TLS1.0 entweder TLS1.1 oder TLS1.2 in WCF-Nachrichtensicherheit konfigurieren.
Vorschlag
In .NET Framework 4.7 werden TLS1.1 und TLS1.2 in WCF-Nachrichtensicherheit standardmäßig nicht unterstützt. Sie können die Unterstützung aktivieren, indem Sie die folgende Zeile zum Abschnitt <runtime>
der app.config- oder der web.config-Datei hinzufügen:
<runtime>
<AppContextSwitchOverrides value="Switch.System.ServiceModel.DisableUsingServicePointManagerSecurityProtocols=false;Switch.System.Net.DontEnableSchUseStrongCrypto=false" />
</runtime>
name | Wert |
---|---|
Bereich | Microsoft Edge |
Version | 4.7 |
Typ | Neuzuweisung |
Windows Presentation Foundation (WPF)
Aufrufe von System.Windows.Input.PenContext.Disable auf touchfähigen Systemen können eine ArgumentException auslösen
Details
Unter bestimmten Umständen können Aufrufe der internen Methode System.Windows.Intput.PenContext.Disable auf touchfähigen Systemen eine nicht behandelte T:System.ArgumentException
aufgrund von Eintrittsinvarianz auslösen.
Vorschlag
Dieses Problem wurde in .NET Framework 4.7 behoben. Führen Sie ein Upgrade auf .NET Framework 4.7 oder höher aus, um diese Ausnahme zu vermeiden.
name | Wert |
---|---|
Bereich | Microsoft Edge |
Version | 4.6.1 |
Typ | Neuzuweisung |
NullReferenceException im Ausnahmebehandlungscode von ImageSourceConverter.ConvertFrom
Details
Ein Fehler im Ausnahmebehandlungscode für ConvertFrom(ITypeDescriptorContext, CultureInfo, Object) löste einen inkorrekten System.NullReferenceException anstelle der beabsichtigten Ausnahme (System.IO.DirectoryNotFoundException oder System.IO.FileNotFoundException) aus. Diese Änderung korrigiert diesen Fehler, damit die Methode nun die richtige Ausnahme auslöst.
In der Standardeinstellung lösen Anwendungen mit dem Ziel .NET Framework 4.6.2 und früher der Kompatibilität wegen weiterhin System.NullReferenceException aus. Entwickler, die .NET Framework 4.7 und höher anzielen, sollten die richtigen Ausnahmen angezeigt bekommen.
Vorschlag
Entwickler, die wieder System.NullReferenceException erhalten möchten, wenn Sie .NET Framework 4.7 oder höher als Zielplattform verwenden, können der Datei „app.config“ ihrer Anwendung Folgendes hinzufügen oder die entsprechenden Angaben zusammenführen:
<configuration>
<runtime>
<AppContextSwitchOverrides value="Switch.System.Windows.Media.ImageSourceConverter.OverrideExceptionWithNullReferenceException=true"/>
</runtime>
</configuration>
name | Wert |
---|---|
Bereich | Microsoft Edge |
Version | 4.7 |
Typ | Neuzuweisung |
Betroffene APIs
Platzvergabe im Raster für -Spalten
Details
Ab .NET Framework 4.7 ersetzt WPF den Algorithmus, den Grid verwendet, um Platz für *-Spalten zuzuweisen. Dadurch wird die den *-Spalten zugewiesene tatsächliche Breite geändert,
- Wenn eine oder mehrere *-Spalten außerdem eine Minimal- oder Maximalbreite aufweisen, die die proportionale Zuweisung für die betreffende Spalte außer Kraft setzt. (Die minimale Breite kann aus einer expliziten MinWidth-Deklaration oder von einem impliziten Mindestwert abgeleitet werden, der aus dem Inhalt der Spalte abgerufen wird. Die maximale Breite kann nur explizit aus einer MaxWidth-Deklaration definiert werden.)
- wenn mindestens eine *-Spalte eine extrem große *-Gewichtung deklarieren, die größer als 10^298 ist.
- wenn die *-Gewichtungen ausreichend verschieden sind, um zu Gleitkommainstabilität zu führen (Überlauf, Unterlauf, Genauigkeitsverlust).
- Wenn Layoutglättung aktiviert ist und der effektive DPI-Wert der Anzeige ausreichend hoch ist. In den beiden ersten Fällen können sich die vom neuen Algorithmus erzeugten Breiten erheblich von den durch den alten Algorithmus erzeugten unterscheiden; im letzten Fall beträgt der Unterschied höchstens ein oder zwei Pixel.
Der neue Algorithmus behebt mehrere Probleme, die beim alten Algorithmus auftreten:
Die Gesamtzuweisung an Spalten kann die Breite des Rasters überschreiten. Dies kann beim Zuweisen von Platz an eine Spalte geschehen, deren proportionaler Anteil geringer als ihre Mindestgröße ist. Der Algorithmus weist die Mindestgröße zu, wodurch der für andere Spalten verfügbare Platz verringert wird. Wenn keine zuzuweisenden *-Spalten mehr vorhanden sind, ist die Gesamtzuweisung zu groß.
Die Gesamtzuweisung kann die Breite des Rasters unterschreiten. Dieses Problem steht im Gegensatz zu Nr. 1 und entsteht, wenn eine Spalte zugewiesen wird, deren proportionaler Anteil größer als ihre Maximalgröße ist, wenn keine *-Spalten zum Ausgleich des Über- oder Untermaßes vorhanden sind.
Zwei *-Spalten können Zuweisungen erhalten, die nicht proportional zu ihren *-Gewichtungen sind. Dies ist eine mildere Version von Nr. 1/Nr. 2, die beim Zuweisen zu den *-Spalten A, B und C (in dieser Reihenfolge) auftritt, wobei der proportionale Anteil von B gegen deren Min- oder Max-Bedingung verstößt. Wie oben ändert sich dadurch der für Spalte C zur Verfügung stehende Platz, die proportional eine kleinere (oder größeren) Zuweisung als A erhält.
Spalten mit extrem hohen Gewichtungen (> 10^298) werden alle behandelt, als würden sie die Gewichtung 10^298 aufweisen. Proportionale Unterschiede zwischen ihnen (und zwischen Spalten mit erheblich kleineren Gewichtungen) werden nicht berücksichtigt.
Spalten mit der Gewichtung unendlich werden nicht ordnungsgemäß behandelt. (Tatsächlich lässt sich die Gewichtung nicht auf unendlich festlegen, aber das ist eine künstliche Einschränkung. Der Zuweisungscode hat versucht, das Problem zu bewältigen, dabei aber versagt.)
Mehrere kleinere Probleme beim Vermeiden von Überlauf, Unterlauf, Genauigkeitsverlust und ähnlichen Gleitkommaproblemen.
Anpassungen für Layoutglättung sind bei ausreichend hohem DPI fehlerhaft. Der neue Algorithmus erzeugt Ergebnisse, die den folgenden Kriterien genügen:
- Die einer *-Spalte zugewiesene Breite ist niemals kleiner als ihre Mindestbreite oder größer als ihre Maximalbreite.
- Jede *-Spalte, der nicht ihre Mindest- oder Maximalbreite zugewiesen wird, wird eine Breite zugewiesen, die proportional zu ihrer *-Gewichtung ist. Genauer gesagt: Wenn zwei Spalten die Breite x* bzw. y* zugewiesen wird und keine der beiden Spalten ihre Minimal- oder Maximalbreite erhält, stehen die den Spalten zugewiesenen tatsächlichen Breiten v und w im gleichen Verhältnis: v/w == x/y.
- Die Gesamtbreite, die den „proportionalen“ *-Spalten zugewiesen wird, entspricht dem verfügbaren Platz nach der Zuweisung an die Spalten, die Bedingungen unterliegen (feste Spalten, Spalten mit automatischer Breite und *-Spalten, denen die minimale oder maximale Breite zugewiesen wird). Diese kann Null sein, beispielsweise, wenn die Summe der Mindestbreiten die zur Verfügung stehende Breite des Rasters überschreitet.
- Alle diese Anweisungen müssen im Hinblick auf das „ideale“ Layout interpretiert werden. Wenn Layoutglättung aktiviert ist, können die tatsächlichen Breiten um bis zu ein Pixel von den idealen Breiten abweichen.
Hinweis
Alle Aussagen über Spalten und Breiten in diesem Artikel gelten ebenso für Zeilen und Höhen.
Vorschlag
Standardmäßig verwenden Apps mit einer .NET Framework-Zielplattform ab .NET Framework 4.7 den neuen Algorithmus, während Apps mit der Zielplattform .NET Framework 4.6.2 oder früher den alten Algorithmus verwenden.
Um die Standardeinstellung außer Kraft zu setzen, verwenden Sie die folgenden Konfigurationseinstellung:
<runtime>
<AppContextSwitchOverrides value="Switch.System.Windows.Controls.Grid.StarDefinitionsCanExceedAvailableSpace=true" />
</runtime>
Der Wert true
legt den alten Algorithmus fest, false
den neuen.
name | Wert |
---|---|
Bereich | Gering |
Version | 4.7 |
Typ | Neuzuweisung |
Zeigerbasierte Touch-Stapel in WPF
Details
Diese Änderung ermöglicht das Aktivieren eines optionalen WM_POINTER-basierten WPF-Touch-/Stift-Stapels. Entwickler, die diesen Stapel nicht explizit aktivieren, sollten keine Änderung im WPF-Touch/Stift-Verhalten feststellen. Folgende Probleme sind mit dem optionalen WM_POINTER-basierten Touch-/Stift-Stapel bekannt:
- Keine Unterstützung für Freihand in Echtzeit.
- Zwar funktionieren Freihand- und Stift-Plug-Ins nach wie vor, jedoch werden sie im Benutzeroberflächenthread verarbeitet, was zu schlechter Leistung führen kann.
- Verhaltensänderungen aufgrund der Verlagerung von Touch/Stift-Ereignissen zu Mausereignissen.
- Die Bearbeitung verhält sich möglicherweise anders.
- Drag/Drop zeigt keine angemessene Rückmeldung bei Toucheingaben.
- Dies betrifft keine Stifteingaben.
- Drag/Drop kann für Touch/Stift-Ereignisse nicht mehr ausgelöst werden.
- Dadurch kann es vorkommen, dass die Anwendung nicht mehr reagiert, bis die Mauseingabe erkannt wird.
- Stattdessen sollten Entwickler Drag & Drop über Mausereignisse einleiten.
Vorschlag
Entwickler, die diesen Stapel aktivieren möchten, können der Datei „app.config“ ihrer Anwendung Folgendes hinzufügen:
<configuration>
<runtime>
<AppContextSwitchOverrides value="Switch.System.Windows.Input.Stylus.EnablePointerSupport=true"/>
</runtime>
</configuration>
Entfernen oder Festlegen des Werts auf FALSE deaktiviert diesen optionalen Stapel. Beachten Sie, dass dieser Stapel nur unter Windows 10 Creators Update und höher verfügbar ist.
name | Wert |
---|---|
Bereich | Microsoft Edge |
Version | 4.7 |
Typ | Neuzuweisung |
Windows Workflow Foundation (WF)
Änderung der Workflowprüfsummen von MD5 in SHA1
Details
Die Workflowlaufzeit generiert unter Verwendung eines Hashalgorithmus zur Unterstützung des Debuggens mit Visual Studio eine Prüfsumme für eine Workflowinstanz. In .NET Framework 4.6.2 und früheren Versionen wird beim Hashing der Workflowprüfsumme der MD5-Algorithmus verwendet, der auf Systemen, auf den FIPS aktiviert ist, Probleme verursacht hat. Ab .NET Framework 4.7 wird der SHA1-Algorithmus verwendet. Wenn Ihr Code diese Prüfsummen dauerhaft gespeichert hat, sind diese nicht kompatibel.
Vorschlag
Wenn Ihr Code aufgrund eines Prüfsummenfehlers keine Workflowinstanzen laden kann, versuchen Sie, die AppContext
-Option „Switch.System.Activities.UseMD5ForWFDebugger“ auf „true“ festzulegen. Im Code sieht das wie folgt aus:
System.AppContext.SetSwitch("Switch.System.Activities.UseMD5ForWFDebugger", true);
Stattdessen können Sie dies auch im Rahmen der Konfiguration vornehmen:
<configuration>
<runtime>
<AppContextSwitchOverrides value="Switch.System.Activities.UseMD5ForWFDebugger=true" />
</runtime>
</configuration>
name | Wert |
---|---|
Bereich | Gering |
Version | 4.7 |
Typ | Neuzuweisung |
.NET Framework 4.7.1
ASP.NET
Verbesserungen der Barrierefreiheit von ASP.NET in .NET Framework 4.7.1
Details
Ab .NET Framework 4.7.1 arbeiten .ASP.NET-Websteuerelemente effizienter mit den Funktionen für die Barrierefreiheit in Visual Studio zusammen, wodurch ASP.NET-Kunden besser unterstützt werden. Folgende Änderungen wurden u.a. vorgenommen:
- Änderungen, durch die fehlende Barrierefreiheitsmuster für Steuerelemente der Benutzeroberfläche implementiert werden. Zu diesen Steuerelementen zählen z.B. das Dialogfeld „Feld hinzufügen“ im Detailansicht-Assistenten oder das Dialogfeld „ListView konfigurieren“ im ListView-Assistenten.
- Änderungen zur Verbesserung der Anzeige im Modus für hohe Kontraste, z.B. beim DataPager-Feld-Editor.
- Änderungen zur Verbesserung der Benutzerfreundlichkeit bei der Tastaturnavigation für Steuerelemente, z.B. beim Dialogfeld „Felder“ im Assistenten für das Bearbeiten von Pagerfeldern des DataPager-Steuerelements, beim Dialogfeld „ObjectContext konfigurieren“ oder beim Dialogfeld „Datenauswahl konfigurieren“ des Assistenten zum Konfigurieren der Datenquelle.
Vorschlag
Aktivieren oder Deaktivieren dieser Änderungen: Damit diese Änderungen in Visual Studio Designer eingesetzt werden können, muss das Tool unter .NET Framework 4.7.1 oder höher ausgeführt werden. Die Webanwendung kann diese Änderungen nutzen, wenn Sie folgende Schritte durchführen:
- Installieren Sie Visual Studio 2017 15.3 oder höher. Ab dieser Version werden die neuen Barrierefreiheitsfeatures mit der unten aufgeführten AppContext-Option standardmäßig unterstützt.
- Deaktivieren Sie die Legacy-Barrierefreiheitsverhalten, indem Sie in der Konfigurationsdatei „devenv.exe“ dem Abschnitt
<runtime>
die AppContext-OptionSwitch.UseLegacyAccessibilityFeatures
hinzufügen und sie auffalse
festlegen, wie im folgenden Beispiel dargestellt wird.
<?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>
Bei Anwendungen, die .NET Framework 4.7.1 oder höher als Zielplattform verwenden und die Legacy-Barrierefreiheitsverhalten beibehalten sollen, können Sie die Verwendung des veralteten Features für die Barrierefreiheit aktivieren, indem Sie die AppContext-Option auf true
festlegen.
name | Wert |
---|---|
Bereich | Gering |
Version | 4.7.1 |
Typ | Neuzuweisung |
Core
Ausnahmen in SerialPort-Hintergrundthreads
Details
Mit SerialPort-Streams erstellte Hintergrundthreads beenden den Prozess nicht mehr, wenn Betriebssystemausnahmen ausgelöst werden.
In Anwendungen, die auf .NET Framework 4.7 und frühere Versionen ausgelegt sind, wird ein Prozess beendet, wenn eine Betriebssystemausnahme in einem Hintergrundthread ausgelöst wird, der mit einem SerialPort-Stream erstellt wurde.
In Anwendungen, die auf .NET Framework 4.7.1 oder eine höhere Version ausgelegt sind, warten Hintergrundthreads auf Betriebssystemereignisse im Zusammenhang mit der aktiven seriellen Schnittstelle und können in einigen Fällen abstürzen, z. B. beim plötzlichen Entfernen der seriellen Schnittstelle.
Vorschlag
Für Apps mit der Zielplattform .NET Framework 4.7.1 können Sie sich gegen die Ausnahmebehandlung entscheiden, wenn sie nicht erwünscht ist, indem Sie Folgendes dem Abschnitt <runtime>
Ihrer app.config
-Datei hinzufügen:
<runtime>
<AppContextSwitchOverrides value="Switch.System.IO.Ports.DoNotCatchSerialStreamThreadExceptions=true" />
</runtime>
Bei Anwendungen, die für frühere Versionen von .NET Framework vorgesehen sind, aber in .NET Framework 4.7.1 oder höher ausgeführt werden, können Sie die Ausnahmebehandlung verwenden, indem Sie Folgendes dem Abschnitt <runtime>
der app.config
-Datei hinzufügen:
<runtime>
<AppContextSwitchOverrides value="Switch.System.IO.Ports.DoNotCatchSerialStreamThreadExceptions=false" />
</runtime>
name | Wert |
---|---|
Bereich | Gering |
Version | 4.7.1 |
Typ | Neuzuweisung |
Betroffene APIs
ServiceBase überträgt OnStart-Ausnahmen nicht
Details
In .NET Framework 4.7 und früheren Versionen werden Ausnahmen, die beim Dienststart ausgelöst werden, nicht an den Aufrufer von ServiceBase.Run weitergegeben.
Beginnend mit Anwendungen, die auf .NET Framework 4.7.1 ausgelegt sind, gibt die Laufzeit Ausnahmen an ServiceBase.Run für Dienste weiter, die nicht gestartet werden können.
Vorschlag
Wenn beim Start des Diensts eine Ausnahme auftritt, wird diese Ausnahme weitergegeben. Dies sollte bei der Diagnose von Fällen helfen, in denen Dienste nicht starten können.
Wenn dieses Verhalten nicht erwünscht ist, können Sie sich dagegen entscheiden, indem Sie das folgende AppContextSwitchOverrides
-Element dem Abschnitt runtime
Ihrer Anwendungskonfigurationsdatei hinzufügen:
<AppContextSwitchOverrides value="Switch.System.ServiceProcess.DontThrowExceptionsOnStart=true" />
Wenn Ihre Anwendung auf eine frühere Version als 4.7.1 ausgerichtet ist und dieses Verhalten erforderlich ist, können Sie das folgende AppContextSwitchOverrides
-Element dem Abschnitt runtime
Ihrer Anwendungskonfigurationsdatei hinzufügen:
<AppContextSwitchOverrides value="Switch.System.ServiceProcess.DontThrowExceptionsOnStart=false" />
Name | Wert |
---|---|
Bereich | Gering |
Version | 4.7.1 |
Typ | Neuzuweisung |
Betroffene APIs
Sicherheit
Die Standardalgorithmen SignedXML und SignedXMS wurden in SHA-256 geändert
Details
In .NET Framework 4.7 und früheren Versionen verwenden SignedXML und SignedCMS für einige Vorgänge standardmäßig SHA-1. Ab .NET Framework 4.7.1 ist SHA-256 für diese Vorgänge standardmäßig aktiviert. Diese Änderung ist erforderlich, da SHA-1 nicht mehr sicher ist.
Vorschlag
Es gibt zwei neue Kontextwechselwerte, mit denen festgelegt wird, ob SHA-1 (unsicher) oder SHA-256 standardmäßig verwendet wird:
- Switch.System.Security.Cryptography.Xml.UseInsecureHashAlgorithms
- Switch.System.Security.Cryptography.Pkcs.UseInsecureHashAlgorithmsBei Apps mit der Zielplattform .NET Framework 4.7.1 und höheren Versionen kann die Verwendung von SHA-1 als Standardoption wiederhergestellt werden, wenn die Verwendung von SHA-256 nicht erwünscht ist, indem die folgende Konfigurationsoption dem Abschnitt runtime Ihrer Anwendungskonfigurationsdatei hinzugefügt wird:
<AppContextSwitchOverrides value="Switch.System.Security.Cryptography.Xml.UseInsecureHashAlgorithms=true;Switch.System.Security.Cryptography.Pkcs.UseInsecureHashAlgorithms=true" />
Bei Apps mit der Zielplattform .NET Framework 4.7 und früheren Versionen können Sie sich für diese Änderung entscheiden, indem Sie die folgende Konfigurationsoption dem Abschnitt runtime Ihrer Anwendungskonfigurationsdatei hinzufügen:
<AppContextSwitchOverrides value="Switch.System.Security.Cryptography.Xml.UseInsecureHashAlgorithms=false;Switch.System.Security.Cryptography.Pkcs.UseInsecureHashAlgorithms=false" />
name | Wert |
---|---|
Bereich | Gering |
Version | 4.7.1 |
Typ | Neuzuweisung |
Betroffene APIs
- System.Security.Cryptography.Pkcs.CmsSigner
- System.Security.Cryptography.Xml.SignedXml
- System.Security.Cryptography.Xml.Reference
SignedXml.GetPublicKey gibt unter .NET Framework 4.6.2 RSACng (oder CngLightup) zurück, ohne Änderungen neu zuzuweisen
Details
Ab .NET Framework 4.6.2 wird für den konkreten Typ des Objekts, das von der SignedXml.GetPublicKey-Methode zurückgegeben wird, nicht mehr die CryptoServiceProvider-Implementierung, sondern eine Cng-Implementierung verwendet. Probleme sind durch diese Änderung nicht aufgetreten. Der Grund für die Änderung ist, dass für die Implementierung anstelle von certificate.PublicKey.Key
nun die interne Methode certificate.GetAnyPublicKey
verwendet wird, die eine Weiterleitung zu RSACertificateExtensions.GetRSAPublicKey vornimmt.
Vorschlag
Für Apps, die unter .NET Framework 4.7.1 oder einer neueren Version ausgeführt werden, können Sie die standardmäßig von .NET Framework 4.6.1 und früheren Versionen verwendete CryptoServiceProvider-Implementierung verwenden, indem Sie dem Abschnitt runtime Ihrer Anwendungskonfigurationsdatei die folgende Konfigurationsoption hinzufügen:
<AppContextSwitchOverrides value="Switch.System.Security.Cryptography.Xml.SignedXmlUseLegacyCertificatePrivateKey=true" />
name | Wert |
---|---|
Bereich | Microsoft Edge |
Version | 4.6.2 |
Typ | Neuzuweisung |
Betroffene APIs
Windows Communication Foundation (WCF)
Verbesserte Barrierefreiheit für einige .NET SDK-Tools
Details
Im .NET Framework SDK 4.7.1 wurden die Tools „SvcConfigEditor.exe“ und „SvcTraceViewer.exe“ verbessert, indem verschiedene Probleme mit der Barrierefreiheit behoben wurden. Bei den meisten handelte es sich um kleinere Probleme, durch die ein Name nicht definiert wurde oder bestimmte Muster für die Benutzeroberflächenautomatisierung nicht richtig implementiert wurden. Obwohl viele Benutzer diese falschen Werte nicht bemerken würden, erhöhen die SDK-Tools die Benutzerfreundlichkeit für Kunden, die Hilfstechnologien wie die Sprachausgabe verwenden. Diese Problembehebungen ändern vorherige Verhalten wie z.B. die Tastaturfokusreihenfolge. Sie können der Datei „app.config“ Folgendes hinzufügen, um alle Problembehebungen für die Barrierefreiheit in diesen Tools nutzen zu können:
<runtime>
<AppContextSwitchOverrides value="Switch.UseLegacyAccessibilityFeatures=false"/>
</runtime>
name | Wert |
---|---|
Bereich | Microsoft Edge |
Version | 4.7.1 |
Typ | Neuzuweisung |
Windows Forms
Verbesserung der Barrierefreiheit von Windows Forms-Steuerelementen
Details
Die Arbeitsweise von Windows Forms mit Technologien für die Barrierefreiheit wird verbessert, um die Kunden von Windows Forms besser zu unterstützen. Dazu gehören die folgenden Änderungen ab .NET Framework 4.7.1:
- Änderungen zum Verbessern der Anzeige während des Modus mit hohem Kontrast
- Änderungen zum Verbessern der Benutzerfreundlichkeit des Eigenschaftenbrowsers Folgende Verbesserungen wurden am Eigenschaftenbrowser vorgenommen:
- Eine verbesserte Tastaturnavigation durch die verschiedenen Fenster der Dropdownauswahl
- Unnötige Tabstopps wurden reduziert.
- Eine verbesserte Berichterstellung der Steuerelementtypen
- Ein verbessertes Verhalten der Sprachausgabe
- Änderungen an der Implementierung fehlender Barrierefreiheitsmuster für die Benutzeroberfläche in Steuerelementen
Vorschlag
Aktivieren oder Deaktivieren dieser Änderungen: Damit die Anwendung von diesen Änderungen profitieren kann, muss sie unter .NET Framework 4.7.1 oder höher ausgeführt werden. Die Anwendung kann von diesen Änderungen profitieren, wenn Sie Folgendes durchführen:
- Kompilieren Sie diese erneut, um .NET Framework 4.7.1 anzuzielen. Diese Änderungen der Barrierefreiheit werden standardmäßig für WPF-Anwendungen aktiviert, die .NET Framework 4.7.1 oder höher anzielen.
- Veraltete Verhaltensweisen der Barrierefreiheit werden deaktiviert, indem wie im folgenden Beispiel dargestellt folgendes AppContext-Element zum
<runtime>
-Abschnitt der app.config-Datei hinzugefügt und auffalse
festgelegt wird.
<?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>
Bei Anwendungen, die .NET Framework 4.7.1 oder höher als Zielplattform verwenden und die Legacy-Barrierefreiheitsverhalten beibehalten sollen, können Sie die Verwendung des veralteten Features für die Barrierefreiheit aktivieren, indem Sie die AppContext-Option auf true
festlegen.
Einen Überblick über die Benutzeroberflächenautomatisierung finden Sie unter Benutzeroberflächenautomatisierung: Übersicht.
Hinzugefügte Unterstützung für Benutzeroberflächen-Automatisierungsmuster und -Eigenschaften
Barrierefreiheitsclients können neue WinForms-Barrierefreiheitsfunktionen nutzen, indem allgemeine, öffentlich beschriebene Aufrufmuster verwendet werden. Diese Muster sind nicht für WinForms spezifisch. Clients für die Barrierefreiheit können beispielsweise die QueryInterface-Methode der IAccessible-Schnittstelle (MAAS) aufrufen, um eine IServiceProvider-Schnittstelle abzurufen. Wenn diese Schnittstelle verfügbar ist, können Clients die QueryService-Methode verwenden, um eine IAccessibleEx-Schnittstelle anzufordern. Weitere Informationen finden Sie unter Using IAccessibleEx from a Client (Verwenden von IAccessibleEx über einen Client). Ab .NET Framework 4.7.1 sind IServiceProvider und IAccessibleEx gegebenenfalls für WinForms-Objekte für die Barrierefreiheit verfügbar.
.NET Framework 4.7.1 unterstützt jetzt folgende Muster und Eigenschaften für die Automatisierung der Benutzeroberfläche:
Die Steuerelemente ToolStripSplitButton und ComboBox unterstützen das Muster Erweitern/Reduzieren.
Das ToolStripMenuItem-Steuerelement weist einen ControlType-Eigenschaftswert von ControlType.MenuItem auf.
Das ToolStripItem-Steuerelement unterstützt die NameProperty-Eigenschaft und das Muster für das Erweitern/Reduzieren.
Das ToolStripDropDownItem-Steuerelement unterstützt das AccessibleEvents-Element, das StateChange und NameChange angibt, wenn das Dropdownmenü erweitert oder reduziert ist.
Das ToolStripDropDownButton-Steuerelement weist einen ControlType-Eigenschaftswert von ControlType.MenuItem auf.
Das DataGridViewCheckBoxCell-Steuerelement unterstützt das TogglePattern.
Die NumericUpDown- und DomainUpDown-Steuerelemente unterstützen die NameProperty-Eigenschaft und weisen einen ControlType von ControlType.Spinner auf.
Verbesserungen am PropertyGrid-Steuerelement: Mit .NET Framework 4.7.1 werden folgende Verbesserungen zum PropertyBrowser-Steuerelement hinzugefügt:Die Schaltfläche Details im Dialogfeld „Fehler“, das angezeigt wird, wenn der Benutzer einen falschen Wert in das PropertyGrid-Steuerelement eingibt, unterstützt das Muster Erweitern/Reduzieren, Benachrichtigungen für Status- und Namensänderungen und eine ControlType-Eigenschaft mit einem Wert von ControlType.MenuItem.
Auf den Bereich „Meldung“, der angezeigt wird, wenn die Schaltfläche Details des Dialogfelds „Fehler“ erweitert ist, kann nun über die Tastatur zugegriffen werden. Außerdem kann die Microsoft-Sprachausgabe den Inhalt der Fehlermeldung ausgeben.
Das AccessibleRole-Element für Zeilen im PropertyGrid-Steuerelement wurde von „Zeile“ in „Zelle“ geändert. Die Zelle ist dem UIA-ControlType-Element „DataItem“ zugeordnet, sodass entsprechende Tastenkombinationen und Sprachausgaben unterstützt werden.
Die Zeilen des PropertyGrid-Steuerelements, die Headerelemente darstellen, wenn die PropertySort-Eigenschaft des PropertyGrid-Steuerelements auf PropertySort.Categorized festgelegt ist, weisen einen ControlType-Eigenschaftswert von ControlType.Button auf.
Die Zeilen des PropertyGrid-Steuerelements, die Headerelemente darstellen, wenn die PropertySort-Eigenschaft des PropertyGrid-Steuerelements auf PropertySort.Categorized festgelegt ist, unterstützen das Muster Erweitern/Reduzieren.
Verbesserte Tastaturnavigation zwischen dem Raster und der darüber liegenden Symbolleiste. Durch Drücken von UMSCHALT+TAB wird jetzt die erste Symbolleistenschaltfläche anstelle der gesamten Symbolleiste ausgewählt.
Bei den PropertyGrid-Steuerelementen, die im Modus mit hohem Kontrast angezeigt werden, wird nun ein Fokusrechteck um die Schaltfläche des Steuerelements angezeigt, die dem aktuellen Wert der PropertySort-Eigenschaft entspricht.
Bei PropertyGrid-Steuerelementen, die im Modus mit hohem Kontrast angezeigt werden, und bei denen eine PropertySort-Eigenschaft auf PropertySort.Categorized festgelegt ist, wird nun der Hintergrund von Kategorieheadern in kontrastreicher Farbe angezeigt.
Bei PropertyGrid-Steuerelementen wird besser zwischen den Elementen der Symbolleiste mit Fokus und denen, die den aktuellen Wert der PropertySort-Eigenschaft angeben, unterschieden. Dieser Fehlerbehebung besteht aus einer Änderung für Szenarios mit und ohne hohen Kontrast.
ToolBar-Elemente des PropertyGrid-Steuerelements, die den aktuellen Wert der PropertySort-Eigenschaft angeben, unterstützen das TogglePattern.
Verbesserte Unterstützung der Unterscheidung der ausgewählten Ausrichtung in der Ausrichtungsauswahl durch die Microsoft-Sprachausgabe.
Wenn ein leeres PropertyGrid-Steuerelement in einem Formular angezeigt wird, wird dieses nun fokussiert. Dies war zuvor nicht der Fall.
Verwendung von durch das Betriebssystem definierten Farben in Designs mit hohem Kontrast
- Die Button- und CheckBox-Steuerelementen, deren FlatStyle-Eigenschaft auf FlatStyle.System (Standardformat) festgelegt ist, verwenden nun die vom Betriebssystem definierten Farben im Design mit hohem Kontrast, wenn dieses ausgewählt ist. Zuvor gab es keinen Kontrast zwischen Text und Hintergrundfarbe, wodurch der Text schwer lesbar war.
- Die Button-, CheckBox-, RadioButton-, Label-, LinkLabel- und GroupBox-Steuerelemente, deren Enabled-Eigenschaft auf FALSE festgelegt ist, verwendeten schattierte Farben zum Rendern von Text in Designs mit hohem Kontrast. Dies führt zu geringem Kontrast vor dem Hintergrund. Diese Steuerelemente verwenden jetzt die vom Betriebssystem definierte Farbe für deaktivierten Text. Diese Fehlerbehebung gilt für Steuerelemente, bei denen die
FlatStyle
-Eigenschaft auf einen anderen Wert als FlatStyle.System festgelegt ist. Die zuletzt aufgeführten Steuerelemente werden vom Betriebssystem gerendert. - DataGridView rendert nun ein sichtbares Rechteck um den Inhalt der Zelle, die derzeit fokussiert wird. Zuvor wurde dieses in bestimmten Designs mit hohem Kontrast nicht angezeigt.
- ToolStripMenuItem-Steuerelemente, deren Enabled-Eigenschaft auf false festgelegt ist, verwenden jetzt die vom Betriebssystem definierte Farbe für deaktivierten Text.
- ToolStripMenuItem-Steuerelemente, deren Checked-Eigenschaft auf TRUE festgelegt ist, rendern nun das zugehörige Häkchen in einer kontrastreichen Systemfarbe. Zuvor war die Farbe des Häkchens nicht kontrastreich genug, weshalb es in Designs mit hohem Kontrast nicht sichtbar war. HINWEIS: In Windows 10 wurden die Werte für einige Systemfarben mit hohem Kontrast geändert. Das Windows Forms-Framework basiert auf dem Win32-Framework. Die besten Ergebnisse erhalten Sie, wenn Sie die aktuelle Version von Windows ausführen und die neuesten Änderungen am Betriebssystem aktivieren, indem Sie eine app.manifest-Datei zu einer Testanwendung hinzufügen und den Kommentar aus folgendem Code entfernen:
<!-- Windows 10 -->
<supportedOS Id="{8e0f7a12-bfb3-4fe8-b9a5-48fd50a15a9a}" />
Verbesserte Tastaturnavigation
- Wenn für ein ComboBox-Steuerelement seine DropDownStyle-Eigenschaft auf ComboBoxStyle.DropDownList festgelegt ist und es das erste Steuerelement in der Aktivierreihenfolge des Formulars ist, zeigt dieses nun ein Fokusrechteck an, wenn das übergeordnete Formular mithilfe der Tastatur geöffnet wird. Vor dieser Änderung lag der Tastaturfokus auf diesem Steuerelement, es wurde jedoch kein Fokusindikator gerendert.
Verbesserte Unterstützung für die Sprachausgabe
Dem MonthCalendar-Steuerelement wurde die Unterstützung für Hilfstechnologien hinzugefügt, damit diese auf das Steuerelement zugreifen können. Dazu zählt auch die Funktion der Microsoft-Sprachausgabe, den Wert des Steuerelements auszugeben. Dies war zuvor nicht möglich.
Das CheckedListBox-Steuerelement benachrichtigt die Sprachausgabe nun, wenn eine CheckBox.CheckState-Eigenschaft geändert wurde. Zuvor erhielt die Sprachausgabe keine Benachrichtigung. Deshalb wurden Benutzer nicht darüber informiert, dass die CheckState-Eigenschaft aktualisiert wurde.
Die Art, wie das LinkLabel-Steuerelement die Microsoft-Sprachausgabe über den Text des Steuerelements benachrichtigt, wurde geändert. Zuvor hat die Sprachausgabe diesen Text zweimal ausgegeben und die „&“-Symbole als Text gelesen, obwohl diese für Benutzer*innen nicht sichtbar sind. Der doppelten Text sowie die unnötigen „&“-Symbole wurden aus den Ausgaben der Sprachausgabe entfernt.
Die DataGridViewCell-Steuerelementtypen melden den schreibgeschützten Status nun ordnungsgemäß an die Microsoft-Sprachausgabe und andere Hilfstechnologien.
Die Sprachausgabe kann jetzt das Systemmenü untergeordneter Fenster in [Multiple-Document Interface]~/docs/framework/winforms/advanced/multiple-document-interface-mdi-applications.md)-Anwendungen lesen.
Die Microsoft-Sprachausgabe kann nun ToolStripMenuItem-Steuerelemente ausgeben, bei der die ToolStripItem.Enabled-Eigenschaft auf FALSE festgelegt ist. Zuvor konnte die Sprachausgabe den Fokus nicht auf deaktivierte Menüelemente verschieben, um deren Inhalt auszugeben.
name | Wert |
---|---|
Bereich | Hauptversion |
Version | 4.8 |
Typ | Neuzuweisung |
Betroffene APIs
- ToolStripDropDownButton.CreateAccessibilityInstance()
- DomainUpDown.DomainUpDownAccessibleObject.Name
- MonthCalendar.AccessibilityObject
Windows Presentation Foundation (WPF)
Verbesserungen der Barrierefreiheit in WPF
Details
Verbesserungen beim hohen Kontrast
- Der Fokus für das Expander-Steuerelement wird nun angezeigt. In früheren Versionen des .NET Framework war dies nicht der Fall.
- Der Text, der in den CheckBox- und RadioButton-Steuerelementen angezeigt wird, wenn diese ausgewählt sind, ist nun einfacher erkennbar als in den vorherigen Versionen von .NET Framework.
- Der Rahmen eines deaktivierten ComboBox-Elements hat nun die gleiche Farbe wie der deaktivierte Text. In früheren Versionen des .NET Framework war dies nicht der Fall.
- Deaktivierte Schaltflächen und Schaltflächen mit Fokus verwenden nun das richtige Farbdesign. In früheren Versionen des .NET Framework war dies nicht der Fall.
- Die Dropdownschaltfläche ist nun sichtbar, wenn der Stil eines ComboBox-Steuerelements auf ToolBar.ComboBoxStyleKey festgelegt ist. In früheren Versionen des .NET Framework war dies nicht der Fall.
- Der Pfeil für die Sortieranzeige in einem DataGrid-Steuerelement verwendet nun die Farben des Designs. In früheren Versionen des .NET Framework war dies nicht der Fall.
- Das Standardformat für Links ändert sich nun in das richtige Farbdesign, wenn mit der Maus darauf gezeigt wird. In früheren Versionen des .NET Framework war dies nicht der Fall.
- Es wird nun angezeigt, wenn der Tastaturfokus sich auf Optionsfeldern befindet. In früheren Versionen des .NET Framework war dies nicht der Fall.
- Die Spalte für Kontrollkästchen des DataGrid-Steuerelements verwendet nun die erwarteten Farben für das Feedback des Tastaturfokus. In früheren Versionen des .NET Framework war dies nicht der Fall.
- Die visuellen Elemente des Tastaturfokus werden nun für ComboBox- und ListBox-Steuerelemente angezeigt. In früheren Versionen des .NET Framework war dies nicht der Fall.
Verbesserungen der Interaktion mit der Sprachausgabe
- Expander-Steuerelemente werden von der Sprachausgabe nun richtig als Gruppen (erweitern/reduzieren) ausgegeben.
- DataGridCell-Steuerelemente werden von der Sprachausgabe nun richtig als Datenrasterzellen (lokalisiert) ausgegeben.
- Die Sprachausgabe gibt nun den Namen eines bearbeitbaren ComboBox-Elements aus.
- PasswordBox-Steuerelemente werden von der Sprachausgabe nicht mehr als „Es befindet sich kein Element in der Ansicht“ ausgegeben.
LiveRegion-Unterstützung
Sprachausgaben wie das Feature „Sprachausgabe“ helfen Benutzern, die Benutzeroberfläche einer Anwendung zu verstehen. In der Regel wird dazu das Benutzeroberflächenelement beschrieben, das gerade im Fokus ist. Wenn ein Element der Benutzeroberfläche sich jedoch an einer beliebigen Stelle des Bildschirms ändert und nicht fokussiert wird, wird der Benutzer möglicherweise nicht informiert und verpasst wichtige Informationen. LiveRegions wurden dafür entwickelt, dieses Problem zu lösen. Entwickler können diese verwenden, um der Sprachausgabe oder einem anderen Benutzeroberflächen-Automatisierungsclient mitzuteilen, dass eine wichtige Änderung an einem Element der Benutzeroberfläche vorgenommen wurde. Die Sprachausgabe kann dann entscheiden, wie und wann der Benutzer über diese Änderung informiert wird. Die LiveSetting-Eigenschaft sorgt ebenfalls dafür, dass die Sprachausgabe den Benutzer über Änderungen an der Benutzeroberfläche informiert.
Vorschlag
Aktivieren bzw. Deaktivieren dieser Änderungen
Damit die Anwendung von diesen Änderungen profitieren kann, muss sie unter .NET Framework 4.7.1 oder höher ausgeführt werden. Die Anwendung kann von diesen Änderungen profitieren, wenn Sie Folgendes durchführen:
Richten Sie die Anwendung auf .NET Framework-Version 4.7.1 aus. Dies ist die empfohlene Vorgehensweise. Diese Änderungen für mehr Barrierefreiheit werden automatisch für WPF-Anwendungen aktiviert, die für .NET Framework 4.7.1 oder höher entwickelt wurden.
Veraltete Verhaltensweisen der Barrierefreiheit werden deaktiviert, indem wie im folgenden Beispiel dargestellt folgender AppContext-Schalter im Abschnitt
<runtime>
der Datei „app.config“ hinzugefügt und auffalse
festgelegt wird.<?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>
Bei Anwendungen, deren Zielplattform .NET Framework 4.7.1 oder höher ist und für die das Legacyverhalten für die Barrierefreiheit beibehalten sollen, können Sie das Legacyfeature für die Barrierefreiheit aktivieren, indem Sie die AppContext-Option auf true
festlegen.
Einen Überblick über die Benutzeroberflächenautomatisierung finden Sie unter Übersicht über die Benutzeroberflächenautomatisierung.
Name | Wert |
---|---|
Bereich | Hauptversion |
Version | 4.7.1 |
Typ | Neuzuweisung |
Betroffene APIs
- AutomationElementIdentifiers.LiveSettingProperty
- AutomationElementIdentifiers.LiveRegionChangedEvent
- System.Windows.Automation.AutomationLiveSetting
- AutomationProperties.LiveSettingProperty
- AutomationProperties.SetLiveSetting(DependencyObject, AutomationLiveSetting)
- AutomationProperties.GetLiveSetting(DependencyObject)
- AutomationPeer.GetLiveSettingCore()
Selector-Klasse – SelectionChanged-Ereignis und SelectedValue-Eigenschaft
Details
Ab .NET Framework 4.7.1 aktualisiert ein Selector-Objekt immer den Wert der zugehörigen SelectedValue-Eigenschaft, bevor das Ereignis SelectionChanged ausgelöst wird, wenn die Auswahl geändert wird. Dadurch wird die „SelectedValue“-Eigenschaft mit den anderen Auswahleigenschaften (SelectedItem und SelectedIndex) in Einklang gebracht, die vor dem Auslösen des Ereignisses aktualisiert werden.
In .NET Framework 4.7 und früheren Versionen wurde „SelectValue“ in den meisten Fällen vor der Auslösung des Ereignisses aktualisiert. Wenn die Änderung der Auswahl durch Ändern der SelectedValue-Eigenschaft ausgelöst wurde, fand die Aktualisierung jedoch nach dem Auslösen des Ereignisses statt.
Vorschlag
Für Apps mit der Zielplattform .NET Framework 4.7.1 oder höher kann diese Änderung deaktiviert und das Legacyverhalten verwendet werden, indem Sie dem Abschnitt <runtime>
der Anwendungskonfigurationsdatei Folgendes hinzufügen:
<runtime>
<AppContextSwitchOverrides
value="Switch.System.Windows.Controls.TabControl.SelectionPropertiesCanLagBehindSelectionChangedEvent=true" />
</runtime>
Für Apps mit der Zielplattform .NET Framework 4.7 oder früheren Versionen, die unter .NET Framework 4.7.1 oder höher ausgeführt werden, kann das neue Verhalten aktiviert werden, indem Sie dem Abschnitt <runtime>
der Anwendungskonfigurationsdatei die folgende Zeile hinzufügen:
<runtime>
<AppContextSwitchOverrides value="Switch.System.Windows.Controls.TabControl.SelectionPropertiesCanLagBehindSelectionChangedEvent=false" />
</runtime>
name | Wert |
---|---|
Bereich | Gering |
Version | 4.7.1 |
Typ | Neuzuweisung |
Betroffene APIs
SelectionChanged-Ereignis und SelectedContent-Eigenschaft von „TabControl“
Details
Ab .NET Framework 4.7.1 aktualisiert TabControl den Wert der SelectedContent-Eigenschaft, bevor das SelectionChanged-Ereignis ausgelöst wird, wenn die Auswahl geändert wird. In .NET Framework 4.7 und früher wurde das Update für „SelectedContent“ nach dem Ereignis durchgeführt.
Vorschlag
Für Apps mit der Zielplattform .NET Framework 4.7.1 oder höher kann diese Änderung deaktiviert und das Legacyverhalten verwendet werden, indem Sie dem Abschnitt <runtime>
der Anwendungskonfigurationsdatei Folgendes hinzufügen:
<runtime>
<AppContextSwitchOverrides value="Switch.System.Windows.Controls.TabControl.SelectionPropertiesCanLagBehindSelectionChangedEvent=true" />
</runtime>
Für Apps mit der Zielplattform .NET Framework 4.7 oder früheren Versionen, die unter .NET Framework 4.7.1 oder höher ausgeführt werden, kann das neue Verhalten aktiviert werden, indem Sie dem Abschnitt <runtime>
der Anwendungskonfigurationsdatei die folgende Zeile hinzufügen:
<runtime>
<AppContextSwitchOverrides value="Switch.System.Windows.Controls.TabControl.SelectionPropertiesCanLagBehindSelectionChangedEvent=false" />
</runtime>
name | Wert |
---|---|
Bereich | Gering |
Version | 4.7.1 |
Typ | Neuzuweisung |
Betroffene APIs
SHA256 ist jetzt der Standardhashalgorithmus für WPF-PackageDigitalSignatureManager
Details
Der System.IO.Packaging.PackageDigitalSignatureManager
stellt Funktionen zur digitalen Signatur von WPF-Paketen zur Verfügung. In .NET Framework 4.7 und früheren Versionen, war SHA1 der Standardhashalgorithmus (PackageDigitalSignatureManager.DefaultHashAlgorithm), der zum Signieren von Paketbestandteilen verwendet wurde. Diese Standardeinstellung wurde ab .NET Framework 4.7.1 aufgrund von Sicherheitsbedenken im Zusammenhang mit SHA1 auf SHA256 geändert. Diese Änderung betrifft die Signierung aller Pakete, einschließlich XPS-Dokumenten.
Vorschlag
Ein Entwickler, der diese Änderung nutzen will, aber seine Anwendung auf eine ältere Version von .NET Framework als Version 4.7.1 auslegt, oder ein Entwickler, der die veraltete Funktion verwenden möchte, seine Anwendung jedoch auf .NET Framework 4.7.1 oder höher auslegt, können das „AppContext“-Flag entsprechend festlegen. Wenn ein TRUE-Wert zurückgegeben wird, wird SHA1 als Standardalgorithmus verwendet. Bei FALSE-Werten wird SHA256 zurückgegeben.
<configuration>
<runtime>
<AppContextSwitchOverrides value="Switch.MS.Internal.UseSha1AsDefaultHashAlgorithmForDigitalSignatures=true"/>
</runtime>
</configuration>
name | Wert |
---|---|
Bereich | Microsoft Edge |
Version | 4.7.1 |
Typ | Neuzuweisung |
Betroffene APIs
Windows Workflow Foundation (WF)
Verbesserungen der Bedienungshilfen im Workflow-Designer von Windows Workflow Foundation (WF)
Details
Die Arbeitsweise von Workflow-Designer von Windows Workflow Foundation (WF) mit Technologien für die Barrierefreiheit wurde verbessert. Diese Verbesserungen umfassen folgende Änderungen:
- Die Aktivierreihenfolge wurde bei manchen Steuerelementen in „ Von links nach rechts“ und in „Von oben nach unten“ geändert:
- Das Fenster „Korrelation initialisieren“ für das Festlegen von Korrelationsdaten für die InitializeCorrelation-Aktivität
- Das Fenster „Inhaltsdefinition“ für die Aktivitäten Receive, Send, SendReply und ReceiveReply
- Weitere Funktionen sind über die Tastatur verfügbar:
- Beim Bearbeiten der Eigenschaften einer Aktivität können die Eigenschaftengruppen über die Tastatur reduziert werden, wenn diese zum ersten Mal fokussiert werden.
- Auf Warnsymbole kann nun über die Tastatur zugegriffen werden.
- Auf die Schaltfläche „Weitere Eigenschaften“ im Fenster „Eigenschaften“ kann nun über die Tastatur zugegriffen werden.
- Tastaturbenutzer können nun auf die Headerelemente in den Bereichen „Argumente“ und „Variablen“ des Workflow-Designers zugreifen.
- Verbesserte Sichtbarkeit von Elementen mit Fokus, z.B. in folgenden Fällen:
- Hinzufügen von Zeilen zu Datenrastern, die vom Workflow-Designer und von Aktivitäts-Designern verwendet werden
- Wechseln von Feldern mit der TAB-TASTE in den Aktivitäten ReceiveReply und SendReply
- Festlegen von Standardwerten für Variablen oder Argumente
- Sprachausgaben können Folgendes nun richtig erkennen:
- Breakpoints, die im Workflow-Designer festgelegt wurden
- Die Aktivitäten FlowSwitch<T>, FlowDecision und CorrelationScope
- Die Inhalte der Receive-Aktivität
- Den Zieltyp für die InvokeMethod-Aktivität
- Das Kombinationsfeld „Ausnahme“ und den Abschnitt „Finally“ in der TryCatch-Aktivität
- Das Kombinationsfeld „Nachrichtentyp“, den Splitter im Fenster „Korrelationsinitialisierer hinzufügen“, das Fenster „Inhaltsdefinition“ und das Definitionsfenster „CorrelatesOn“ in den Messagingaktivitäten (Receive, Send, SendReply und ReceiveReply)
- Übertragungen von Zustandsautomaten und Übertragungsziele
- Anmerkungen und Connectors von FlowDecision-Aktivitäten
- Die per Rechtsklick aufrufbaren Kontextmenüs von Aktivitäten
- Die Editors für Eigenschaftswerte, die Schaltfläche, „Suche löschen“, die Sortierschaltflächen „Nach Kategorie“ und „Alphabetisch“ sowie das Dialogfeld „Ausdrucks-Editor“ im Eigenschaftenraster
- Den Zoomprozentwert im Workflow-Designer
- Das Trennzeichen in den Aktivitäten Parallel und Pick
- Die InvokeDelegate-Aktivität
- Das Fenster „Typen auswählen“ für Wörterbuchaktivitäten (
Microsoft.Activities.AddToDictionary<TKey,TValue>
,Microsoft.Activities.RemoveFromDictionary<TKey,TValue>
usw.) - Das Fenster „.NET-Typ suchen und auswählen“
- Breadcrumbs im Workflow-Designer
- Benutzer, die Designs mit hohem Kontrast verwenden, werden viele Verbesserungen in der Sichtbarkeit des Workflow-Designers und dessen Steuerelementen feststellen. Dazu zählen verbesserte Kontrastverhältnisse zwischen Elementen und besser erkennbare Auswahlfelder für Fokuselemente.
Vorschlag
Wenn Sie eine Anwendung mit einem neu gehosteten Workflow-Designer besitzen, kann Ihre Anwendung von diesen Änderungen profitieren, indem Sie eine der folgenden Aktionen durchführen:
- Rekompilieren Sie Ihre Anwendung, um .NET Framework 4.7.1 anzuzielen. Die Verbesserungen der Barrierefreiheit werden standardmäßig aktiviert.
- Wenn Ihre Anwendung .NET Framework 4.7 oder früher anzielt, aber auf .NET Framework 4.7.1 ausgeführt wird, können Sie die veralteten Verhaltensweisen für die Barrierefreiheit deaktivieren, indem Sie folgendes AppContext-Element zum
<runtime>
-Abschnitt der app.config-Datei hinzufügen und dieses wie im folgenden Beispiel dargestellt auffalse
festlegen.
<?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>
Bei Anwendungen, die .NET Framework 4.7.1 oder höher als Zielplattform verwenden und die Legacy-Barrierefreiheitsverhalten beibehalten sollen, können Sie die Verwendung des veralteten Features für die Barrierefreiheit aktivieren, indem Sie die AppContext-Option auf true
festlegen.
name | Wert |
---|---|
Bereich | Gering |
Version | 4.7.1 |
Typ | Neuzuweisung |
.NET Framework 4.7.2
Kernspeicher
Zulassen bidirektionaler Unicode-Steuerzeichen in URIs
Details
Unicode gibt mehrere spezielle Steuerzeichen an, um die Ausrichtung von Text anzugeben. In früheren Versionen von .NET Framework wurden diese Zeichen selbst dann fälschlicherweise aus allen URIs entfernt, wenn sie in ihrer prozentcodierten Form vorlagen. Damit RFC 3987 besser berücksichtigt wird, sind diese Zeichen in URIs nun zulässig. Wenn sie uncodiert in einem URI gefunden werden, werden sie prozentcodiert. Wenn sie prozentcodiert gefunden werden, bleiben sie unverändert.
Vorschlag
Für Anwendungen mit Zielversionen von .NET Framework ab .NET Framework 4.7.2 ist Unterstützung für bidirektionale Uniccode-Zeichen standardmäßig aktiviert. Wenn diese Änderung nicht erwünscht ist, können Sie sie deaktivieren, indem Sie den Schalter AppContextSwitchOverrides dem Abschnitt <runtime>
Ihrer Anwendungskonfigurationsdatei hinzufügen:
<runtime>
<AppContextSwitchOverrides value="Switch.System.Uri.DontKeepUnicodeBidiFormattingCharacters=true" />
</runtime>
Für Anwendungen mit früheren Zielversionen von .NET Framework, die aber mit Versionen ab .NET Framework 4.7.2 ausgeführt werden, ist Unterstützung für bidirektionale Uniccode-Zeichen standardmäßig deaktiviert. Sie können sie aktivieren, indem Sie den Schalter AppContextSwitchOverrides dem Abschnitt <runtime>
Ihrer Anwendungskonfigurationsdatei hinzufügen:
<runtime>
<AppContextSwitchOverrides value="Switch.System.Uri.DontKeepUnicodeBidiFormattingCharacters=false" />
</runtime>
name | Wert |
---|---|
Bereich | Gering |
Version | 4.7.2 |
Typ | Neuzuweisung |
Betroffene APIs
DeflateStream verwendet native APIs für die Dekomprimierung
Details
Ab .NET Framework 4.7.2 hat sich die Implementierung der Dekomprimierung in der T:System.IO.Compression.DeflateStream
-Klasse so geändert, dass standardmäßig native Windows-APIs verwendet werden. In der Regel führt dies zu einer beträchtlichen Leistungssteigerung. Alle .NET-Anwendungen für .NET Framework Version 4.7.2 oder höher verwenden die native Implementierung. Diese Änderung kann zu einigen Unterschieden im Verhalten führen, beispielsweise:
- Die Ausnahmemeldungen können sich unterscheiden. Der Typ der ausgelösten Ausnahme bleibt jedoch gleich.
- Einige besondere Situationen (z.B. nicht ausreichender Speicher zum Abschließen eines Vorgangs) werden möglicherweise anders behandelt.
- Es gibt bekannte Unterschiede für die Analyse von GZip-Headern (Hinweis: nur
GZipStream
für die Dekomprimierung ist davon betroffen): - Ausnahmen beim Analysieren ungültiger Header werden möglicherweise zu anderen Zeiten ausgelöst.
- Die native Implementierung führt dazu, dass Werte für einige reservierte Flags im GZip-Header (d.h. FLG) gemäß der Spezifikation festgelegt werden. Dies kann dazu führen, dass in Fällen möglicherweise eine Ausnahme ausgelöst wird, in denen zuvor ungültige Werte ignoriert wurden.
Vorschlag
Wenn sich die Dekomprimierung mit nativen APIs negativ auf das Verhalten Ihrer App ausgewirkt hat, können Sie diese Funktion durch Hinzufügen des Switch.System.IO.Compression.DoNotUseNativeZipLibraryForDecompression
-Schalters zum Abschnitt runtime
der Datei „app.config“ und Festlegen des Werts auf true
deaktivieren:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<runtime>
<AppContextSwitchOverrides value="Switch.System.IO.Compression.DoNotUseNativeZipLibraryForDecompression=true" />
</runtime>
</configuration>
name | Wert |
---|---|
Bereich | Gering |
Version | 4.7.2 |
Typ | Neuzuweisung |
Betroffene APIs
Sicherstellen, dass System.Uri einen konsistenten reservierten Zeichensatz verwendet
Details
In System.Uri sind bestimmte prozentcodierte Zeichen, die manchmal decodiert wurden, jetzt konsistent linkscodiert. Dies tritt für die Eigenschaften und Methoden auf, die auf die Pfad-, Abfrage-, Fragment- oder Benutzerinformationenkomponenten des URIs zugreifen. Das Verhalten ändert sich nur, wenn die beiden folgenden Bedingungen erfüllt sind:
- Der URI enthält die codierte Form eines der folgenden reservierten Zeichen:
:
,'
,(
,)
,!
oder*
. - Der URI enthält ein Unicode- oder nicht codiertes reserviertes Zeichen. Wenn beide oben genannten Kriterien erfüllt sind, werden die codierten reservierten Zeichen linkscodiert. In früheren Versionen von .NET Framework wurden sie decodiert.
Vorschlag
Für Anwendungen mit Zielversionen von .NET Framework ab .NET Framework 4.7.2 ist dieses neue Decodierungsverhalten standardmäßig aktiviert. Wenn diese Änderung nicht erwünscht ist, können Sie sie deaktivieren, indem Sie den Schalter AppContextSwitchOverrides dem Abschnitt <runtime>
Ihrer Anwendungskonfigurationsdatei hinzufügen:
<runtime>
<AppContextSwitchOverrides value="Switch.System.Uri.DontEnableStrictRFC3986ReservedCharacterSets=true" />
</runtime>
Für Anwendungen mit früheren Zielversionen von .NET Framework, die aber mit Versionen ab .NET Framework 4.7.2 ausgeführt werden, ist das neue Decodierungsverhalten standardmäßig deaktiviert. Sie können sie aktivieren, indem Sie den Schalter AppContextSwitchOverrides dem Abschnitt <runtime>
Ihrer Anwendungskonfigurationsdatei hinzufügen:
<runtime>
<AppContextSwitchOverrides value="Switch.System.Uri.DontEnableStrictRFC3986ReservedCharacterSets=false" />
</runtime>
name | Wert |
---|---|
Bereich | Gering |
Version | 4.7.2 |
Typ | Neuzuweisung |
Betroffene APIs
Resgen lehnt das Laden von Inhalten aus dem Web ab
Details
RESX-Dateien können binär formatierte Eingaben enthalten. Wenn Sie versuchen, mit Resgen eine Datei zu laden, die aus einem nicht vertrauenswürdigen Speicherort heruntergeladen wurde, schlägt das Laden der Eingabe standardmäßig fehl.
Vorschlag
Benutzer*innen von Resgen, die binär formatierte Eingaben aus nicht vertrauenswürdigen Speicherorten laden müssen, können entweder die Markierung des Webs aus der Eingabedatei entfernen oder die Deaktivierungsmethode anwenden. Fügen Sie die folgende Registrierungseinstellung hinzu, um die computerweite Deaktivierungsmethode anzuwenden: [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft.NETFramework\SDK] "AllowProcessOfUntrustedResourceFiles"="true".
Name | Wert |
---|---|
Bereich | Microsoft Edge |
Version | 4.7.2 |
Typ | Neuzuweisung |
Stapelüberwachungen, die bei der Verwendung portabler PDBs abgerufen werden, enthalten nun Quelldatei- und Zeileninformationen, wenn diese angefordert werden
Details
Ab .NET Framework 4.7.2 enthalten Stapelüberwachungen, die bei der Verwendung portabler PDBs abgerufen werden, nun Quelldatei- und Zeileninformationen, wenn diese angefordert werden. In Versionen vor .NET Framework 4.7.2 waren Quelldatei- und Zeileninformationen bei Verwendung portabler PDBs selbst dann nicht verfügbar, wenn diese explizit angefordert wurden.
Vorschlag
Für Anwendungen mit der Zielplattform .NET Framework 4.7.2 können Sie sich gegen Quelldatei- und Zeileninformationen entscheiden, wenn Sie portable PDBs verwenden, wenn diese nicht erwünscht sind, indem Sie Folgendes dem Abschnitt <runtime>
Ihrer Datei „app.config
“ hinzufügen:
<runtime>
<AppContextSwitchOverrides value="Switch.System.Diagnostics.IgnorePortablePDBsInStackTraces=true" />
</runtime>
Bei Anwendungen, die für frühere Versionen von .NET Framework vorgesehen sind, aber in .NET Framework 4.7.2 oder höher ausgeführt werden, können Sie Quelldatei- und Zeileninformationen bei der Verwendung portabler PDBs aktivieren, indem Sie Folgendes dem Abschnitt <runtime>
der Datei „app.config
“ hinzufügen:
<runtime>
<AppContextSwitchOverrides value="Switch.System.Diagnostics.IgnorePortablePDBsInStackTraces=false" />
</runtime>
name | Wert |
---|---|
Bereich | Microsoft Edge |
Version | 4.7.2 |
Typ | Neuzuweisung |
Betroffene APIs
Windows Forms
Verbesserung der Barrierefreiheit von Windows Forms-Steuerelementen für .NET 4.7.2
Details
Die Arbeitsweise des Windows Forms-Frameworks mit Technologien für die Barrierefreiheit wird verbessert, um Kunden von Windows Forms besser zu unterstützen. Folgende Änderungen wurden u.a. vorgenommen:
- Änderungen zum Verbessern der Anzeige während des Modus mit hohem Kontrast
- Änderungen zum Verbessern der Tastaturnavigation in den DataGridView- und MenuStrip-Steuerelementen.
- Änderungen an der Interaktion mit der Sprachausgabe.
Vorschlag
Aktivieren oder Deaktivieren dieser Änderungen: Damit die Anwendung von diesen Änderungen profitieren kann, muss sie unter .NET Framework 4.7.2 oder höher ausgeführt werden. Die Anwendung kann von diesen Änderungen profitieren, wenn Sie Folgendes durchführen:
- Kompilieren Sie diese erneut, um .NET Framework 4.7.2 als Ziel zu verwenden. Diese Änderungen der Barrierefreiheit werden standardmäßig für Windows Forms-Anwendungen aktiviert, die .NET Framework 4.7.2 oder höher als Ziel verwenden.
- Die Anwendung verwendet .NET Framework 4.7.1 oder eine frühere Version als Ziel und deaktiviert veraltete Verhaltensweisen der Barrierefreiheit, indem wie im folgenden Beispiel dargestellt folgender AppContext-Schalter zum Abschnitt
<runtime>
der Datei „app.config“ hinzugefügt und auffalse
festgelegt wird.
<?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>
Beachten Sie Folgendes: Um die Barrierefreiheitsfunktionen zu aktivieren, die in .NET Framework 4.7.2 hinzugefügt wurden, müssen Sie auch die Barrierefreiheitsfunktion von .NET Framework 4.7.1 aktivieren. Bei Anwendungen, die .NET Framework 4.7.2 oder höher als Zielplattform verwenden und das Legacyverhalten für die Barrierefreiheit beibehalten sollen, können Sie die Verwendung des Legacyfeatures für die Barrierefreiheit aktivieren, indem Sie die AppContext-Option auf true
festlegen.
Verwendung von durch das Betriebssystem definierten Farben in Designs mit hohem Kontrast
- Der Dropdownpfeil von ToolStripDropDownButton verwendet jetzt vom Betriebssystem definierte Farben im Design mit hohem Kontrast.
- Button-, RadioButton- und CheckBox-Steuerelemente, bei denen FlatStyle auf FlatStyle.Flat oder FlatStyle.Popup festgelegt ist, verwenden nun die vom Betriebssystem definierten Farben im Design mit hohem Kontrast, wenn dieses ausgewählt ist. Zuvor gab es keinen Kontrast zwischen Text und Hintergrundfarbe, wodurch der Text schwer lesbar war.
- In einem GroupBox-Element enthaltene Steuerelemente, derenEnabled-Eigenschaft auf
false
festgelegt ist, verwenden nun die vom Betriebssystem definierten Farben im Design mit hohem Kontrast. - Die ToolStripButton-, ToolStripComboBox- und ToolStripDropDownButton-Steuerelemente weisen ein höheres Helligkeitskontrastverhältnis im Modus „Hoher Kontrast“ auf.
- DataGridViewLinkCell verwendet standardmäßig die vom Betriebssystem definierten Farben im Modus „Hoher Kontrast“ für die DataGridViewLinkCell.LinkColor-Eigenschaft. HINWEIS: In Windows 10 wurden die Werte für einige Systemfarben mit hohem Kontrast geändert. Das Windows Forms-Framework basiert auf dem Win32-Framework. Die besten Ergebnisse erhalten Sie, wenn Sie die aktuelle Version von Windows ausführen und die neuesten Änderungen am Betriebssystem aktivieren, indem Sie eine app.manifest-Datei zu einer Testanwendung hinzufügen und den Kommentar aus folgendem Code entfernen:
<!-- Windows 10 -->
<supportedOS Id="{8e0f7a12-bfb3-4fe8-b9a5-48fd50a15a9a}" />
Verbesserte Unterstützung für die Sprachausgabe
- Die Sprachausgabe kündigt jetzt den Wert der ToolStripMenuItem.ShortcutKeys-Eigenschaft an, wenn Sie den Text eines ToolStripMenuItem ankündigt.
- Die Sprachausgabe gibt jetzt an, wenn die Enabled-Eigenschaftensatz eines ToolStripMenuItem auf
false
festgelegt ist. - Die Sprachausgabe stellt jetzt Feedback zum Zustand eines Kontrollkästchens bereit, wenn die ListView.CheckBoxes-Eigenschaft auf
true
festgelegt ist. - Die Fokusreihenfolge des Scanmodus der Sprachausgabe ist jetzt mit der visuellen Reihenfolge der Steuerelemente für das ClickOnce-Downloaddialogfenster konsistent.
Verbesserte Unterstützung der DataGridView-Barrierefreiheit
- Zeilen in einer DataGridView können jetzt mithilfe der Tastatur sortiert werden. Ein Benutzer kann jetzt die F3-TASTE verwenden, um anhand der aktuellen Spalte zu sortieren.
- Wenn der DataGridView.SelectionMode auf DataGridViewSelectionMode.FullRowSelect festgelegt ist, ändert sich die Farbe der Spaltenüberschrift, um die aktuelle Spalte anzugeben, wenn der Benutzer mit der TABULATORTASTE die Zellen in der aktuellen Zeile durchläuft.
- Die DataGridViewCell.DataGridViewCellAccessibleObject.Parent-Eigenschaft gibt jetzt das richtige übergeordnete Steuerelement zurück.
Verbesserte visuelle Hinweise
- Die RadioButton- und CheckBox-Steuerelemente mit einer leeren Text-Eigenschaft zeigen nun einen Fokusindikator an, wenn sie den Fokus erhalten.
Verbesserte Unterstützung für das Eigenschaftenraster
Die untergeordneten Elemente des PropertyGrid-Steuerelements geben jetzt nur dann
true
für die IsReadOnlyProperty-Eigenschaft zurück, wenn ein PropertyGrid-Element aktiviert ist.Die untergeordneten Elemente des PropertyGrid-Steuerelements geben jetzt nur dann
Verbesserte Tastaturnavigationfalse
für die IsEnabledProperty-Eigenschaft zurück, wenn ein PropertyGrid-Element vom Benutzer geändert werden kann. Einen Überblick über die Benutzeroberflächenautomatisierung finden Sie unter Benutzeroberflächenautomatisierung: Übersicht.ToolStripButton lässt nun den Fokus zu, wenn das Element in einem ToolStripPanel enthalten ist, für das die TabStop-Eigenschaft auf
true
festgelegt ist.
name | Wert |
---|---|
Bereich | Hauptversion |
Version | 4.7.2 |
Typ | Neuzuweisung |
„ContextMenuStrip.SourceControl“-Eigenschaft enthält im Fall geschachtelter „ToolStripMenuItems“ ein gültiges Steuerelement
Details
In .NET Framework 4.7.1 und früheren Versionen gibt die ContextMenuStrip.SourceControl-Eigenschaft fälschlicherweise NULL zurück, wenn der Benutzer das Menü in geschachtelten ToolStripMenuItem-Steuerelementen öffnet. In .NET Framework 4.7.2 und höher ist die SourceControl-Eigenschaft immer auf das tatsächliche Quellsteuerelement festgelegt.
Vorschlag
Aktivieren oder Deaktivieren dieser Änderungen: Damit eine Anwendung von diesen Änderungen profitieren kann, muss sie unter .NET Framework 4.7.2 oder höher ausgeführt werden. Die Anwendung kann von diesen Änderungen profitieren, wenn Sie Folgendes durchführen:
- Die Anwendung ist auf .NET Framework 4.7.2 ausgelegt. Diese Änderung wird standardmäßig für Windows Forms-Anwendungen aktiviert, die auf .NET Framework 4.7.2 oder höher ausgelegt sind.
- Die Anwendung ist auf .NET Framework 4.7.1 oder eine frühere Version ausgelegt und deaktiviert veraltete Verhaltensweisen der Barrierefreiheit, indem wie im folgenden Beispiel dargestellt folgender AppContext-Schalter zum Abschnitt
<runtime>
der Datei „app.config“ hinzugefügt und auffalse
festgelegt wird.
<runtime>
<AppContextSwitchOverrides value="Switch.System.Windows.Forms.UseLegacyContextMenuStripSourceControlValue=false"/>
</runtime>
Bei Anwendungen, die auf .NET Framework 4.7.2 oder höher ausgelegt sind und das veraltete Barrierefreiheitsverhalten beibehalten sollen, können Sie die Verwendung des veralteten Quellcodeverwaltungswerts aktivieren, indem Sie den „AppContext“-Schalter auf true
festlegen.
name | Wert |
---|---|
Bereich | Microsoft Edge |
Version | 4.7.2 |
Typ | Neuzuweisung |
Betroffene APIs
PrivateFontCollection.AddFontFile-Methode gibt Schriftartenressourcen frei
Details
In .NET Framework 4.7.1 und früheren Versionen gibt die System.Drawing.Text.PrivateFontCollection-Klasse keine GDI+-Schriftartenressourcen frei, nachdem PrivateFontCollection für Font-Objekte verworfen wird, die dieser Sammlung mit der AddFontFile(String)-Methode hinzugefügt werden. In .NET Framework 4.7.2 oder höher gibt Dispose die GDI+-Schriftarten frei, die der Sammlung als Dateien hinzugefügt wurden.
Vorschlag
Aktivieren oder Deaktivieren dieser Änderungen: Damit eine Anwendung von diesen Änderungen profitieren kann, muss sie unter .NET Framework 4.7.2 oder höher ausgeführt werden. Die Anwendung kann von diesen Änderungen profitieren, wenn Sie Folgendes durchführen:
- Kompilieren Sie diese erneut, um .NET Framework 4.7.2 als Ziel zu verwenden. Diese Änderung wird standardmäßig für Windows Forms-Anwendungen aktiviert, die für .NET Framework 4.7.2 oder höher ausgelegt sind.
- Die Anwendung ist für .NET Framework 4.7.1 oder eine frühere Version ausgelegt und deaktiviert veraltete Verhaltensweisen der Barrierefreiheit, indem wie im folgenden Beispiel dargestellt folgender AppContext-Schalter zum Abschnitt
<runtime>
der Datei „app.config“ hinzugefügt und auffalse
festgelegt wird.
<runtime>
<AppContextSwitchOverrides value="Switch.System.Drawing.Text.DoNotRemoveGdiFontsResourcesFromFontCollection=false"/>
</runtime>
Bei Anwendungen, die für .NET Framework 4.7.2 oder höher ausgelegt sind und das Legacyverhalten beibehalten sollen, können Sie die Nichtfreigabe von Schriftartenressourcen aktivieren, indem dieser AppContext-Schalter ausdrücklich auf true
festgelegt wird.
name | Wert |
---|---|
Bereich | Microsoft Edge |
Version | 4.7.2 |
Typ | Neuzuweisung |
Betroffene APIs
Die UpButton- und DownButton-Aktionen der Domäne von WinForm sind jetzt synchronisiert
Details
In .NET Framework 4.7.1 und früheren Versionen wird die DomainUpDown.UpButton()-Aktion des DomainUpDown-Steuerelements ignoriert, wenn Steuerelementtext vorhanden ist, und der Entwickler muss die DomainUpDown.DownButton()-Aktion für das Steuerelement vor der DomainUpDown.UpButton()-Aktion verwenden. Ab .NET Framework 4.7.2 funktionieren die DomainUpDown.UpButton()- und DomainUpDown.DownButton()-Aktionen unabhängig voneinander in diesem Szenario und bleiben synchron.
Vorschlag
Damit eine Anwendung von diesen Änderungen profitieren kann, muss sie unter .NET Framework 4.7.2 oder höher ausgeführt werden. Die Anwendung kann von diesen Änderungen profitieren, wenn Sie Folgendes durchführen:
- Kompilieren Sie diese erneut, um .NET Framework 4.7.2 als Ziel zu verwenden. Diese Änderung wird standardmäßig für Windows Forms-Anwendungen aktiviert, die für .NET Framework 4.7.2 oder höher ausgelegt sind.
- Veraltetes Scrollingverhalten wird deaktiviert, indem wie im folgenden Beispiel dargestellt folgender AppContext-Schalter dem Abschnitt
<runtime>
der Datei „app.config“ hinzugefügt und auffalse
festgelegt wird.
<runtime>
<AppContextSwitchOverrides value="Switch.System.Windows.Forms.DomainUpDown.UseLegacyScrolling=false"/>
</runtime>
name | Wert |
---|---|
Bereich | Microsoft Edge |
Version | 4.7.2 |
Typ | Neuzuweisung |
Betroffene APIs
Windows Presentation Foundation (WPF)
Der Tastaturfokus bewegt sich jetzt ordnungsgemäß über mehrere Ebenen von WinForms-/WPF-Hosting
Details
Nehmen Sie als Beispiel eine WPF-Anwendung, die ein WinForms-Steuerelement hostet, das wiederum WPF-Steuerelemente hostet. Benutzer können die WinForms-Ebene möglicherweise nicht mit der TABULATORTASTE verlassen, wenn das erste oder letzte Steuerelement in diese Ebene System.Windows.Forms.Integration.ElementHost
von WPF ist. Diese Änderung behebt dieses Problem, und Benutzer können die WinForms-Ebene jetzt mit der TABULATORTASTE verlassen. Automatisierte Anwendungen, die erfordern, dass der Fokus die WinForms-Ebene nie verlässt, funktionieren möglicherweise nicht mehr wie erwartet.
Vorschlag
Ein Entwickler, der diese Änderung für eine niedrigere Frameworkversion als .NET 4.7.2 nutzen möchte, kann die folgende Gruppe von AppContext-Flags auf FALSE festlegen, damit die Änderung aktiviert wird.
<configuration>
<runtime>
<AppContextSwitchOverrides value="Switch.UseLegacyAccessibilityFeatures=false;Switch.UseLegacyAccessibilityFeatures.2=false"/>
</runtime>
</configuration>
WPF-Anwendungen müssen alle frühen Barrierefreiheitsverbesserungen aktivieren, um die späteren Verbesserungen abrufen zu können. Das heißt, die Switch.UseLegacyAccessibilityFeatures
- und Switch.UseLegacyAccessibilityFeatures.2
-Schalter müssen festgelegt werden. Ein-Entwickler, der die vorherige Funktionalität für .NET 4.7.2 oder höher benötigt, kann das folgende AppContext-Flag auf TRUE festlegen, damit die Änderung deaktiviert wird.
<configuration>
<runtime>
<AppContextSwitchOverrides value="Switch.UseLegacyAccessibilityFeatures.2=true"/>
</runtime>
</configuration>
name | Wert |
---|---|
Bereich | Microsoft Edge |
Version | 4.7.2 |
Typ | Neuzuweisung |
Der Standardhashalgorithmus für den Markupcompiler von WPF ist jetzt SHA256
Details
Die WPF-MarkupCompiler stellt Kompilierungsdienste für XAML-Markupdateien bereit. In .NET Framework 4.7.1 und früheren Versionen war SHA1 der Standardhashalgorithmus, der für Prüfsummen verwendet wurde. Diese Standardeinstellung wurde ab .NET Framework 4.7.2 aufgrund von Sicherheitsbedenken im Zusammenhang mit SHA1 in SHA256 geändert. Diese Änderung wirkt sich auf die gesamte Prüfsummengenerierung für Markupdateien während der Kompilierung aus.
Vorschlag
Ein Entwickler, der als Zielplattform .NET Framework 4.7.2 oder höher verwendet und das SHA1-Hashverhalten wiederherstellen möchte, muss das folgende AppContext-Flag festlegen.
<configuration>
<runtime>
<AppContextSwitchOverrides value="Switch.System.Windows.Markup.DoNotUseSha256ForMarkupCompilerChecksumAlgorithm=true"/>
</runtime>
</configuration>
Ein Entwickler, der SHA256-Hashwerte für eine niedrigere Frameworkversion als .NET 4.7.2 nutzen möchte, muss das unten genannte AppContext-Flag festlegen. Beachten Sie, dass die installierte Version von .NET Framework 4.7.2 oder höher sein muss.
<configuration>
<runtime>
<AppContextSwitchOverrides value="Switch.System.Windows.Markup.DoNotUseSha256ForMarkupCompilerChecksumAlgorithm=false"/>
</runtime>
</configuration>
name | Wert |
---|---|
Bereich | Transparent |
Version | 4.7.2 |
Typ | Neuzuweisung |
Bei der Verarbeitung von WPF AppDomain-Herunterfahrvorgängen kann nun „Dispatcher.Invoke“ zur Bereinigung von schwachen Ereignissen aufgerufen werden
Details
In .NET Framework 4.7.1 und früheren Versionen erstellt WPF möglicherweise während des Herunterfahrens von AppDomain einen System.Windows.Threading.Dispatcher im .NET-Finalizerthread. Dies wurde in .NET Framework 4.7.2 und höheren Versionen korrigiert, indem nun bei der Bereinigung von schwachen Ereignissen Threads berücksichtigt werden. Aus diesem Grund kann WPF Dispatcher.Invoke aufrufen, um den Bereinigungsprozess abzuschließen. In manchen Anwendungen kann diese Änderung des Finalizerzeitpunkts zu Ausnahmen beim Herunterfahren von AppDomain oder des Prozesses führen. Dies tritt in der Regel bei Anwendungen auf, die die Verteiler, die auf Arbeitsthreads ausgeführt werden, nicht ordnungsgemäß herunterfahren, bevor der Prozess oder AppDomain heruntergefahren wird. Bei solchen Anwendungen muss darauf geachtet werden, dass die Lebensdauer von Verteilern angemessen verwaltet wird.
Vorschlag
In .NET Framework 4.7.2 und höheren Versionen können Entwickler diesen Fix deaktivieren, um Probleme bei der Zeitsteuerung zu verringern (aber nicht zu verhindern), die aufgrund der Bereinigungsänderung auftreten können. Verwenden Sie zum Deaktivieren der Bereinigungsänderung das folgende AppContext-Flag.
<configuration>
<runtime>
<AppContextSwitchOverrides value="Switch.MS.Internal.DoNotInvokeInWeakEventTableShutdownListener=true"/>
</runtime>
</configuration>
name | Wert |
---|---|
Bereich | Microsoft Edge |
Version | 4.7.2 |
Typ | Neuzuweisung |
Ändern eines Primärschlüssels durch WPF beim Anzeigen von ADO-Daten in einem Master/Detail-Szenario
Details
Nehmen Sie an, Sie haben eine ADO-Auflistung von Elementen des Typs Order
mit einer Beziehung namens „OrderDetails“, durch die diese Auflistung über den Primärschlüssel „OrderID“ mit einer Auflistung von Elementen des Typs Detail
verknüpft wird. In Ihrer WPF-App können Sie ein Listensteuerelement an die Details für einen bestimmten Auftrag binden:
<ListBox ItemsSource="{Binding Path=OrderDetails}" >
Beim DataContext handelt es sich um ein Order
-Element. WPF ruft den Wert der Eigenschaft OrderDetails
ab. Es handelt sich hierbei um eine D-Sammlung aller Detail
-Elemente, deren OrderID
der OrderID
des Masterelements entspricht. Der Behavior Change wird angezeigt, wenn Sie den Primärschlüssel OrderID
des Masterelements ändern. ADO ändert automatisch die OrderID
jedes der betroffenen Datensätze in der Sammlung „Details“ (also diejenigen, die in Sammlung D kopiert wurden). Was passiert mit D?
- Altes Verhalten: Sammlung D wird gelöscht. Das Masterelement löst keine Änderungsbenachrichtigung für die Eigenschaft
OrderDetails
aus. Das ListBox-Element verwendet weiterhin Sammlung D, die jetzt leer ist. - Neues Verhalten: Auflistung D wird nicht geändert. Jedes enthaltene Element löst Änderungsbenachrichtigung für die Eigenschaft
OrderID
aus. ListBox verwendet weiterhin Sammlung D, und zeigt die Details mit der neuenOrderID
an. WPF implementiert das neue Verhalten, indem Sammlung D auf andere Weise erstellt wird: durch Aufrufen der ADO-Methode DataRowView.CreateChildView(DataRelation, Boolean) mit dem auftrue
festgelegten ArgumentfollowParent
.
Vorschlag
Eine App ruft das neue Verhalten durch Verwendung der folgenden AppContext-Option auf.
<configuration>
<runtime>
<AppContextSwitchOverrides value="Switch.System.Windows.Data.DoNotUseFollowParentWhenBindingToADODataRelation=false"/>
</runtime>
</configuration>
Die Option ist für Apps, die auf .NET 4.7.1 oder niedriger ausgelegt sind, standardmäßig auf true
festgelegt (altes Verhalten). Für Apps, die auf .NET 4.7.2 oder höher ausgelegt sind, ist sie standardmäßig auf false
festgelegt.
name | Wert |
---|---|
Bereich | Gering |
Version | 4.7.2 |
Typ | Neuzuweisung |
WPF FocusVisual für RadioButton und CheckBox wird jetzt ordnungsgemäß angezeigt, wenn die Steuerelemente keinen Inhalt enthalten
Details
In .NET Framework 4.7.1 und früheren Versionen weisen System.Windows.Controls.CheckBox und System.Windows.Controls.RadioButton von WPF inkonsistente und im klassischen Design und im Design mit hohem Kontrast falsche visuelle Fokuselemente auf. Diese Probleme treten in Fällen auf, in denen für die Steuerelemente keine Inhalte festgelegt sind. Dadurch kann der Übergang zwischen Designs verwirrend wirken und das visuelle Fokuselement schwer zu erkennen sein. In .NET Framework, 4.7.2 sind diese visuellen Elemente jetzt designübergreifend konsistenter und im klassischen Design sowie im Design mit hohem Kontrast leichter zu erkennen.
Vorschlag
Ein Entwickler, die Code für .NET Framework 4.7.2 erstellt und das Verhalten von .NET 4.7.1 wiederherstellen möchte, muss das folgende AppContext-Flag festlegen.
<configuration>
<runtime>
<AppContextSwitchOverrides value="Switch.UseLegacyAccessibilityFeatures.2=true;"/>
</runtime>
</configuration>
Ein Entwickler, der diese Änderung für eine niedrigere Frameworkversion als .NET 4.7.2 nutzen möchte, muss die folgenden AppContext-Flags festlegen. Beachten Sie, dass alle Flags ordnungsgemäß festgelegt werden müssen, und die installierte Version von .NET Framework muss 4.7.2 oder höher sein. WPF-Anwendungen müssen alle früheren Barrierefreiheitsverbesserungen aktivieren, um die neuesten Verbesserungen abrufen zu können. Stellen Sie zu diesem Zweck sicher, dass die AppContext-Schalter „Switch.UseLegacyAccessibilityFeatures“ und „Switch.UseLegacyAccessibilityFeatures.2“ auf FALSE festgelegt sind.
<configuration>
<runtime>
<AppContextSwitchOverrides value="Switch.UseLegacyAccessibilityFeatures=false;Switch.UseLegacyAccessibilityFeatures.2=false;"/>
</runtime>
</configuration>
name | Wert |
---|---|
Bereich | Microsoft Edge |
Version | 4.7.2 |
Typ | Neuzuweisung |
TextBox-/PasswordBox-Textauswahl von WPF folgt nicht den Systemfarben
Details
In .NET Framework 4.7.1 und früheren Versionen konnten System.Windows.Controls.TextBox
und System.Windows.Controls.PasswordBox
von WPF nur eine Textauswahl aus der Adorner-Ebene rendern. In einigen Systemdesigns verdeckte dies Text, wodurch die Lesbarkeit erschwert wurde. In .NET Framework 4.7.2 und höher besteht für Entwickler eine Option, ein nicht auf Adorner basierendes Auswahlrenderingschema zu aktivieren, das dieses Problem behebt.
Vorschlag
Ein Entwickler, die diese Änderung nutzen möchte, muss das folgende AppContext-Flag entsprechend festlegen. Um dieses Feature nutzen zu können, muss die installierte Version von .NET Framework 4.7.2 oder höher sein. Um die nicht auf Adorner basierende Auswahl zu aktivieren, verwenden Sie das folgenden AppContext-Flag.
<configuration>
<runtime>
<AppContextSwitchOverrides value="Switch.System.Windows.Controls.Text.UseAdornerForTextboxSelectionRendering=false"/>
</runtime>
</configuration>
name | Wert |
---|---|
Bereich | Microsoft Edge |
Version | 4.7.2 |
Typ | Neuzuweisung |
Windows Workflow Foundation (WF)
Vermeiden von Endlosrekursion für IWorkflowInstanceManagement.TransactedCancel und IWorkflowInstanceManagement.TransactedTerminate
Details
Wenn Sie IWorkflowInstanceManagement.TransactedCancel- oder IWorkflowInstanceManagement.TransactedTerminate-APIs verwenden, um eine Worklowdienstinstanz abzubrechen oder zu beenden, kann für die Workflowinstanz unter bestimmten Umständen aufgrund von Endlosrekursion ein Stapelüberlauf auftreten, wenn die Workflow
-Laufzeit versucht, die Dienstinstanz als Teil der Verarbeitung der Anforderung persistent zu speichern. Das Problem tritt auf, wenn sich die Workflowinstanz in einem Zustand befindet, in dem sie auf den Abschluss einer anderen ausstehenden WCF-Anforderung an einen anderen Dienst wartet. Die Vorgänge TransactedCancel
und TransactedTerminate
erstellen Arbeitselemente, die für die Workflowdienstinstanz in die Warteschlange eingereiht werden. Diese Arbeitselemente werden nicht im Rahmen der Verarbeitung der TransactedCancel/TransactedTerminate
-Anforderung ausgeführt. Da die Workflowdienstinstanz damit ausgelastet ist, auf den Abschluss der anderen ausstehenden WCF-Anforderung zu warten, verbleibt das erstellte Arbeitselement in der Warteschlange. Der TransactedCancel/TransactedTerminate
-Vorgang wird abgeschlossen, und die Steuerung wird zurück an den Client übergeben. Wenn die dem TransactedCancel/TransactedTerminate
-Vorgang zugeordnete Transaktion den Commit versucht, muss sie den Zustand der Workflowdienstinstanz persistent speichern. Da aber für die Instanz eine ausstehende WCF
-Anforderung vorliegt, kann die Workflowruntime die Workflowdienstinstanz nicht persistent speichern, und eine Endlosrekursionsschleife führt zum Stapelüberlauf. Da TransactedCancel
und TransactedTerminate
nur ein Arbeitselement im Speicher erstellen, besitzt die Tatsache, dass eine Transaktion vorhanden ist, keinerlei Auswirkung. Durch ein Rollback der Transaktion wird das Arbeitselement nicht verworfen. Zur Lösung dieses Problems wurde ab .NET Framework 4.7.2 eine AppSetting
eingeführt, die web.config/app.config
des Workflowdiensts hinzugefügt werden kann und angibt, dass Transaktionen für TransactedCancel
und TransactedTerminate
ignoriert werden sollen. Auf diese Weise kann die Transaktion einen Commit ausführen, ohne warten zu müssen, bis die Workflowinstanz dauerhaft gespeichert wurde. Das AppSetting-Element für dieses Feature hat den Namen microsoft:WorkflowServices:IgnoreTransactionsForTransactedCancelAndTransactedTerminate
. Der Wert true
gibt an, dass die Transaktion ignoriert werden soll, um so den Stapelüberlauf zu vermeiden. Der Standardwert dieser AppSetting ist false
. Vorhandene Workflowdienstinstanzen sind daher nicht betroffen.
Vorschlag
Wenn Sie AppFabric oder einen anderen IWorkflowInstanceManagement-Client verwenden und beim Versuch, eine Workflowinstanz abzubrechen oder zu beenden, ein Stapelüberlauf in der Workflowdienstinstanz auftritt, können Sie Folgendes zum Abschnitt <appSettings>
der Datei „web.config/app.config“ für den Workflowdienst hinzufügen:
<add key="microsoft:WorkflowServices:IgnoreTransactionsForTransactedCancelAndTransactedTerminate" value="true"/>
Wenn dieses Problem nicht auftritt, müssen Sie diese Aktion nicht ausführen.
name | Wert |
---|---|
Bereich | Microsoft Edge |
Version | 4.7.2 |
Typ | Neuzuweisung |