Neuzuweisung von Änderungen für die Migration von .NET Framework 4.6 zu 4.7.2Retargeting Changes for Migration from .NET Framework 4.6 to 4.7.2

EinführungIntroduction

Neuzuweisungsänderungen wirken sich auf Apps aus, die für eine andere .NET Framework-Instanz neu kompiliert wurden.Retargeting changes affect apps that are recompiled to target a different .NET Framework. Dazu zählen:They include:

  • Änderungen in der Entwurfszeitumgebung.Changes in the design-time environment. Beispielsweise können Buildtools Warnungen ausgeben, obwohl dies zuvor nicht der Fall war.For example, build tools may emit warnings when previously they did not.

  • Änderungen in der Laufzeitumgebung.Changes in the runtime environment. Dies betrifft nur Apps, die speziell diese .NET Framework-Instanz als Ziel verwenden.These affect only apps that specifically target the retargeted .NET Framework. Apps, die auf frühere Versionen von .NET Framework abzielen, verhalten sich so, als würden sie in diesen Versionen ausgeführt.Apps that target previous versions of the .NET Framework behave as they did when running under those versions.

In den Artikeln, in denen Neuzuweisungsänderungen beschrieben werden, haben wir die einzelnen Punkte entsprechend ihrer erwarteten Auswirkung eingestuft:In the topics that describe retargeting changes, we have classified individual items by their expected impact, as follows:

Größer Dies ist eine wesentliche Änderung, die viele Apps beeinträchtigt oder erhebliche Änderungen des Codes erforderlich macht.Major This is a significant change that affects a large number of apps or that requires substantial modification of code.

Kleiner Dies ist eine Änderung, die eine kleine Anzahl von Apps beeinträchtigt oder geringfügige Änderungen des Codes erforderlich macht.Minor This is a change that affects a small number of apps or that requires minor modification of code.

Grenzfall Diese Änderung beeinträchtigt Apps nur in sehr spezifischen Szenarien, die nicht häufig vorkommen.Edge case This is a change that affects apps under very specific scenarios that are not common.

Transparent Diese Änderung hat keine nennenswerten Auswirkungen, die Entwickler oder Benutzer beachten müssten.Transparent This is a change that has no noticeable effect on the app's developer or user. Die App sollte keine Änderung benötigen.The app should not require modification because of this change.

Wenn Sie von .NET Framework 4.6 zu 4.7.2 migrieren, finden Sie in den folgenden Abschnitten weitere Informationen zu den Anwendungskompatibilitätsproblemen, die sich möglicherweise auf Ihre App auswirken können:If you are migrating from the .NET Framework 4.6 to 4.7.2, review the following topics for application compatibility issues that may affect your app:

ASP.NETASP.NET

Verbesserungen der Barrierefreiheit von ASP.NET in .NET Framework 4.7.1ASP.NET Accessibility Improvements in .NET Framework 4.7.1

DetailsDetails 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.Starting with the .NET Framework 4.7.1, ASP.NET has improved how ASP.NET Web Controls work with accessibility technology in Visual Studio to better support ASP.NET customers. Folgende Änderungen wurden u.a. vorgenommen:These include the following changes:
  • Ä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.Changes to implement missing UI accessibility patterns in controls, like the Add Field dialog in the Details View wizard, or the Configure ListView dialog of the ListView wizard.
  • Änderungen zur Verbesserung der Anzeige im Modus für hohe Kontraste, z.B. beim DataPager-Feld-Editor.Changes to improve the display in High Contrast mode, like the Data Pager Fields 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.Changes to improve the keyboard navigation experiences for controls, like the Fields dialog in the Edit Pager Fields wizard of the DataPager control, the Configure ObjectContext dialog, or the Configure Data Selection dialog of the Configure Data Source wizard.
VorschlagSuggestion 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.How to opt in or out of these changes In order for the Visual Studio Designer to benefit from these changes, it must run on the .NET Framework 4.7.1 or later. Die Webanwendung kann diese Änderungen nutzen, wenn Sie folgende Schritte durchführen:The web application can benefit from these changes in either of the following ways:
  • 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.Install Visual Studio 2017 15.3 or later, which supports the new accessibility features with the following AppContext Switch by default.
  • Deaktivieren Sie die Legacy-Barrierefreiheitsverhalten, indem Sie in der Konfigurationsdatei „devenv.exe“ dem Abschnitt <runtime> die AppContext-Option Switch.UseLegacyAccessibilityFeatures hinzufügen und sie auf false festlegen, wie im folgenden Beispiel dargestellt wird.Opt out of the legacy accessibility behaviors by adding the Switch.UseLegacyAccessibilityFeatures AppContext switch to the <runtime> section in the devenv.exe.config file and setting it to false, as the following example shows.
<?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.Applications that target the .NET Framework 4.7.1 or later and want to preserve the legacy accessibility behavior can opt in to the use of legacy accessibility features by explicitly setting this AppContext switch to true.
BereichScope GeringMinor
VersionVersion 4.7.14.7.1
TypType NeuzuweisungRetargeting

Einschränken von gleichzeitigen Anforderungen pro SitzungThrottle concurrent requests per session

DetailsDetails 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.In the .NET Framework 4.6.2 and earlier, ASP.NET executes requests with the same Sessionid sequentially, and ASP.NET always issues the Sessionid through cookies by default. Wenn eine Seite zum Reagieren viel Zeit in Anspruch nimmt, wird die Serverleistung durch einfaches Drücken von F5 im Browser erheblich eingeschränkt.If a page takes a long time to respond, it will significantly degrade server performance just by pressing F5 on the browser. Mit der Fehlerbehebung verfolgt ein Zähler die in die Warteschlange eingestellten Anforderungen nach und beendet die Anforderungen, wenn sie einen angegebenen Grenzwert überschreiten.In the fix, we added a counter to track the queued requests and terminate the requests when they exceed a specified limit. Der Standardwert ist 50.The default value is 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.If the limit is reached, a warning will be logged in the event log, and an HTTP 500 response may be recorded in the IIS log.
VorschlagSuggestion 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.To restore the old behavior, you can add the following setting to your web.config file to opt out of the new behavior.
<appSettings>
<add key="aspnet:RequestQueueLimitPerSession" value="2147483647"/>
</appSettings>
BereichScope Microsoft EdgeEdge
VersionVersion 4.74.7
TypType NeuzuweisungRetargeting

KernspeicherCore

Die AesCryptoServiceProvider-Entschlüsselungsmethode stellt eine wiederverwendbare Transformation bereitAesCryptoServiceProvider decryptor provides a reusable transform

DetailsDetails Für Apps mit der Zielplattform .NET Framework 4.6.2 und höher stellt die AesCryptoServiceProvider-Entschlüsselungsmethode eine wiederverwendbare Transformation bereit.Starting with apps that target the .NET Framework 4.6.2, the AesCryptoServiceProvider decryptor provides a reusable transform. Nach einem Aufruf von TransformFinalBlock(Byte[], Int32, Int32) wird die Transformation erneut initialisiert und kann wiederverwendet werden.After a call to TransformFinalBlock(Byte[], Int32, Int32), the transform is reinitialized and can be reused. Bei Apps mit früheren Versionen von .NET Framework als Zielplattform wird bei dem Versuch, die Entschlüsselungsmethode durch Aufrufen von TransformBlock(Byte[], Int32, Int32, Byte[], Int32) nach einem Aufruf von TransformFinalBlock(Byte[], Int32, Int32) wiederzuverwenden, eine CryptographicException ausgelöst, oder es werden fehlerhafte Daten erstellt.For apps that target earlier versions of the .NET Framework, attempting to reuse the decryptor by calling TransformBlock(Byte[], Int32, Int32, Byte[], Int32) after a call to TransformFinalBlock(Byte[], Int32, Int32) throws a CryptographicException or produces corrupted data.
VorschlagSuggestion Der Einfluss dieser Änderung sollte klein sein, da dies das erwartete Verhalten ist. Für Anwendungen, die vom bisherigen Verhalten abhängen, muss dieses Verhalten nicht übernommen werden, wenn Sie dem Abschnitt <runtime> der Anwendungskonfigurationsdatei die folgende Konfigurationseinstellung hinzufügen:The impact of this change should be minimal, since this is the expected behavior.Applications that depend on the previous behavior can opt out of it using it by adding the following configuration setting to the <runtime> section of the application's configuration file:
<runtime>
<AppContextSwitchOverrides value="Switch.System.Security.Cryptography.AesCryptoServiceProvider.DontCorrectlyResetDecryptor=true"/>
</runtime>
Für Anwendungen, die für frühere Versionen von .NET Framework vorgesehen sind, aber unter .NET Framework 4.6.2 oder einer höheren Version ausgeführt werden, kann dieses Verhalten übernommen werden, indem dem <runtime>-Abschnitt der Anwendungskonfigurationsdatei die folgende Konfigurationseinstellung hinzugefügt wird:In addition, applications that target a previous version of the .NET Framework but are running under a version of the .NET Framework starting with .NET Framework 4.6.2 can opt in to it by adding the following configuration setting to the <runtime> section of the application's configuration file:
<runtime>
<AppContextSwitchOverrides value="Switch.System.Security.Cryptography.AesCryptoServiceProvider.DontCorrectlyResetDecryptor=false"/>
</runtime>
BereichScope GeringMinor
VersionVersion 4.6.24.6.2
TypType NeuzuweisungRetargeting
Betroffene APIsAffected APIs

Zulassen bidirektionaler Unicode-Steuerzeichen in URIsAllow Unicode Bidirectional Control Characters in URIs

DetailsDetails Unicode gibt mehrere spezielle Steuerzeichen an, um die Ausrichtung von Text anzugeben.Unicode specifies several special control characters used to specify the orientation of text. 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.In previous versions of the .NET Framework, these characters were incorrectly stripped from all URIs even if they were present in their percent-encoded form. Damit RFC 3987 besser berücksichtigt wird, sind diese Zeichen in URIs nun zulässig.In order to better follow RFC 3987, we now allow these characters in URIs. Wenn sie uncodiert in einem URI gefunden werden, werden sie prozentcodiert.When found unencoded in a URI, they are percent-encoded. Wenn sie prozentcodiert gefunden werden, bleiben sie unverändert.When found percent-encoded they are left as-is.
VorschlagSuggestion 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.For applications that target versions of .NET Framework starting with 4.7.2, support for Unicode bidirectional characters is enabled by default. Wenn diese Änderung nicht erwünscht ist, können Sie sie deaktivieren, indem Sie den Schalter AppContextSwitchOverrides dem Abschnitt <runtime> Ihrer Anwendungskonfigurationsdatei hinzufügen:If this change is undesirable, you can disable it by adding the following AppContextSwitchOverrides switch to the <runtime> section of the application configuration file:
<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.For applications that target earlier versions of the .NET Framework but are running under versions starting with .NET Framework 4.7.2, support for Unicode bidirectional characters is disabled by default. Sie können sie aktivieren, indem Sie den Schalter AppContextSwitchOverrides dem Abschnitt <runtime> Ihrer Anwendungskonfigurationsdatei hinzufügen:You can enable it by adding the following AppContextSwitchOverrides switch to the <runtime> section of the application configuration file::
<runtime>
<AppContextSwitchOverrides value="Switch.System.Uri.DontKeepUnicodeBidiFormattingCharacters=false" />
</runtime>
BereichScope GeringMinor
VersionVersion 4.7.24.7.2
TypType NeuzuweisungRetargeting
Betroffene APIsAffected APIs

Aufrufe von ClaimsIdentity-KonstruktorenCalls to ClaimsIdentity constructors

DetailsDetails Ab .NET Framework 4.6.2 legen ClaimsIdentity-Konstruktoren mit einem IIdentity-Parameter die Eigenschaft Actor anders fest.Starting with the .NET Framework 4.6.2, there is a change in how ClaimsIdentity constructors with an IIdentity parameter set the Actor property. Wenn es sich bei dem IIdentity-Argument um ein ClaimsIdentity-Objekt handelt und die Actor-Eigenschaft des ClaimsIdentity-Objekts nicht null ist, wird die Actor-Eigenschaft mithilfe der Clone()-Methode angefügt.If the IIdentity argument is a ClaimsIdentity object, and the Actor property of that ClaimsIdentity object is not null, the Actor property is attached by using the Clone() method. In .NET Framework 4.6.1 und früheren Versionen wurde die Actor-Eigenschaft als vorhandener Verweis angefügt. Aufgrund der Änderung ab .NET Framework 4.6.2 entspricht die Actor-Eigenschaft des neuen ClaimsIdentity-Objekts nicht der Actor-Eigenschaft des Konstruktorarguments IIdentity.In the Framework 4.6.1 and earlier versions, the Actor property is attached as an existing reference.Because of this change, starting with the .NET Framework 4.6.2, the Actor property of the new ClaimsIdentity object is not equal to the Actor property of the constructor's IIdentity argument. In .NET Framework 4.6.1 und früheren Versionen sind die Eigenschaften gleich.In the .NET Framework 4.6.1 and earlier versions, it is equal.
VorschlagSuggestion Wenn dieses Verhalten nicht erwünscht ist, können Sie das vorherige Verhalten wiederherstellen, indem Sie den Switch.System.Security.ClaimsIdentity.SetActorAsReferenceWhenCopyingClaimsIdentity-Schalter in Ihrer Anwendungskonfigurationsdatei auf true festlegen.If this behavior is undesirable, you can restore the previous behavior by setting the Switch.System.Security.ClaimsIdentity.SetActorAsReferenceWhenCopyingClaimsIdentity switch in your application configuration file to true. Dazu müssen Sie dem Abschnitt <runtime> Ihrer web.config-Datei Folgendes hinzufügen:This requires that you add the following to the <runtime> section of your web.config file:
<configuration>
<runtime>
<AppContextSwitchOverrides value="Switch.System.Security.ClaimsIdentity.SetActorAsReferenceWhenCopyingClaimsIdentity=true" />
</runtime>
</configuration>
BereichScope Microsoft EdgeEdge
VersionVersion 4.6.24.6.2
TypType NeuzuweisungRetargeting
Betroffene APIsAffected APIs

Änderung bei Pfadtrennzeichen in der FullName-Eigenschaft von ZipArchiveEntry-ObjektenChange in path separator character in FullName property of ZipArchiveEntry objects

DetailsDetails Bei Apps für .NET Framework 4.6.1 und höhere Versionen hat sich das Pfadtrennzeichen in der FullName-Eigenschaft von ZipArchiveEntry-Objekten, die durch Überladungen der CreateFromDirectory-Methode erstellt wurden, von einem umgekehrten Schrägstrich ("") in einen normalen Schrägstrich ("/") geändert.For apps that target the .NET Framework 4.6.1 and later versions, the path separator character has changed from a backslash ("") to a forward slash ("/") in the FullName property of ZipArchiveEntry objects created by overloads of the CreateFromDirectory method. Die Änderung bringt die .NET-Implementierung in Einklang mit Abschnitt 4.4.17.1 der ZIP-Dateiformatspezifikation und ermöglicht es, dass ZIP-Archive auf Nicht-Windows-Systemen entpackt werden.The change brings the .NET implementation into conformity with section 4.4.17.1 of the .ZIP File Format Specification and allows .ZIP archives to be decompressed on non-Windows systems.
Beim Dekomprimieren einer ZIP-Datei, die für eine frühere Version der .NET Framework-Zielplattform unter einem anderen als dem Windows-Betriebssystem – wie etwa dem Macintosh – erstellt wurde, bleibt die Verzeichnisstruktur nicht erhalten.Decompressing a zip file created by an app that targets a previous version of the .NET Framework on non-Windows operating systems such as the Macintosh fails to preserve the directory structure. Beispielsweise werden auf einem Macintosh mehrere Dateien erstellt, deren Dateinamen eine Verkettung aus dem Verzeichnispfad, allen vorhandenen umgekehrten Schrägstrichzeichen ("") und dem Dateinamen darstellen.For example, on the Macintosh, it creates a set of files whose filename concatenates the directory path, along with any backslash ("") characters, and the filename. Im Ergebnis wird die Verzeichnisstruktur der dekomprimierten Dateien nicht beibehalten.As a result, the directory structure of decompressed files is not preserved.
VorschlagSuggestion Die Auswirkungen dieser Änderungen auf ZIP-Dateien, die unter dem Windows-Betriebssystem durch die APIs im .NET Framework System.IO-Namespace dekomprimiert werden, sollten minimal sein, da diese APIs sowohl den einfachen Schrägstrich („/“) als auch den umgekehrten Schrägstrich („\“) als Pfadtrennzeichen verarbeiten können.The impact of this change on .ZIP files that are decompressed on the Windows operating system by APIs in the .NET Framework System.IO namespace should be minimal, since these APIs can seamlessly handle either a slash ("/") or a backslash ("\") as the path separator character.
Wenn diese Änderung nicht erwünscht ist, können Sie sich dagegen entscheiden, indem Sie dem Abschnitt <runtime> Ihrer Anwendungskonfigurationsdatei eine Konfigurationseinstellung hinzufügen.If this change is undesirable, you can opt out of it by adding a configuration setting to the <runtime> section of your application configuration file. Im folgenden Beispiel sind sowohl der Abschnitt <runtime> als auch die Ablehnungsoption Switch.System.IO.Compression.ZipFile.UseBackslash dargestellt:The following example shows both the <runtime> section and the Switch.System.IO.Compression.ZipFile.UseBackslash opt-out switch:
<runtime>
<AppContextSwitchOverrides value="Switch.System.IO.Compression.ZipFile.UseBackslash=true" />
</runtime>
Darüber hinaus kann für Apps mit früheren Versionen von .NET Framework als Zielplattform, die unter .NET Framework 4.6.1 und neueren Versionen ausgeführt werden, die Verwendung dieses Verhaltens akzeptiert werden, indem Sie dem Abschnitt <runtime> der Anwendungskonfigurationsdatei eine Konfigurationseinstellung hinzufügen.In addition, apps that target previous versions of the .NET Framework but are running on the .NET Framework 4.6.1 and later versions can opt in to this behavior by adding a configuration setting to the <runtime> section of the application configuration file. Im Folgenden sind sowohl der Abschnitt <runtime> als auch die Option Switch.System.IO.Compression.ZipFile.UseBackslash zur Verwendung dieses Verhaltens dargestellt.The following shows both the <runtime> section and the Switch.System.IO.Compression.ZipFile.UseBackslash opt-in switch.
<runtime>
<AppContextSwitchOverrides value="Switch.System.IO.Compression.ZipFile.UseBackslash=false" />
</runtime>
BereichScope Microsoft EdgeEdge
VersionVersion 4.6.14.6.1
TypType NeuzuweisungRetargeting
Betroffene APIsAffected APIs

Änderungen an der PfadnormalisierungChanges in path normalization

DetailsDetails Bei Apps, die die Zielplattform .NET Framework 4.6.2 und höher verwenden, wurde im Vergleich zu früheren Versionen die Art und Weise verändert, in der die Laufzeit Pfade normalisiert. Das Normalisieren eines Pfads umfasst das Verändern der Zeichenfolge, die einen Pfad oder eine Datei identifiziert, sodass sie einem gültigen Pfad auf dem Zielbetriebssystem entspricht.Starting with apps that target the .NET Framework 4.6.2, the way in which the runtime normalizes paths has changed.Normalizing a path involves modifying the string that identifies a path or file so that it conforms to a valid path on the target operating system. Normalisierung umfasst ist in der Regel:Normalization typically involves:
  • Die Kanonisierung von Komponenten- und Verzeichnistrennzeichen.Canonicalizing component and directory separators.
  • Die Anwendung des aktuellen Verzeichnisses auf einen relativen Pfad.Applying the current directory to a relative path.
  • Die Auswertung des relativen Verzeichnisses (.) oder des übergeordneten Verzeichnisses (..) in einem Pfad.Evaluating the relative directory (.) or the parent directory (..) in a path.
  • Das Verkürzen um angegebene Zeichen.Trimming specified characters.
Für Apps, die die Zielplattform .NET Framework 4.6.2 und höher verwenden, sind die folgenden Änderungen an der Pfadnormalisierung standardmäßig aktiviert:Starting with apps that target the .NET Framework 4.6.2, the following changes in path normalization are enabled by default:
  • Die Runtime greift auf die Funktion GetFullPathName des Betriebssystems zurück, um Pfade zu normalisieren.The runtime defers to the operating system's GetFullPathName function to normalize paths.
  • Die Normalisierung beinhaltet nicht mehr das Verkürzen des Endes von Verzeichnissegmenten (etwa im Fall eines Leerzeichens am Ende eines Verzeichnisnamens).Normalization no longer involves trimming the end of directory segments (such as a space at the end of a directory name).
  • Unterstützung für Gerätepfadsyntax mit vollem Vertrauen, einschließlich \\.\ und \\?\ für Datei-E/A-APIs in mscorlib.dll.Support for device path syntax in full trust, including \\.\ and, for file I/O APIs in mscorlib.dll, \\?\.
  • Die Runtime überprüft Gerätesyntaxpfade nicht.The runtime does not validate device syntax paths.
  • Die Verwendung von Gerätesyntax für den Zugriff auf alternative Datenströme wird unterstützt.The use of device syntax to access alternate data streams is supported.
Diese Änderungen verbessern die Leistung und ermöglichen zugleich Methoden den Zugriff auf zuvor nicht zugängliche Pfade.These changes improve performance while allowing methods to access previously inaccessible paths. Apps mit der Zielplattform .NET Framework 4.6.1 und früheren Versionen, die unter .NET Framework 4.6.2 oder höher ausgeführt werden, sind von dieser Änderung nicht betroffen.Apps that target the .NET Framework 4.6.1 and earlier versions but are running under the .NET Framework 4.6.2 or later are unaffected by this change.
VorschlagSuggestion Apps mit der Zielplattform .NET Framework 4.6.2 oder höher können die Änderung deaktivieren und die Legacynormalisierung verwenden, indem dem Abschnitt <runtime> der Anwendungskonfigurationsdatei Folgendes hinzugefügt wird:Apps that target the .NET Framework 4.6.2 or later can opt out of this change and use legacy normalization by adding the following to the <runtime> section of the application configuration file:
<runtime>
<AppContextSwitchOverrides value="Switch.System.IO.UseLegacyPathHandling=true" />
</runtime>
Für Apps mit der Zielplattform .NET Framework 4.6.1 oder niedriger, die unter .NET Framework 4.6.2 oder höher ausgeführt werden, können die Änderungen an der Pfadnormalisierung aktiviert werden, indem dem Abschnitt <runtime> der Anwendungskonfigurationsdatei die folgende Zeile hinzugefügt wird:Apps that target the .NET Framework 4.6.1 or earlier but are running on the .NET Framework 4.6.2 or later can enable the changes to path normalization by adding the following line to the <runtime> section of the application .configuration file:
<runtime>
<AppContextSwitchOverrides value="Switch.System.IO.UseLegacyPathHandling=false" />
</runtime>
BereichScope GeringMinor
VersionVersion 4.6.24.6.2
TypType NeuzuweisungRetargeting

CurrentCulture und CurrentUICulture werden über mehrere Aufgaben übertragenCurrentCulture and CurrentUICulture flow across tasks

DetailsDetails Ab .NET Framework 4.6 werden CurrentCulture und CurrentUICulture im ExecutionContext-Objekt des Threads gespeichert, das über mehrere asynchrone Vorgänge übertragen wird. Das heißt, dass Änderungen an CurrentCulture oder CurrentUICulture sich auf Aufgaben auswirken, die später asynchron ausgeführt werden.Beginning in the .NET Framework 4.6, CurrentCulture and CurrentUICulture are stored in the thread's ExecutionContext, which flows across asynchronous operations.This means that changes to CurrentCulture or CurrentUICulture will be reflected in tasks which are later run asynchronously. Dieses Verhalten weicht von demjenigen früherer .NET Framework-Versionen ab (die CurrentCulture und CurrentUICulture in allen asynchronen Aufgaben zurückgesetzt haben).This is different from the behavior of previous .NET Framework versions (which would reset CurrentCulture and CurrentUICulture in all asynchronous tasks).
VorschlagSuggestion Apps die von dieser Änderung betroffen sind, können diese möglicherweise umgehen, indem die gewünschte CurrentCulture oder CurrentUICulture als erster Vorgang in einer asynchronen Aufgabe festgelegt wird.Apps affected by this change may work around it by explicitly setting the desired CurrentCulture or CurrentUICulture as the first operation in an async Task. Alternativ können Sie sich für das alte Verhalten (keine Weitergabe von CurrentCulture/CurrentUICulture) entscheiden, indem Sie die folgende Kompatibilitätsoption festlegen:Alternatively, the old behavior (of not flowing CurrentCulture/CurrentUICulture) may be opted into by setting the following compatibility switch:
AppContext.SetSwitch("Switch.System.Globalization.NoAsyncCurrentCulture", true);
Dieses Problem wurde von WPF in .NET Framework 4.6.2 behoben.This issue has been fixed by WPF in .NET Framework 4.6.2. Es wurde ebenfalls in .NET Framework 4.6 und 4.6.1 durch KB 3139549 behoben.It has also been fixed in .NET Frameworks 4.6, 4.6.1 through KB 3139549. Apps mit der Zielplattform .NET Framework 4.6 oder höher erhalten automatisch das richtige Verhalten in WPF-Anwendungen (CurrentCulture/CurrentUICulture), das über Dispatcher-Vorgänge hinweg beibehalten werden würde.Applications targeting .NET Framework 4.6 or later will automatically get the right behavior in WPF applications - CurrentCulture/CurrentUICulture) would be preserved across Dispatcher operations.
BereichScope GeringMinor
VersionVersion 4.64.6
TypType NeuzuweisungRetargeting
Betroffene APIsAffected APIs

DeflateStream verwendet native APIs für die DekomprimierungDeflateStream uses native APIs for decompression

DetailsDetails 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.Starting with the .NET Framework 4.7.2, the implementation of decompression in the T:System.IO.Compression.DeflateStream class has changed to use native Windows APIs by default. In der Regel führt dies zu einer beträchtlichen Leistungssteigerung.Typically, this results in a substantial performance improvement. 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:All .NET applications targeting the .NET Framework version 4.7.2 or higher use the native implementation.This change might result in some differences in behavior, which include:
  • Die Ausnahmemeldungen können sich unterscheiden.Exception messages may be different. Der Typ der ausgelösten Ausnahme bleibt jedoch gleich.However, the type of exception thrown remains the same.
  • Einige besondere Situationen (z.B. nicht ausreichender Speicher zum Abschließen eines Vorgangs) werden möglicherweise anders behandelt.Some special situations, such as not having enough memory to complete an operation, may be handled differently.
  • Es gibt bekannte Unterschiede für die Analyse von GZip-Headern (Hinweis: nur GZipStream für die Dekomprimierung ist davon betroffen):There are known differences for parsing gzip header (note: only GZipStream set for decompression is affected):
  • Ausnahmen beim Analysieren ungültiger Header werden möglicherweise zu anderen Zeiten ausgelöst.Exceptions when parsing invalid headers may be thrown at different times.
  • 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.The native implementation enforces that values for some reserved flags inside the gzip header (i.e. FLG) are set according to the specification, which may cause it to throw an exception where previously invalid values were ignored.
VorschlagSuggestion 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:If decompression with native APIs has adversely affected the behavior of your app, you can opt out of this feature by adding the Switch.System.IO.Compression.DoNotUseNativeZipLibraryForDecompression switch to the runtime section of your app.config file and setting it to true:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<runtime>
<AppContextSwitchOverrides
value="Switch.System.IO.Compression.DoNotUseNativeZipLibraryForDecompression=true" />
</runtime>
</configuration>
BereichScope GeringMinor
VersionVersion 4.7.24.7.2
TypType NeuzuweisungRetargeting
Betroffene APIsAffected APIs

Sicherstellen, dass System.Uri einen konsistenten reservierten Zeichensatz verwendetEnsure System.Uri uses a consistent reserved character set

DetailsDetails In System.Uri sind bestimmte prozentcodierte Zeichen, die manchmal decodiert wurden, jetzt konsistent linkscodiert.In System.Uri, certain percent-encoded characters that were sometimes decoded are now consistently left encoded. Dies tritt für die Eigenschaften und Methoden auf, die auf die Pfad-, Abfrage-, Fragment- oder Benutzerinformationenkomponenten des URIs zugreifen.This occurs across the properties and methods that access the path, query, fragment, or userinfo components of the URI. Das Verhalten ändert sich nur, wenn die beiden folgenden Bedingungen erfüllt sind:The behavior will change only when both of the following are true:
  • Der URI enthält die codierte Form eines der folgenden reservierten Zeichen: :, ', (, ), ! oder *.The URI contains the encoded form of any of the following reserved characters: :, ', (, ), ! or *.
  • Der URI enthält ein Unicode- oder nicht codiertes reserviertes Zeichen.The URI contains a Unicode or encoded non-reserved character. Wenn beide oben genannten Kriterien erfüllt sind, werden die codierten reservierten Zeichen linkscodiert.If both of the above are true, the encoded reserved characters are left encoded. In früheren Versionen von .NET Framework wurden sie decodiert.In previous versions of the .NET Framework, they are decoded.
VorschlagSuggestion Für Anwendungen mit Zielversionen von .NET Framework ab .NET Framework 4.7.2 ist dieses neue Decodierungsverhalten standardmäßig aktiviert.For applications that target versions of .NET Framework starting with 4.7.2, the new decoding behavior is enabled by default. Wenn diese Änderung nicht erwünscht ist, können Sie sie deaktivieren, indem Sie den Schalter AppContextSwitchOverrides dem Abschnitt <runtime> Ihrer Anwendungskonfigurationsdatei hinzufügen:If this change is undesirable, you can disable it by adding the following AppContextSwitchOverrides switch to the <runtime> section of the application configuration file:
<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.For applications that target earlier versions of the .NET Framework but are running under versions starting with .NET Framework 4.7.2, the new decoding behavior is disabled by default. Sie können sie aktivieren, indem Sie den Schalter AppContextSwitchOverrides dem Abschnitt <runtime> Ihrer Anwendungskonfigurationsdatei hinzufügen:You can enable it by adding the following AppContextSwitchOverrides switch to the <runtime> section of the application configuration file::
<runtime>
<AppContextSwitchOverrides value="Switch.System.Uri.DontEnableStrictRFC3986ReservedCharacterSets=false" />
</runtime>
BereichScope GeringMinor
VersionVersion 4.7.24.7.2
TypType NeuzuweisungRetargeting
Betroffene APIsAffected APIs

ETW-Ereignisnamen können sich nicht nur durch das Suffix „Start“ oder „Stop“ unterscheidenETW event names cannot differ only by a "Start" or "Stop" suffix

DetailsDetails In .NET Framework 4.6 und 4.6.1 löst die Laufzeit ArgumentException aus, wenn zwei Ereignisnamen der Ereignisablaufverfolgung für Windows (ETW) sich lediglich durch das Suffix "Start" oder "Stop" unterscheiden (z.B. wenn ein Ereignis mit LogUser benannt ist und das andere mit LogUserStart).In the .NET Framework 4.6 and 4.6.1, the runtime throws an ArgumentException when two Event Tracing for Windows (ETW) event names differ only by a "Start" or "Stop" suffix (as when one event is named LogUser and another is named LogUserStart). In diesem Fall kann die Runtime die Ereignisquelle nicht erstellen, die dann keine Protokollierung durchführen kann.In this case, the runtime cannot construct the event source, which cannot emit any logging.
VorschlagSuggestion Stellen Sie sicher, dass zwei Ereignisnamen sich nicht nur durch das Suffix "Start" oder "Stop" unterscheiden, um die Ausnahme zu verhindern. Diese Anforderung wird mit .NET Framework 4.6.2 entfernt. Die Laufzeit kann Ereignisnamen unterscheiden, die sich nur durch das Suffix "Start" oder "Stop" unterscheiden.To prevent the exception, ensure that no two event names differ only by a "Start" or "Stop" suffix.This requirement is removed starting with the .NET Framework 4.6.2; the runtime can disambiguate event names that differ only by the "Start" and "Stop" suffix.
BereichScope Microsoft EdgeEdge
VersionVersion 4.64.6
TypType NeuzuweisungRetargeting

Unterstützung für lange PfadeLong path support

DetailsDetails Für Apps mit der Zielplattform .NET Framework 4.6.2 und höher werden lange Pfade (bis zu 32.000 Zeichen) unterstützt, und die Beschränkung auf 260 Zeichen (oder MAX_PATH) für die Pfadlänge wurde aufgehoben. Bei Apps, die neu kompiliert werden, um .NET Framework 4.6.2 als Zielplattform zu verwenden, lösen Codepfade, die zuvor aufgrund der Überschreitung der Pfadlänge von 260 Zeichen PathTooLongException ausgelöst haben, nun unter den folgenden Bedingungen PathTooLongException aus:Starting with apps that target the .NET Framework 4.6.2, long paths (of up to 32K characters) are supported, and the 260-character (or MAX_PATH) limitation on path lengths has been removed.For apps that are recompiled to target the .NET Framework 4.6.2, code paths that previously threw a PathTooLongException because a path exceeded 260 characters will now throw a PathTooLongException only under the following conditions:
  • Die Zahl der Pfadzeichen überschreitet MaxValue (32.767).The length of the path is greater than MaxValue (32,767) characters.
  • Das Betriebssystem gibt COR_E_PATHTOOLONG oder einen dazu äquivalenten Wert zurück.The operating system returns COR_E_PATHTOOLONG or its equivalent.
Bei Apps mit der Zielplattform .NET Framework 4.6.1 und früheren Versionen löst die Laufzeit automatisch eine PathTooLongException aus, wenn ein Pfad die Länge von 260 Zeichen überschreitet.For apps that target the .NET Framework 4.6.1 and earlier versions, the runtime automatically throws a PathTooLongException whenever a path exceeds 260 characters.
VorschlagSuggestion Für Apps mit der Zielplattform .NET Framework 4.6.2 können Sie sich gegen die Unterstützung von langen Pfaden entscheiden, wenn sie nicht erwünscht ist, indem Sie Folgendes dem Abschnitt <runtime> Ihrer app.config-Datei hinzufügen:For apps that target the .NET Framework 4.6.2, you can opt out of long path support if it is not desirable by adding the following to the <runtime> section of your app.config file:
<runtime>
<AppContextSwitchOverrides value="Switch.System.IO.BlockLongPaths=true" />
</runtime>
Sie können bei Anwendungen, die für frühere Versionen von .NET Framework vorgesehen sind, aber in .NET Framework 4.6.2 oder höher ausgeführt werden, lange Pfade unterstützen, indem Sie dem Abschnitt <runtime> der app.config-Datei Folgendes hinzufügen:For apps that target earlier versions of the .NET Framework but run on the .NET Framework 4.6.2 or later, you can opt in to long path support by adding the following to the <runtime> section of your app.config file:
<runtime>
<AppContextSwitchOverrides value="Switch.System.IO.BlockLongPaths=false" />
</runtime>
BereichScope GeringMinor
VersionVersion 4.6.24.6.2
TypType NeuzuweisungRetargeting

Die Überprüfung von Pfaden auf Doppelpunkte ist genauerPath colon checks are stricter

DetailsDetails In .NET Framework 4.6.2 wurde eine Reihe von Änderungen vorgenommen, um zuvor nicht unterstützte Pfade zu unterstützen (hinsichtlich Länge und Format).In .NET Framework 4.6.2, a number of changes were made to support previously unsupported paths (both in length and format). Die Überprüfung auf eine korrekte Syntax bei der Verwendung von Laufwerkstrennzeichen (Doppelpunkt) wurde verbessert. Als Nebenwirkung wurden mehrere URI-Pfade in einigen ausgewählten Pfad-APIs blockiert, in denen sie vorher toleriert wurden.Checks for proper drive separator (colon) syntax were made more correct, which had the side effect of blocking some URI paths in a few select Path APIs where they used to be tolerated.
VorschlagSuggestion Wenn ein URI an betroffene APIs übergeben wird, sollten Sie zunächst die Zeichenfolge in einen gültigen Pfad ändern.If passing a URI to affected APIs, modify the string to be a legal path first.
  • Entfernen Sie das Schema manuell aus den URLs (entfernen Sie z.B. file:// aus den URLs).Remove the scheme from URLs manually (e.g. remove file:// from URLs)
  • Übergeben Sie den URI der Klasse Uri und verwenden Sie LocalPath.Pass the URI to the Uri class and use LocalPath
Alternativ können Sie sich gegen die Normalisierung des neuen Pfads entscheiden, indem Sie die AppContext-Option Switch.System.IO.UseLegacyPathHandling auf TRUE festlegen.Alternatively, you can opt out of the new path normalization by setting the Switch.System.IO.UseLegacyPathHandling AppContext switch to true.
BereichScope Microsoft EdgeEdge
VersionVersion 4.6.24.6.2
TypType NeuzuweisungRetargeting
Betroffene APIsAffected APIs

Ausnahmen in SerialPort-HintergrundthreadsSerialPort background thread exceptions

DetailsDetails Mit SerialPort-Streams erstellte Hintergrundthreads beenden den Prozess nicht mehr, wenn Betriebssystemausnahmen ausgelöst werden.Background threads created with SerialPort streams no longer terminate the process when OS exceptions are thrown.
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 applications that target the .NET Framework 4.7 and earlier versions, a process is terminated when an operating system exception is thrown on a background thread created with a SerialPort stream.
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.In applications that target the .NET Framework 4.7.1 or a later version, background threads wait for OS events related to the active serial port and could crash in some cases, such as sudden removal of the serial port.
VorschlagSuggestion 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:For apps that target the .NET Framework 4.7.1, you can opt out of the exception handling if it is not desirable by adding the following to the <runtime> section of your app.config file:
<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:For apps that target earlier versions of the .NET Framework but run on the .NET Framework 4.7.1 or later, you can opt in to the exception handling by adding the following to the <runtime> section of your app.config file:
<runtime>
<AppContextSwitchOverrides value="Switch.System.IO.Ports.DoNotCatchSerialStreamThreadExceptions=false" />
</runtime>
BereichScope GeringMinor
VersionVersion 4.7.14.7.1
TypType NeuzuweisungRetargeting
Betroffene APIsAffected APIs

ServiceBase überträgt OnStart-Ausnahmen nichtServiceBase doesn't propagate OnStart exceptions

DetailsDetails 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.In the .NET Framework 4.7 and earlier versions, exceptions thrown on service startup are not propagated to the caller of ServiceBase.Run.
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.Starting with applications that target the .NET Framework 4.7.1, the runtime propagates exceptions to ServiceBase.Run for services that fail to start.
VorschlagSuggestion Wenn beim Start des Diensts eine Ausnahme auftritt, wird diese Ausnahme weitergegeben.On service start, if there is an exception, that exception will be propagated. Dies sollte bei der Diagnose von Fällen helfen, in denen Dienste nicht starten können.This should help diagnose cases where services fail to start.
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:If this behavior is undesirable, you can opt out of it by adding the following <AppContextSwitchOverrides> element to the <runtime> section of your application configuration file:
<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:If your application targets an earlier version than 4.7.1 but you want to have this behavior, add the following <AppContextSwitchOverrides> element to the <runtime> section of your application configuration file:
<AppContextSwitchOverrides value="Switch.System.ServiceProcess.DontThrowExceptionsOnStart=false" />
BereichScope GeringMinor
VersionVersion 4.7.14.7.1
TypType NeuzuweisungRetargeting
Betroffene APIsAffected APIs

Stapelüberwachungen, die bei der Verwendung portabler PDBs abgerufen werden, enthalten nun Quelldatei- und Zeileninformationen, wenn diese angefordert werdenStack traces obtained when using portable PDBs now include source file and line information if requested

DetailsDetails 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.Starting with .NET Framework 4.7.2, stack traces obtained when using portable PDBs include source file and line information when requested. 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.In versions prior to .NET Framework 4.7.2, source file and line information would be unavailable when using portable PDBs even if explicitly requested.
VorschlagSuggestion 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:For applications that target the .NET Framework 4.7.2, you can opt out of the source file and line information when using portable PDBs if it is not desirable by adding the following to the <runtime> section of your app.config file:
<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:For applications that target earlier versions of the .NET Framework but run on the .NET Framework 4.7.2 or later, you can opt in to the source file and line information when using portable PDBs by adding the following to the <runtime> section of your app.config file:
<runtime>
<AppContextSwitchOverrides value="Switch.System.Diagnostics.IgnorePortablePDBsInStackTraces=false" />
</runtime>
BereichScope Microsoft EdgeEdge
VersionVersion 4.7.24.7.2
TypType NeuzuweisungRetargeting
Betroffene APIsAffected APIs

NetzwerkNetworking

Der Standardwert von ServicePointManager.SecurityProtocol ist SecurityProtocolType.System.DefaultDefault value of ServicePointManager.SecurityProtocol is SecurityProtocolType.System.Default

DetailsDetails Bei Apps mit der Zielplattform .NET Framework 4.7 und höher ist der Standardwert der ServicePointManager.SecurityProtocol-Eigenschaft SecurityProtocolType.SystemDefault.Starting with apps that target the .NET Framework 4.7, the default value of the ServicePointManager.SecurityProtocol property is 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.This change allows .NET Framework networking APIs based on SslStream (such as FTP, HTTPS, and SMTP) to inherit the default security protocols from the operating system instead of using hard-coded values defined by the .NET Framework. Der Standard variiert je nach Betriebssystem und sämtlichen benutzerdefinierten Konfigurationen, die vom Systemadministrator vorgenommen werden.The default varies by operating system and any custom configuration performed by the system administrator. Informationen zum standardmäßigen SChannel-Protokoll in der jeweiligen Version des Windows-Betriebssystems finden Sie unter Protokolle in TLS/SSL (SChannel SSP).For information on the default SChannel protocol in each version of the Windows operating system, see Protocols 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.For applications that target an earlier version of the .NET Framework, the default value of the ServicePointManager.SecurityProtocol property depends on the version of the .NET Framework targeted. 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“.See the Networking section of Retargeting Changes for Migration from .NET Framework 4.5.2 to 4.6 for more information.

VorschlagSuggestion Diese Änderung betrifft nur Anwendungen, die auf .NET Framework 4.7 oder höher ausgelegt sind.This change affects applications that target the .NET Framework 4.7 or later versions.
Wenn Sie lieber ein definiertes Protokoll anstelle des Systemstandards verwenden möchten, können Sie den Wert der ServicePointManager.SecurityProtocol-Eigenschaft explizit festlegen.If you prefer to use a defined protocol rather than relying on the system default, you can explicitly set the value of the ServicePointManager.SecurityProtocol property.
Wenn diese Änderung nicht erwünscht ist, können Sie sich dagegen entscheiden, indem Sie dem Abschnitt <runtime> Ihrer Anwendungskonfigurationsdatei eine Konfigurationseinstellung hinzufügen.If this change is undesirable, you can opt out of it by adding a configuration setting to the <runtime> section of your application configuration file. Im folgenden Beispiel sind sowohl der Abschnitt <runtime> als auch die Ablehnungsoption Switch.System.Net.DontEnableSystemDefaultTlsVersions dargestellt:The following example shows both the <runtime> section and the Switch.System.Net.DontEnableSystemDefaultTlsVersions opt-out switch:
<runtime>
<AppContextSwitchOverrides value="Switch.System.Net.DontEnableSystemDefaultTlsVersions=true" />
</runtime>
BereichScope GeringMinor
VersionVersion 4.74.7
TypType NeuzuweisungRetargeting
Betroffene APIsAffected APIs

SslStream unterstützt TLS-WarnungenSslStream supports TLS Alerts

DetailsDetails Nach einem fehlgeschlagenen TLS-Handshake wird eine IOException mit einer inneren Win32Exception von dem ersten E/A-Lese-/Schreibvorgang ausgelöst.After a failed TLS handshake, an IOException with an inner Win32Exception exception will be thrown by the first I/O Read/Write operation. Der NativeErrorCode-Code für die Win32Exception kann der TLS-Warnung von der Remotepartei mit den Schannel-Fehlercodes für TLS- und SSL-Warnungen zugeordnet werden.The NativeErrorCode code for the Win32Exception can be mapped to the TLS Alert from the remote party using the Schannel error codes for TLS and SSL alerts. Weitere Informationen finden Sie unter RFC 2246: Abschnitt 7.2.2, Fehlerwarnungen.For more information, see RFC 2246: Section 7.2.2 Error alerts.
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.The behavior in .NET Framework 4.6.2 and earlier is that the transport channel (usually TCP connection) will timeout during either Write or Read if the other party failed the handshake and immediately afterwards rejected the connection.
VorschlagSuggestion Anwendungen, die Netzwerk-E/A-APIs aufrufen (z.B. Read(Byte[], Int32, Int32)/Write(Byte[], Int32, Int32)) sollten IOException oder TimeoutException verarbeiten.Applications calling network I/O APIs such as Read(Byte[], Int32, Int32)/Write(Byte[], Int32, Int32) should handle IOException or TimeoutException.
Die TLS-Warnfunktion ist ab .NET Framework 4.7 standardmäßig aktiviert.The TLS Alerts feature is enabled by default starting with .NET Framework 4.7. 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.Applications targeting versions of the .NET Framework from 4.0 through 4.6.2 running on a .NET Framework 4.7 or higher system will have the feature disabled to preserve compatibility.
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.The following configuration API is available to enable or disable the feature for .NET Framework 4.6 and later applications running on .NET Framework 4.7 or later.
  • Programmgesteuert:Programmatically:
Die folgenden Methoden müssen unmittelbar nach dem Anwendungsstart aufgerufen werden, da ServicePointManager nur einmal initialisiert wird:Must be the very first thing the application does since ServicePointManager will initialize only once:
AppContext.SetSwitch("TestSwitch.LocalAppContext.DisableCaching", true);
AppContext.SetSwitch("Switch.System.Net.DontEnableTlsAlerts", true); // Set to 'false' to enable the feature in .NET Framework 4.6 - 4.6.2.
  • AppConfig: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):Registry key (machine global):

    Legen Sie den Wert auf false fest, um das Feature in .NET Framework 4.6 bis 4.6.2 zu aktivieren.Set the Value to false to enable the feature in .NET Framework 4.6 - 4.6.2.

    • >Schlüssel: HKLM\SOFTWARE\Wow6432Node\Microsoft\.NETFramework\AppContext\Switch.System.Net.DontEnableTlsAlerts>Key: HKLM\SOFTWARE\Wow6432Node\Microsoft\.NETFramework\AppContext\Switch.System.Net.DontEnableTlsAlerts
    • Typ: ZeichenfolgeType: String
    • Wert: "TRUE&quotValue: "true&quot
BereichScope Microsoft EdgeEdge
VersionVersion 4.74.7
TypType NeuzuweisungRetargeting
Betroffene APIsAffected APIs

SicherheitSecurity

CspParameters.ParentWindowHandle erwartet nun einen HWND-WertCspParameters.ParentWindowHandle now expects HWND value

DetailsDetails 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:The ParentWindowHandle value, introduced in .NET Framework 2.0, allows an application to register a parent window handle value such that any UI required to access the key (such as a PIN prompt or consent dialog) opens as a modal child to the specified window.Starting with apps that target the .NET Framework 4.7, a Windows Forms application can set the ParentWindowHandle property with code like the following:
cspParameters.ParentWindowHandle = form.Handle;
In früheren Versionen von .NET Framework wurde erwartet, dass der Wert ein IntPtr-Objekt ist, das einen Speicherort im Arbeitsspeicher darstellt, an dem sich der HWND-Wert befindet.In previous versions of the .NET Framework, the value was expected to be an IntPtr representing a location in memory where the HWND value resided. 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 einer "CryptographicException: The parameter is incorrect. (Der Parameter ist falsch)."Setting the property to form.Handle on Windows 7 and earlier versions had no effect, but on Windows 8 and later versions, it results in a "CryptographicException: The parameter is incorrect."
VorschlagSuggestion 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:Applications targeting .NET Framework 4.7 or higher wishing to register a parent window relationship are encouraged to use the simplified form:
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 kannUsers who had identified that the correct value to pass was the address of a memory location which held the value form.Handle can opt out of the behavior change by setting the AppContext switch Switch.System.Security.Cryptography.DoNotAddrOfCspParentWindowHandle to true.
  1. durch programmgesteuertes Festlegen von Kompatibilitätsoptionen für AppContext, wie hier beschrieben wird,By programmatically setting compat switches on the AppContext, as explained here
  2. Durch Hinzufügen der folgenden Zeile zum Abschnitt <runtime> der app.config-Datei:By adding the following line to the <runtime> section of the app.config file:
<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.Conversely, users who wish to opt in to the new behavior on the .NET Framework 4.7 runtime when the application loads under older .NET Framework versions can set the AppContext switch to false.
BereichScope GeringMinor
VersionVersion 4.74.7
TypType NeuzuweisungRetargeting
Betroffene APIsAffected APIs

Die Standardalgorithmen SignedXML und SignedXMS wurden in SHA-256 geändertDefault SignedXML and SignedXMS algorithms changed to SHA256

DetailsDetails 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.In the .NET Framework 4.7 and earlier, SignedXML and SignedCMS default to SHA1 for some operations.Starting with the .NET Framework 4.7.1, SHA256 is enabled by default for these operations. Diese Änderung ist erforderlich, da SHA-1 nicht mehr sicher ist.This change is necessary because SHA1 is no longer considered to be secure.
VorschlagSuggestion Es gibt zwei neue Kontextwechselwerte, mit denen festgelegt wird, ob SHA-1 (unsicher) oder SHA-256 standardmäßig verwendet wird:There are two new context switch values to control whether SHA1 (insecure) or SHA256 is used by default:
  • Switch.System.Security.Cryptography.Xml.UseInsecureHashAlgorithmsSwitch.System.Security.Cryptography.Xml.UseInsecureHashAlgorithms
  • Switch.System.Security.Cryptography.Pkcs.UseInsecureHashAlgorithmsSwitch.System.Security.Cryptography.Pkcs.UseInsecureHashAlgorithms
Bei 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:For applications that target the .NET Framework 4.7.1 and later versions, if the use of SHA256 is undesirable, you can restore the default to SHA1 by adding the following configuration switch to the runtime section of your app config file:
<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:For applications that target the .NET Framework 4.7 and earlier versions, you can opt into this change by adding the following configuration switch to the runtime section of your app config file:
<AppContextSwitchOverrides value="Switch.System.Security.Cryptography.Xml.UseInsecureHashAlgorithms=false;Switch.System.Security.Cryptography.Pkcs.UseInsecureHashAlgorithms=false" />
BereichScope GeringMinor
VersionVersion 4.7.14.7.1
TypType NeuzuweisungRetargeting
Betroffene APIsAffected APIs

RSACng lädt nun fehlerfrei RSA-Schlüssel, die nicht der Standardschlüsselgröße entsprechenRSACng now correctly loads RSA keys of non-standard key size

DetailsDetails In .NET Framework-Versionen, die älter sind als Version 4.6.2, können Kunden, die keine Standardschlüsselgrößen für RSA-Zertifikate verwenden, auf diese Schlüssel nicht über die Erweiterungsmethoden GetRSAPublicKey(X509Certificate2) und GetRSAPrivateKey(X509Certificate2) zugreifen.In .NET Framework versions prior to 4.6.2, customers with non-standard key sizes for RSA certificates are unable to access those keys via the GetRSAPublicKey(X509Certificate2) and GetRSAPrivateKey(X509Certificate2) extension methods. Eine CryptographicException wird mit der Meldung "The requested key size is not supported" (Die angeforderte Schlüsselgröße wird nicht unterstützt.) ausgelöst.A CryptographicException with the message "The requested key size is not supported" is thrown. Dieses Problem wurde in .NET Framework 4.6.2 behoben.In .NET Framework 4.6.2 this issue has been fixed. Ebenso funktionieren ImportParameters(RSAParameters) und ImportParameters(RSAParameters) nun mit Schlüsselgrößen, die nicht der Standardgröße entsprechen, ohne dass eine CryptographicException ausgelöst wird.Similarly, ImportParameters(RSAParameters) and ImportParameters(RSAParameters) now work with non-standard key sizes without throwing a CryptographicException.
VorschlagSuggestion Wenn eine Ausnahmebehandlungslogik auf dem vorherigen Verhalten basiert, durch das eine CryptographicException ausgelöst wird, sobald eine von der Standardgröße abweichende Schlüsselgröße verwendet wird, kann das Entfernen der Logik sinnvoll sein.If there is any exception handling logic that relies on the previous behavior where a CryptographicException is thrown when non-standard key sizes are used, consider removing the logic.
BereichScope Microsoft EdgeEdge
VersionVersion 4.6.24.6.2
TypType NeuzuweisungRetargeting
Betroffene APIsAffected APIs

SslStream unterstützt TLS-WarnungenSslStream supports TLS Alerts

DetailsDetails Nach einem fehlgeschlagenen TLS-Handshake wird eine IOException mit einer inneren Win32Exception von dem ersten E/A-Lese-/Schreibvorgang ausgelöst.After a failed TLS handshake, an IOException with an inner Win32Exception exception will be thrown by the first I/O Read/Write operation. Der NativeErrorCode-Code für die Win32Exception kann der TLS-Warnung von der Remotepartei mit den Schannel-Fehlercodes für TLS- und SSL-Warnungen zugeordnet werden.The NativeErrorCode code for the Win32Exception can be mapped to the TLS Alert from the remote party using the Schannel error codes for TLS and SSL alerts. Weitere Informationen finden Sie unter RFC 2246: Abschnitt 7.2.2, Fehlerwarnungen.For more information, see RFC 2246: Section 7.2.2 Error alerts.
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.The behavior in .NET Framework 4.6.2 and earlier is that the transport channel (usually TCP connection) will timeout during either Write or Read if the other party failed the handshake and immediately afterwards rejected the connection.
VorschlagSuggestion Anwendungen, die Netzwerk-E/A-APIs aufrufen (z.B. Read(Byte[], Int32, Int32)/Write(Byte[], Int32, Int32)) sollten IOException oder TimeoutException verarbeiten.Applications calling network I/O APIs such as Read(Byte[], Int32, Int32)/Write(Byte[], Int32, Int32) should handle IOException or TimeoutException.
Die TLS-Warnfunktion ist ab .NET Framework 4.7 standardmäßig aktiviert.The TLS Alerts feature is enabled by default starting with .NET Framework 4.7. 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.Applications targeting versions of the .NET Framework from 4.0 through 4.6.2 running on a .NET Framework 4.7 or higher system will have the feature disabled to preserve compatibility.
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.The following configuration API is available to enable or disable the feature for .NET Framework 4.6 and later applications running on .NET Framework 4.7 or later.
  • Programmgesteuert:Programmatically:
Die folgenden Methoden müssen unmittelbar nach dem Anwendungsstart aufgerufen werden, da ServicePointManager nur einmal initialisiert wird:Must be the very first thing the application does since ServicePointManager will initialize only once:
AppContext.SetSwitch("TestSwitch.LocalAppContext.DisableCaching", true);
AppContext.SetSwitch("Switch.System.Net.DontEnableTlsAlerts", true); // Set to 'false' to enable the feature in .NET Framework 4.6 - 4.6.2.
  • AppConfig: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):Registry key (machine global):

    Legen Sie den Wert auf false fest, um das Feature in .NET Framework 4.6 bis 4.6.2 zu aktivieren.Set the Value to false to enable the feature in .NET Framework 4.6 - 4.6.2.

    • >Schlüssel: HKLM\SOFTWARE\Wow6432Node\Microsoft\.NETFramework\AppContext\Switch.System.Net.DontEnableTlsAlerts>Key: HKLM\SOFTWARE\Wow6432Node\Microsoft\.NETFramework\AppContext\Switch.System.Net.DontEnableTlsAlerts
    • Typ: ZeichenfolgeType: String
    • Wert: "TRUE&quotValue: "true&quot
BereichScope Microsoft EdgeEdge
VersionVersion 4.74.7
TypType NeuzuweisungRetargeting
Betroffene APIsAffected APIs

Windows Communication Foundation (WCF)Windows Communication Foundation (WCF)

Bei der Verwendung von Eintrittsinvarianzdiensten können Deadlocks auftretenDeadlock may result when using Reentrant services

DetailsDetails Ein Deadlock kann zu einem Eintrittsinvarianzdienst führen, der Instanzen des Diensts auf jeweils einen Ausführungsthread beschränkt.A deadlock may result in a Reentrant service, which restricts instances of the service to one thread of execution at a time. Dienste, die anfällig für dieses Problem sind, verfügen über das folgende ServiceBehaviorAttribute in ihrem Code:Services prone to encounter this problem will have the following ServiceBehaviorAttribute in their code:
[ServiceBehavior(ConcurrencyMode = ConcurrencyMode.Reentrant)]
VorschlagSuggestion Dieses Problem können Sie wie folgt beheben:To address this issue, you can do the following:
  • Legen Sie den Parallelitätsmodus des Diensts auf ConcurrencyMode.Single oder <System.ServiceModel.ConcurrencyMode.Multiple?displayProperty=nameWithType> fest.Set the service's concurrency mode to ConcurrencyMode.Single or <System.ServiceModel.ConcurrencyMode.Multiple?displayProperty=nameWithType>. Beispiel:For example:
[ServiceBehavior(ConcurrencyMode = ConcurrencyMode.Single)]
  • Installieren Sie das neueste Update für .NET Framework 4.6.2, oder führen Sie ein Upgrade auf eine höhere Version von .NET Framework durch.Install the latest update to the .NET Framework 4.6.2, or upgrade to a later version of the .NET Framework. Dies deaktiviert die Weitergabe von ExecutionContext in OperationContext.Current.This disables the flow of the ExecutionContext in OperationContext.Current. Dieses Verhalten kann konfiguriert werden. Es entspricht dem Hinzufügen der folgenden App-Einstellung zu Ihrer Konfigurationsdatei:This behavior is configurable; it is equivalent to adding the following app setting to your configuration file:
<appSettings>
<add key="Switch.System.ServiceModel.DisableOperationContextAsyncFlow" value="true" />
</appSettings>
Der Wert Switch.System.ServiceModel.DisableOperationContextAsyncFlow darf für Reentrant-Dienste nicht auf false festgelegt werden.The value of Switch.System.ServiceModel.DisableOperationContextAsyncFlow should never be set to false for Reentrant services.
BereichScope GeringMinor
VersionVersion 4.6.24.6.2
TypType NeuzuweisungRetargeting
Betroffene APIsAffected APIs

Verbesserte Barrierefreiheit für einige .NET SDK-ToolsImproved accessibility for some .NET SDK tools

DetailsDetails Im .NET Framework SDK 4.7.1 wurden die Tools „SvcConfigEditor.exe“ und „SvcTraceViewer.exe“ verbessert, indem verschiedene Probleme mit der Barrierefreiheit behoben wurden.In the .NET Framework SDK 4.7.1, the SvcConfigEditor.exe and SvcTraceViewer.exe tools have been improved by fixing varied accessibility issues. 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.Most of these were small issues like a name not being defined or certain UI automation patterns not being implemented correctly. 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.While many users wouldn’t be aware of these incorrect values, customers who use assistive technologies like screen readers will find these SDK tools more accessible. 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:Certainly, these fixes change some previous behaviors, like keyboard focus order.In order to get all the accessibility fixes in these tools, you can the following to your app.config file:
<runtime>
<AppContextSwitchOverrides value="Switch.UseLegacyAccessibilityFeatures=false"/>
</runtime>
BereichScope Microsoft EdgeEdge
VersionVersion 4.7.14.7.1
TypType NeuzuweisungRetargeting

OperationContext.Current kann NULL zurückgeben, wenn es in einer using-Klausel aufgerufen wirdOperationContext.Current may return null when called in a using clause

DetailsDetails OperationContext.Current kann null zurückgeben, und eine NullReferenceException kann ausgelöst werden, wenn alle folgenden Bedingungen zutreffen:may return null and a NullReferenceException may result if all of the following conditions are true:
using (new OperationContextScope(OperationContext.Current))
{
OperationContext context = OperationContext.Current;      // OperationContext.Current is null.
// ...
}
VorschlagSuggestion Dieses Problem können Sie wie folgt beheben:To address this issue, you can do the following:
  • Ändern Sie den Code wie folgt, um ein neues Current-Objekt zu instanziieren, das nicht null ist:Modify your code as follows to instantiate a new non-null Current object:
OperationContext ocx = OperationContext.Current;
using (new OperationContextScope(OperationContext.Current))
{
OperationContext.Current = new OperationContext(ocx.Channel);
// ...
}
  • Installieren Sie das neueste Update für .NET Framework 4.6.2, oder führen Sie ein Upgrade auf eine höhere Version von .NET Framework durch.Install the latest update to the .NET Framework 4.6.2, or upgrade to a later version of the .NET Framework. Dies deaktiviert die Weitergabe von ExecutionContext in OperationContext.Current und stellt das Verhalten von WCF-Anwendungen in .NET Framework 4.6.1 und früheren Versionen wieder her.This disables the flow of the ExecutionContext in OperationContext.Current and restores the behavior of WCF applications in the .NET Framework 4.6.1 and earlier versions. Dieses Verhalten kann konfiguriert werden. Es entspricht dem Hinzufügen der folgenden App-Einstellung zu Ihrer Konfigurationsdatei:This behavior is configurable; it is equivalent to adding the following app setting to your configuration file:
<appSettings>
<add key="Switch.System.ServiceModel.DisableOperationContextAsyncFlow" value="true" />
</appSettings>
Wenn diese Änderung nicht erwünscht ist und Ihre Anwendung von der Weitergabe des Ausführungskontexts zwischen unterschiedlichen Vorgangskontexten abhängig ist, können Sie die Übertragung wie folgt aktivieren:If this change is undesirable and your application depends on execution context flowing between operation contexts, you can enable its flow as follows:
<appSettings>
<add key="Switch.System.ServiceModel.DisableOperationContextAsyncFlow" value="false" />
</appSettings>
BereichScope Microsoft EdgeEdge
VersionVersion 4.6.24.6.2
TypType NeuzuweisungRetargeting
Betroffene APIsAffected APIs

Die Serialisierung von Steuerzeichen in DataContractJsonSerializer ist jetzt konform mit ECMAScript V6 und V8Serialization of control characters with DataContractJsonSerializer is now compatible with ECMAScript V6 and V8

DetailsDetails In .NET Framework 4.6.2 und früheren Versionen serialisierte der DataContractJsonSerializer einige besondere Steuerzeichen, wie etwa \b, \f und \t nicht in einer Weise, die mit den ECMAScript V6- und V8-Standards konform ist.In the .NET framework 4.6.2 and earlier versions, the DataContractJsonSerializer did not serialize some special control characters, such as \b, \f, and \t, in a way that was compatible with the ECMAScript V6 and V8 standards. Ab .NET Framework 4.7 ist die Serialisierung dieser Steuerzeichen mit ECMAScript V6 und V8 kompatibel.Starting with the .NET Framework 4.7, serialization of these control characters is compatible with ECMAScript V6 and V8.
VorschlagSuggestion Standardmäßig wird dieses neue Feature nur für Apps aktiviert, die für .NET Framework 4.7 konzipiert sind.For apps that target the .NET Framework 4.7, this feature is enabled by default. 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:If this behavior is not desirable, you can opt out of this feature by adding the following line to the <runtime> section of the app.config or web.config file:
<runtime>
<AppContextSwitchOverrides value="Switch.System.Runtime.Serialization.DoNotUseECMAScriptV6EscapeControlCharacter=false" />
</runtime>
BereichScope Microsoft EdgeEdge
VersionVersion 4.74.7
TypType NeuzuweisungRetargeting
Betroffene APIsAffected APIs

WCF-Bindung mit dem TransportWithMessageCredential-SicherheitsmodusWCF binding with the TransportWithMessageCredential security mode

DetailsDetails Ab .NET Framework 4.6.1 kann die WCF-Bindung, die den TransportWithMessageCredential-Sicherheitsmodus verwendet, so eingerichtet werden, dass Nachrichten mit nicht signierten "to"-Headern für asymmetrische Sicherheitsschlüssel empfangen werden. Standardmäßig werden nicht signierte "to"-Header in .NET Framework 4.6.1 weiter abgelehnt.Beginning in the .NET Framework 4.6.1, WCF binding that uses the TransportWithMessageCredential security mode can be set up to receive messages with unsigned "to" headers for asymmetric security keys.By default, unsigned "to" headers will continue to be rejected in .NET Framework 4.6.1. Sie werden nur akzeptiert, wenn eine Anwendung unter Verwendung des Switch.System.ServiceModel.AllowUnsignedToHeader-Konfigurationsschalters diesen neuen Vorgangsmodus aktiviert.They will only be accepted if an application opts into this new mode of operation using the Switch.System.ServiceModel.AllowUnsignedToHeader configuration switch.
VorschlagSuggestion Da diese Einstellung eine Opt-in-Funktion ist, sollte sie sich nicht auf das Verhalten vorhandener Apps auswirken.Because this is an opt-in feature, it should not affect the behavior of existing apps.
Verwenden Sie die folgende Konfigurationseinstellung, um zu steuern, ob das neue Verhalten verwendet werden soll:To control whether the new behavior is used or not, use the following configuration setting:
<runtime>
<AppContextSwitchOverrides value="Switch.System.ServiceModel.AllowUnsignedToHeader=true" />
</runtime>
BereichScope TransparentTransparent
VersionVersion 4.6.14.6.1
TypType NeuzuweisungRetargeting
Betroffene APIsAffected APIs

WCF-Nachrichtensicherheit kann jetzt TLS1.1 und TLS1.2 verwendenWCF message security now is able to use TLS1.1 and TLS1.2

DetailsDetails 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.Starting in the .NET Framework 4.7, customers can configure either TLS1.1 or TLS1.2 in WCF message security in addition to SSL3.0 and TLS1.0 through application configuration settings.
VorschlagSuggestion In .NET Framework 4.7 werden TLS1.1 und TLS1.2 in WCF-Nachrichtensicherheit standardmäßig nicht unterstützt.In the .NET Framework 4.7, support for TLS1.1 and TLS1.2 in WCF message security is disabled by default. 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:You can enable it by adding the following line to the <runtime> section of the app.config or web.config file:
<runtime>
<AppContextSwitchOverrides value="Switch.System.ServiceModel.DisableUsingServicePointManagerSecurityProtocols=false;Switch.System.Net.DontEnableSchUseStrongCrypto=false" />
</runtime>
BereichScope Microsoft EdgeEdge
VersionVersion 4.74.7
TypType NeuzuweisungRetargeting

Unterstützung der WCF-Transportsicherheit für Zertifikate, die mithilfe der CNG gespeichert wurdenWCF transport security supports certificates stored using CNG

DetailsDetails Von Apps für die Zielplattform .NET Framework 4.6.2 an unterstützt WCF-Transportsicherheit Zertifikate, die mithilfe der Windows-Kryptographiebibliothek (CNG) gespeichert wurden.Starting with apps that target the .NET Framework 4.6.2, WCF transport security supports certificates stored using the Windows Cryptography Library (CNG). Diese Unterstützung ist auf die Verwendung von Zertifikaten mit einem öffentlichen Schlüssel beschränkt, der über einen Exponent mit einer Länge von nicht mehr als 32 Bit verfügt.This support is limited to certificates with a public key that has an exponent no more than 32 bits in length. Wenn eine Anwendung auf .NET Framework 4.6.2 ausgerichtet ist, ist dieses Feature standardmäßig aktiviert. In früheren Versionen von .NET Framework löst der Versuch, X509-Zertifikate mit einem CSG-Schlüsselspeicheranbieter zu verwenden, eine Ausnahme aus.When an application targets the .NET Framework 4.6.2, this feature is on by default.In earlier versions of the .NET Framework, the attempt to use X509 certificates with a CSG key storage provider throws an exception.
VorschlagSuggestion Apps für die Zielplattform .NET Framework 4.6.1 und früher, die unter .NET Framework 4.6.2 ausgeführt werden, können Unterstützung für CNG-Zertifikate aktivieren, indem sie dem <runtime>-Abschnitt der app.config- oder der web.config-Datei die folgende Zeile hinzufügen:Apps that target the .NET Framework 4.6.1 and earlier but are running on the .NET Framework 4.6.2 can enable support for CNG certificates by adding the following line to the <runtime> section of the app.config or web.config file:
<runtime>
<AppContextSwitchOverrides value="Switch.System.ServiceModel.DisableCngCertificates=false" />
</runtime>
Dies kann mithilfe des folgenden Codes auch programmgesteuert erfolgen:This can also be done programmatically with the following code:
private const string DisableCngCertificates = @"Switch.System.ServiceModel.DisableCngCertificate";
AppContext.SetSwitch(disableCngCertificates, false);
Const DisableCngCertificates As String = "Switch.System.ServiceModel.DisableCngCertificates"
AppContext.SetSwitch(disableCngCertificates, False)
Beachten Sie, dass aufgrund dieser Änderung jeglicher Code zur Ausnahmebehandlung, der von dem Versuch zur Einleitung von sicherer Kommunikation mit einem CNG-Zertifikat abhängt, nicht ausgeführt wird.Note that, because of this change, any exception handling code that depends on the attempt to initiate secure communication with a CNG certificate to fail will no longer execute.
BereichScope GeringMinor
VersionVersion 4.6.24.6.2
TypType NeuzuweisungRetargeting

X509CertificateClaimSet.FindClaims berücksichtigt alle claimTypes (Anspruchstypen)X509CertificateClaimSet.FindClaims Considers All claimTypes

DetailsDetails Wenn in Apps, die auf .NET Framework 4.6.1 ausgerichtet sind, ein X509-Anspruchssatz über ein Zertifikat mit mehreren DNS-Einträge im SAN-Feld initialisiert wird, versucht die FindClaims(String, String)-Methode, das claimType-Argument mit allen DNS-Einträgen abzugleichen. Bei Apps, die auf frühere Versionen von .NET Framework ausgerichtet sind, versucht die Methode FindClaims(String, String), das claimType-Argument nur mit dem neuesten DNS-Eintrag abzugleichen.In apps that target the .NET Framework 4.6.1, if an X509 claim set is initialized from a certificate that has multiple DNS entries in its SAN field, the FindClaims(String, String) method attempts to match the claimType argument with all the DNS entries.For apps that target previous versions of the .NET Framework, the FindClaims(String, String) method attempts to match the claimType argument only with the last DNS entry.
VorschlagSuggestion Diese Änderung wirkt sich nur auf Anwendungen aus, die auf .NET Framework 4.6.1 ausgerichtet sind.This change only affects applications targeting the .NET Framework 4.6.1. Diese Änderung kann mit dem DisableMultipleDNSEntries-Kompatibilitätsschalter deaktiviert werden (oder bei Versionen vor 4.6.1 aktiviert werden).This change may be disabled (or enabled if targeting pre-4.6.1) with the DisableMultipleDNSEntries compatibility switch.
BereichScope GeringMinor
VersionVersion 4.6.14.6.1
TypType NeuzuweisungRetargeting
Betroffene APIsAffected APIs

Windows FormsWindows Forms

Verbesserung der Barrierefreiheit von Windows Forms-Steuerelementen für .NET 4.7.2Accessibility improvements in Windows Forms controls for .NET 4.7.2

DetailsDetails Die Arbeitsweise des Windows Forms-Frameworks mit Technologien für die Barrierefreiheit wird verbessert, um Kunden von Windows Forms besser zu unterstützen.Windows Forms Framework is improving how it works with accessibility technologies to better support Windows Forms customers. Folgende Änderungen wurden u.a. vorgenommen:These include the following changes:
  • Änderungen zum Verbessern der Anzeige während des Modus mit hohem KontrastChanges to improve display during High Contrast mode.
  • Änderungen zum Verbessern der Tastaturnavigation in den DataGridView- und MenuStrip-Steuerelementen.Changes to improve the keyboard navigation in the DataGridView and MenuStrip controls.
  • Änderungen an der Interaktion mit der Sprachausgabe.Changes to interaction with Narrator.
VorschlagSuggestion 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.How to opt in or out of these changesIn order for the application to benefit from these changes, it must run on the .NET Framework 4.7.2 or later. Die Anwendung kann von diesen Änderungen profitieren, wenn Sie Folgendes durchführen:The application can benefit from these changes in either of the following ways:
  • Kompilieren Sie diese erneut, um .NET Framework 4.7.2 als Ziel zu verwenden.It is recompiled to target the .NET Framework 4.7.2. 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.These accessibility changes are enabled by default on Windows Forms applications that target the .NET Framework 4.7.2 or later.
  • 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 auf false festgelegt wird.It targets the .NET Framework 4.7.1 or earlier version and opts out of the legacy accessibility behaviors by adding the following AppContext Switch to the <runtime> section of the app config file and setting it to false, as the following example shows.
<?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.Note that to opt in to the accessibility features added in .NET Framework 4.7.2, you must also opt in to accessibility features of .NET Framework 4.7.1 as well. Bei Anwendungen, die .NET Framework 4.7.2 oder höher als Zielplattform verwenden und das veraltete Barrierefreiheitsverhalten beibehalten sollen, können Sie die Verwendung des veralteten Features für die Barrierefreiheit aktivieren, indem Sie den AppContext-Schalter auf true festlegen. Verwenden von vom Betriebssystem definierten Farben in Designs mit hohem KontrastApplications that target the .NET Framework 4.7.2 or later and want to preserve the legacy accessibility behavior can opt in to the use of legacy accessibility features by explicitly setting this AppContext switch to true.Use of OS-defined colors in High Contrast themesHINWEIS: In Windows 10 wurden die Werte für einige Systemfarben mit hohem Kontrast geändert.NOTE: Windows 10 has changed values for some high contrast system colors. Das Windows Forms-Framework basiert auf dem Win32-Framework.Windows Forms Framework is based on the Win32 framework. Führen Sie für die besten Ergebnisse die aktuelle Version von Windows aus, und aktivieren Sie die neuesten Änderungen am Betriebssystem, indem Sie eine app.manifest-Datei zu einer Testanwendung hinzufügen und den Kommentar aus folgendem Code entfernen:For the best experience, run on the latest version of Windows and opt in to the latest OS changes by adding an app.manifest file in a test application and uncommenting the following code:
<!-- Windows 10 -->
<supportedOS Id="{8e0f7a12-bfb3-4fe8-b9a5-48fd50a15a9a}" />
Verbesserte Unterstützung für die SprachausgabeImproved Narrator support
  • Die Sprachausgabe kündigt jetzt den Wert der ToolStripMenuItem.ShortcutKeys-Eigenschaft an, wenn Sie den Text eines ToolStripMenuItem ankündigt.Narrator now announces the value of the ToolStripMenuItem.ShortcutKeys property when announcing the text of a ToolStripMenuItem.
  • Die Sprachausgabe gibt jetzt an, wenn die Enabled-Eigenschaftensatz eines ToolStripMenuItem auf false festgelegt ist.Narrator now indicates when a ToolStripMenuItem has its Enabled property set to false.
  • Die Sprachausgabe stellt jetzt Feedback zum Zustand eines Kontrollkästchens bereit, wenn die ListView.CheckBoxes-Eigenschaft auf true festgelegt ist.Narrator now gives feedback on the state of a check box when the ListView.CheckBoxes property is set to true.
  • Die Fokusreihenfolge des Scanmodus der Sprachausgabe ist jetzt mit der visuellen Reihenfolge der Steuerelemente für das ClickOnce-Downloaddialogfenster konsistent.Narrator Scan Mode focus order is now consistent with the visual order of the controls on the ClickOnce download dialog window.
Verbesserte Unterstützung der DataGridView-BarrierefreiheitImproved DataGridView Accessibility supportVerbesserte visuelle HinweiseImproved Visual cues
  • Die RadioButton- und CheckBox-Steuerelemente mit einer leeren Text-Eigenschaft zeigen nun einen Fokusindikator an, wenn sie den Fokus erhalten.The RadioButton and CheckBox controls with an empty Text property will now display a focus indicator when they receive focus.
Verbesserte Unterstützung für das EigenschaftenrasterImproved Property Grid Support
  • Die untergeordneten Elemente des PropertyGrid-Steuerelements geben jetzt nur dann true für die IsReadOnlyProperty-Eigenschaft zurück, wenn ein PropertyGrid-Element aktiviert ist.The PropertyGrid control child elements now return a true for the IsReadOnlyProperty property only when a PropertyGrid element is enabled.
  • Die untergeordneten Elemente des PropertyGrid-Steuerelements geben jetzt nur dann false für die IsEnabledProperty-Eigenschaft zurück, wenn ein PropertyGrid-Element vom Benutzer geändert werden kann.The PropertyGrid control child elements now return a false for the IsEnabledProperty property only when a PropertyGrid element can be changed by the user.
Einen Überblick über die Benutzeroberflächenautomatisierung finden Sie unter Benutzeroberflächenautomatisierung: Übersicht. Verbesserte TastaturnavigationFor an overview of UI automation, see the UI Automation Overview.Improved keyboard navigation
BereichScope HauptversionMajor
VersionVersion 4.7.24.7.2
TypType NeuzuweisungRetargeting

Verbesserung der Barrierefreiheit von Windows Forms-SteuerelementenAccessibility improvements in Windows Forms controls

DetailsDetails Die Arbeitsweise von Windows Forms mit Technologien für die Barrierefreiheit wird verbessert, um die Kunden von Windows Forms besser zu unterstützen.Windows Forms is improving how it works with accessibility technologies to better support Windows Forms customers. Dazu gehören die folgenden Änderungen ab .NET Framework 4.7.1:These include the following changes starting with the .NET Framework 4.7.1:
  • Änderungen zum Verbessern der Anzeige während des Modus mit hohem KontrastChanges to improve display during High Contrast mode.
  • Änderungen zum Verbessern der Benutzerfreundlichkeit des EigenschaftenbrowsersChanges to improve the property browser experience. Folgende Verbesserungen wurden am Eigenschaftenbrowser vorgenommen:Property browser improvements include:
  • Eine verbesserte Tastaturnavigation durch die verschiedenen Fenster der DropdownauswahlBetter keyboard navigation through the various drop-down selection windows.
  • Unnötige Tabstopps wurden reduziert.Reduced unnecessary tab stops.
  • Eine verbesserte Berichterstellung der SteuerelementtypenBetter reporting of control types.
  • Ein verbessertes Verhalten der SprachausgabeImproved narrator behavior.
  • Änderungen an der Implementierung fehlender Barrierefreiheitsmuster für die Benutzeroberfläche in SteuerelementenChanges to implement missing UI accessibility patterns in controls.
VorschlagSuggestion Aktivieren bzw. Deaktivieren dieser ÄnderungenHow to opt in or out of these changes
Damit die Anwendung von diesen Änderungen profitieren kann, muss sie unter .NET Framework 4.7.1 oder höher ausgeführt werden.In order for the application to benefit from these changes, it must run on the .NET Framework 4.7.1 or later. Die Anwendung kann von diesen Änderungen profitieren, wenn Sie Folgendes durchführen:The application can benefit from these changes in either of the following ways:
  • Kompilieren Sie diese erneut, um .NET Framework 4.7.1 anzuzielen.It is recompiled to target the .NET Framework 4.7.1. Diese Änderungen der Barrierefreiheit werden standardmäßig für WPF-Anwendungen aktiviert, die .NET Framework 4.7.1 oder höher anzielen.These accessibility changes are enabled by default on Windows Forms applications that target the .NET Framework 4.7.1 or later.
  • 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 auf false festgelegt wird.It opts out of the legacy accessibility behaviors by adding the following AppContext switch to the <runtime> section of the app.config file and setting it to false, as the following example shows.
<?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.Applications that target the .NET Framework 4.7.1 or later and want to preserve the legacy accessibility behavior can opt in to the use of legacy accessibility features by explicitly setting this AppContext switch to true.

Einen Überblick über die Benutzeroberflächenautomatisierung finden Sie unter Benutzeroberflächenautomatisierung: Übersicht.</p/>For an overview of UI automation, see the UI Automation Overview.</p/>

Hinzugefügte Unterstützung für Benutzeroberflächen-Automatisierungsmuster und -EigenschaftenAdded support for UI Automation patterns and properties
Barrierefreiheitsclients können neue WinForms-Barrierefreiheitsfunktionen nutzen, indem allgemeine, öffentlich beschriebene Aufrufmuster verwendet werden.Accessibility clients can take advantage of new WinForms accessibility functionality by using common, publicly described invocation patterns. Diese Muster sind nicht für WinForms spezifisch.These patterns are not WinForms-specific. Clients für die Barrierefreiheit können beispielsweise die QueryInterface-Methode der IAccessible-Schnittstelle (MAAS) aufrufen, um eine IServiceProvider-Schnittstelle abzurufen.For instance, accessibility clients can call the QueryInterface method on the IAccessible interface (MAAS) to obtain an IServiceProvider interface. Wenn diese Schnittstelle verfügbar ist, können Clients die QueryService-Methode verwenden, um eine IAccessibleEx-Schnittstelle anzufordern.If this interface is available, clients can use its QueryService method to request an IAccessibleEx interface. Weitere Informationen finden Sie unter Using IAccessibleEx from a Client (Verwenden von IAccessibleEx über einen Client).For more information, see Using IAccessibleEx from a Client. Ab .NET Framework 4.7.1 sind IServiceProvider und IAccessibleEx gegebenenfalls für WinForms-Objekte für die Barrierefreiheit verfügbar.Starting with the .NET Framework 4.7.1, IServiceProvider and IAccessibleEx (where applicable) are available for WinForms accessibility objects.

.NET Framework 4.7.1 fügt Unterstützung für folgende Muster und Eigenschaften für die Automatisierung der Benutzeroberfläche hinzu:The .NET Framework 4.7.1 adds support for the following UI automation patterns and properties:

Verbesserungen am PropertyGrid-SteuerelementImprovements to the PropertyGrid control
Mit .NET Framework 4.7.1 werden folgende Verbesserungen zum PropertyBrowser-Steuerelement hinzugefügt:The .NET Framework 4.7.1 adds the following improvements to the PropertyBrowser control:
  • 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]~/docs/framework/ui-automation/ui-automation-support-for-the-menubar-control-type.md)-Eigenschaft mit einem Wert von ControlType.MenuItem.The Details button in the error dialog that is displayed when the user enters an incorrect value in the PropertyGrid control supports the Expand/Collapse pattern, state and name change notifications, and a [ControlType]~/docs/framework/ui-automation/ui-automation-support-for-the-menubar-control-type.md) property with a value of 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.The message pane displayed when the Details button of the error dialog is expanded is now keyboard accessible and allows Narrator to announce the content of the error message.
  • Das AccessibleRole-Element der Zeilen im PropertyGrid-Steuerelement wurde von "Zeile" in "Zelle" geändert.The AccessibleRole of rows in the PropertyGrid control have changed from "Row" to "Cell". Die Zelle wird dem UIA-ControlType-Element "DataItem" zugeordnet, wodurch entsprechende Tastenkombinationen und Microsoft-Sprachausgaben unterstützt werden.The cell maps to UIA ControlType "DataItem", which allows it to support appropriate keyboard shortcuts and Narrator announcements.
  • 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.The PropertyGrid control rows that represent header items when the PropertyGrid control has a PropertySort property set to PropertySort.Categorized have a ControlType property value of ControlType.Button.
  • 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.The PropertyGrid control rows that represent header items when the PropertyGrid control has a PropertySort property set to PropertySort.Categorized support the Expand/Collapse pattern.
  • Verbesserte Tastaturnavigation zwischen dem Raster und der darüber liegenden Symbolleiste.Improved keyboard navigation between the grid and the ToolBar above it. Durch das Drücken von "UMSCHALTTASTE+TAB" wird nun die erste Schaltfläche der Symbolleiste anstelle der gesamten Symbolleiste ausgewählt.Pressing "Shift-Tab" now selects the first ToolBar button, instead of the whole ToolBar.
  • 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.PropertyGrid controls displayed in High Contrast mode will now draw a focus rectangle around the ToolBar button which corresponds to the current PropertySort property value.
  • 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.PropertyGrid controls displayed in High Contrast mode and with a PropertySort property set to PropertySort.Categorized will now display the background of category headers in a highly contrasting color.
  • Bei PropertyGrid-Steuerelementen wird besser zwischen den Elementen der Symbolleiste mit Fokus und denen, die den aktuellen Wert der PropertySort-Eigenschaft angeben, unterschieden.PropertyGrid controls better differentiates between ToolBar items with focus and the ToolBar items which indicate the current value of the PropertySort property. Dieser Fehlerbehebung besteht aus einer Änderung für Szenarios mit und ohne hohen Kontrast.This fix consists of a High Contrast change and a change for non-High Contrast scenarios.
  • ToolBar-Elemente des PropertyGrid-Steuerelements, die den aktuellen Wert der PropertySort-Eigenschaft angeben, unterstützen das TogglePattern.PropertyGrid control ToolBar items which indicates the current value of the PropertySort property support the TogglePattern.
  • Verbesserte Unterstützung der Unterscheidung der ausgewählten Ausrichtung in der Ausrichtungsauswahl durch die Microsoft-Sprachausgabe.Improved Narrator support for distinguishing the selected alignment in the Alignment Picker.
  • Wenn ein leeres PropertyGrid-Steuerelement in einem Formular angezeigt wird, wird dieses nun fokussiert. Dies war zuvor nicht der Fall.When an empty PropertyGrid control is displayed on a form, it will now receive focus where previously it would not.

Verwendung von durch das Betriebssystem definierten Farben in Designs mit hohem KontrastUse of OS-defined colors in High Contrast themes
  • 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.The Button and CheckBox controls with their FlatStyle property set to FlatStyle.System, which is the default style, now use OS-defined colors in High Contrast theme when selected. Zuvor gab es keinen Kontrast zwischen Text und Hintergrundfarbe, wodurch der Text schwer lesbar war.Previously, text and background colors were not contrasting and were hard to read.
  • 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.The Button, CheckBox, RadioButton, Label, LinkLabel and GroupBox controls with their Enabled property set to false used a shaded color to render text in High Contrast themes, resulting in low contrast against the background. Diese Steuerelemente verwenden nun die vom Betriebssystem definierte Farbe für "deaktivierten Text".Now these controls use the "Disabled Text" color defined by the OS. Diese Fehlerbehebung gilt für Steuerelemente, bei denen die FlatStyle-Eigenschaft auf einen anderen Wert als FlatStyle.System festgelegt ist.This fix applies to controls with their FlatStyle property set to a value other than FlatStyle.System. Die zuletzt aufgeführten Steuerelemente werden vom Betriebssystem gerendert.The latter controls are rendered by the OS.
  • DataGridView rendert nun ein sichtbares Rechteck um den Inhalt der Zelle, die derzeit fokussiert wird.DataGridView now renders a visible rectangle around the content of the cell which has the current focus. Zuvor wurde dieses in bestimmten Designs mit hohem Kontrast nicht angezeigt.Previously, this was not visible in certain High Contrast themes.
  • ToolStripMenuItem-Steuerelemente, deren Enabled-Eigenschaft auf FALSE festgelegt ist, verwenden nun die vom Betriebssystem definierte Farbe für "deaktivierten Text".ToolStripMenuItem controls with their Enabled property set to false now use the "Disabled Text" color defined by the OS.
  • ToolStripMenuItem-Steuerelemente, deren Checked-Eigenschaft auf TRUE festgelegt ist, rendern nun das zugehörige Häkchen in einer kontrastreichen Systemfarbe.ToolStripMenuItem controls with their Checked property set to true now render the associated check mark in a contrasting system color. Zuvor war die Farbe des Häkchens nicht kontrastreich genug, weshalb es in Designs mit hohem Kontrast nicht sichtbar war.Previously the check mark color was not contrasting enough and not visible in High Contrast themes.
HINWEIS: In Windows 10 wurden die Werte für einige Systemfarben mit hohem Kontrast geändert.NOTE: Windows 10 has changed values for some high contrast system colors. Das Windows Forms-Framework basiert auf dem Win32-Framework.Windows Forms Framework is based on the Win32 framework. Führen Sie für die besten Ergebnisse die aktuelle Version von Windows aus, und aktivieren Sie die neuesten Änderungen am Betriebssystem, indem Sie eine app.manifest-Datei zu einer Testanwendung hinzufügen und den Kommentar aus folgendem Code entfernen:For the best experience, run on the latest version of Windows and opt in to the latest OS changes by adding an app.manifest file in a test application and uncommenting the following code:
<!-- Windows 10 -->
<supportedOS Id="{8e0f7a12-bfb3-4fe8-b9a5-48fd50a15a9a}" />

Verbesserte TastaturnavigationImproved keyboard navigation
  • 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.When a ComboBox control has its DropDownStyle property set to ComboBoxStyle.DropDownList and is the first control in the tab order on the form, it now displays a focus rectangle when the parent form is opened using the keyboard. Vor dieser Änderung lag der Tastaturfokus auf diesem Steuerelement, es wurde jedoch kein Fokusindikator gerendert.Before this change, keyboard focus was on this control, but a focus indicator was not rendered.
Verbesserte Unterstützung für die SprachausgabeImproved Narrator support
  • 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.The MonthCalendar control has added support for assistive technologies to access the control, including the ability for Narrator to read the value of the control when previously it could not.
  • Das CheckedListBox-Steuerelement benachrichtigt die Sprachausgabe nun, wenn eine CheckBox.CheckState-Eigenschaft geändert wurde.The CheckedListBox control now notifies Narrator when a CheckBox.CheckState property has been changed. Zuvor erhielt die Sprachausgabe keine Benachrichtigung. Deshalb wurden Benutzer nicht darüber informiert, dass die CheckState-Eigenschaft aktualisiert wurde.Previously, Narrator did not receive notification and as a result users would not be informed that the CheckState property had been updated.
  • Die Art, wie das LinkLabel-Steuerelement die Microsoft-Sprachausgabe über den Text des Steuerelements benachrichtigt, wurde geändert.The LinkLabel control has changed the way it notifies Narrator of the text of in the control. Zuvor hat die Microsoft-Sprachausgabe diesen Text zweimal und die Symbole "&" als Text ausgegeben, obwohl diese für den Benutzer nicht sichtbar sind.Previously, Narrator announced this text twice and read "&" symbols as real text even though they are not visible to a user. Der doppelten Text sowie die unnötigen "&"-Symbole wurden aus den Ausgaben der Microsoft-Sprachausgabe entfernt.The duplicated text was removed from the Narrator announcements, as well as unnecessary "&" symbols.
  • Die DataGridViewCell-Steuerelementtypen melden den schreibgeschützten Status nun ordnungsgemäß an die Microsoft-Sprachausgabe und andere Hilfstechnologien.The DataGridViewCell control types now correctly report the read-only status to Narrator and other assistive technologies.
  • Die Sprachausgabe kann jetzt das Systemmenü untergeordneter Fenster in [Multiple-Document Interface]~/docs/framework/winforms/advanced/multiple-document-interface-mdi-applications.md)-Anwendungen lesen.Narrator is now able to read the System Menu of child windows in [Multiple-Document Interface]~/docs/framework/winforms/advanced/multiple-document-interface-mdi-applications.md) applications.
  • Die Microsoft-Sprachausgabe kann nun ToolStripMenuItem-Steuerelemente ausgeben, bei der die ToolStripItem.Enabled-Eigenschaft auf FALSE festgelegt ist.Narrator is now able to read ToolStripMenuItem controls with a ToolStripItem.Enabled property set to false. Zuvor konnte die Sprachausgabe den Fokus nicht auf deaktivierte Menüelemente verschieben, um deren Inhalt auszugeben.Previously, Narrator was unable to focus on disabled menu items to read the content.
BereichScope HauptversionMajor
VersionVersion 4.7.14.7.1
TypType NeuzuweisungRetargeting
Betroffene APIsAffected APIs

Application.FilterMessage löst für eintrittsinvariante Implementierungen von IMessageFilter.PreFilterMessage keine Ausnahmen mehr ausApplication.FilterMessage no longer throws for re-entrant implementations of IMessageFilter.PreFilterMessage

DetailsDetails Vor .NET Framework 4.6.1 verursachte das Aufrufen von FilterMessage(Message) mit PreFilterMessage(Message), die AddMessageFilter(IMessageFilter) oder RemoveMessageFilter(IMessageFilter) (bei gleichzeitigem Aufrufen von DoEvents()) aufrief, eine IndexOutOfRangeException.Prior to the .NET Framework 4.6.1, calling FilterMessage(Message) with an PreFilterMessage(Message) which called AddMessageFilter(IMessageFilter) or RemoveMessageFilter(IMessageFilter) (while also calling DoEvents()) would cause an IndexOutOfRangeException.

Seit der Verwendung von Anwendungen, die auf .NET Framework 4.6.1 abzielen, wird diese Ausnahme nicht mehr ausgelöst und es können eintrittsinvariante Filter verwendet werden, wie oben beschrieben.Beginning with applications targeting the .NET Framework 4.6.1, this exception is no longer thrown, and re-entrant filters as described above may be used.

VorschlagSuggestion Beachten Sie, dass FilterMessage(Message) keine Ausnahmen mehr für das oben beschriebene eintrittsinvariante PreFilterMessage(Message)-Verhalten auslöst.Be aware that FilterMessage(Message) will no longer throw for the re-entrant PreFilterMessage(Message) behavior described above. Dies wirkt sich nur auf Anwendungen aus, die auf .NET Framework 4.6.1 ausgerichtet sind. Auf .NET Framework 4.6.1 ausgerichtete Apps können diese Änderung mithilfe der DontSupportReentrantFilterMessage-Kompatibilitätsoption ablehnen (auf ältere Framework-Versionen ausgerichtete Apps können diese Option aktivieren).This only affects applications targeting the .NET Framework 4.6.1.Apps targeting the .NET Framework 4.6.1 can opt out of this change (or apps targeting older Frameworks may opt in) by using the DontSupportReentrantFilterMessage compatibility switch.
BereichScope Microsoft EdgeEdge
VersionVersion 4.6.14.6.1
TypType NeuzuweisungRetargeting
Betroffene APIsAffected APIs

„ContextMenuStrip.SourceControl“-Eigenschaft enthält im Fall geschachtelter „ToolStripMenuItems“ ein gültiges SteuerelementContextMenuStrip.SourceControl property contains a valid control in the case of nested ToolStripMenuItems

DetailsDetails 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 the .NET Framework 4.7.1 and previous versions, the ContextMenuStrip.SourceControl property incorrectly returns null when the user opens the menu from nested ToolStripMenuItem controls. In .NET Framework 4.7.2 und höher ist die SourceControl-Eigenschaft immer auf das tatsächliche Quellsteuerelement festgelegt.In the .NET Framework 4.7.2 and later, SourceControl property is always set to the actual source control.
VorschlagSuggestion 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.How to opt in or out of these changesIn order for an application to benefit from these changes, it must run on the .NET Framework 4.7.2 or later. Die Anwendung kann von diesen Änderungen profitieren, wenn Sie Folgendes durchführen:The application can benefit from these changes in either of the following ways:
  • Die Anwendung ist auf .NET Framework 4.7.2 ausgelegt.It targets the .NET Framework 4.7.2. Diese Änderung wird standardmäßig für Windows Forms-Anwendungen aktiviert, die auf .NET Framework 4.7.2 oder höher ausgelegt sind.This change is enabled by default on Windows Forms applications that target the .NET Framework 4.7.2 or later.
  • 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 auf false festgelegt wird.It targets the .NET Framework 4.7.1 or an earlier version and opts out of the legacy accessibility behaviors by adding the following AppContext Switch to the <runtime> section of the app.config file and setting it to false, as the following example shows.
<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.Applications that target the .NET Framework 4.7.2 or later, and want to preserve the legacy behavior can opt in to the use of the legacy source control value by explicitly setting this AppContext switch to true.
BereichScope Microsoft EdgeEdge
VersionVersion 4.7.24.7.2
TypType NeuzuweisungRetargeting
Betroffene APIsAffected APIs

Falsche Implementierung von MemberDescriptor.EqualsIncorrect implementation of MemberDescriptor.Equals

DetailsDetails Die ursprüngliche Implementierung der MemberDescriptor.Equals-Methode hat zwei verschiedene Zeichenfolgeneigenschaften der zu vergleichenden Objekte miteinander verglichen: den Kategorienamen und die Beschreibungszeichenfolge.The original implementation of the MemberDescriptor.Equals method compares two different string properties from the objects being compared: the category name and the description string. Die Korrektur besteht darin, Category des ersten Objekts mit Category des zweiten Objekts und Description des ersten Objekts mit Description des zweiten Objekts zu vergleichen.The fix is to compare the Category of the first object to the Category of the second one, and the Description of the first to the Description of the second.
VorschlagSuggestion Wenn Ihre Anwendung erfordert, dass MemberDescriptor.Equals manchmal false zurückgibt, wenn Deskriptoren äquivalent sind, und sie als Zielplattform .NET Framework 4.6.2 verwendet, sind mehrere Optionen verfügbar:If your application depends on MemberDescriptor.Equals sometimes returning false when descriptors are equivalent, and you are targeting the .NET Framework 4.6.2 or later, you have several options:
  1. Nehmen Sie Codeänderungen vor, um die Category- und Description-Felder manuell zusätzlich zum Aufrufen der MemberDescriptor.Equals-Methode zu vergleichen.Make code changes to compare the Category and Description fields manually in addition to calling the MemberDescriptor.Equals method.
  2. Sie können diese Änderung deaktivieren, indem Sie der Datei „app.config“ den folgenden Wert hinzufügen:Opt out of this change by adding the following value to the app.config file:
<runtime>
<AppContextSwitchOverrides value="Switch.System.MemberDescriptorEqualsReturnsFalseIfEquivalent=true" />
</runtime>
Wenn Ihre Anwendung für .NET Framework 4.6.1 oder frühere Versionen konzipiert ist, unter .NET Framework 4.6.2 ausgeführt wird und Sie diese Änderung aktivieren möchten, können Sie den Kompatibilitätsschalter auf false festlegen, indem Sie der Datei „app.config“ den folgenden Wert hinzufügen:If your application targets .NET Framework 4.6.1 or earlier and is running on the .NET Framework 4.6.2 or later and you want this change enabled, you can set the compatibility switch to false by adding the following value to the app.config file:
<runtime>
<AppContextSwitchOverrides value="Switch.System.MemberDescriptorEqualsReturnsFalseIfEquivalent=false" />
</runtime>
BereichScope Microsoft EdgeEdge
VersionVersion 4.6.24.6.2
TypType NeuzuweisungRetargeting
Betroffene APIsAffected APIs

PrivateFontCollection.AddFontFile-Methode gibt Schriftartenressourcen freiPrivateFontCollection.AddFontFile method releases Font resources

DetailsDetails 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 the .NET Framework 4.7.1 and previous versions, the System.Drawing.Text.PrivateFontCollection class does not release the GDI+ font resources after the PrivateFontCollection is disposed for Font objects that are added to this collection using the AddFontFile(String) method. In .NET Framework 4.7.2 oder höher gibt Dispose die GDI+-Schriftarten frei, die der Sammlung als Dateien hinzugefügt wurden.In the .NET Framework 4.7.2 and later Dispose releases the GDI+ fonts that were added to the collection as files.
VorschlagSuggestion 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.How to opt in or out of these changesIn order for an application to benefit from these changes, it must run on the .NET Framework 4.7.2 or later. Die Anwendung kann von diesen Änderungen profitieren, wenn Sie Folgendes durchführen:The application can benefit from these changes in either of the following ways:
  • Kompilieren Sie diese erneut, um .NET Framework 4.7.2 als Ziel zu verwenden.It is recompiled to target the .NET Framework 4.7.2. Diese Änderung wird standardmäßig für Windows Forms-Anwendungen aktiviert, die für .NET Framework 4.7.2 oder höher ausgelegt sind.This change is enabled by default on Windows Forms applications that target the .NET Framework 4.7.2 or later.
  • 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 auf false festgelegt wird.It targets the .NET Framework 4.7.1 or an earlier version and opts out of the legacy accessibility behaviors by adding the following AppContext Switch to the <runtime> section of the app.config file and setting it to false, as the following example shows.
<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.Applications that target the .NET Framework 4.7.2 or later, and want to preserve the legacy behavior can opt in to not release font resources by explicitly setting this AppContext switch to true.
BereichScope Microsoft EdgeEdge
VersionVersion 4.7.24.7.2
TypType NeuzuweisungRetargeting
Betroffene APIsAffected APIs

Die UpButton- und DownButton-Aktionen der Domäne von WinForm sind jetzt synchronisiertWinForm's Domain upbutton and downbutton actions are in sync now

DetailsDetails 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.In the .NET Framework 4.7.1 and previous versions the DomainUpDown control's DomainUpDown.UpButton() action is ignored when control text is present, and the developer is required to use DomainUpDown.DownButton() action on the control before using DomainUpDown.UpButton() action. Ab .NET Framework 4.7.2 funktionieren die DomainUpDown.UpButton()- und DomainUpDown.DownButton()-Aktionen unabhängig voneinander in diesem Szenario und bleiben synchron.Starting with the .NET Framework 4.7.2 both the DomainUpDown.UpButton() and DomainUpDown.DownButton() actions work independently in this scenario and remain in sync.
VorschlagSuggestion Damit eine Anwendung von diesen Änderungen profitieren kann, muss sie unter .NET Framework 4.7.2 oder höher ausgeführt werden.In order for an application to benefit from these changes, it must run on the .NET Framework 4.7.2 or later. Die Anwendung kann von diesen Änderungen profitieren, wenn Sie Folgendes durchführen:The application can benefit from these changes in either of the following ways:
  • Kompilieren Sie diese erneut, um .NET Framework 4.7.2 als Ziel zu verwenden.It is recompiled to target the .NET Framework 4.7.2. Diese Änderung wird standardmäßig für Windows Forms-Anwendungen aktiviert, die für .NET Framework 4.7.2 oder höher ausgelegt sind.This change is enabled by default on Windows Forms applications that target the .NET Framework 4.7.2 or later.
  • Veraltetes Scrollingverhalten wird deaktiviert, indem wie im folgenden Beispiel dargestellt folgender AppContext-Schalter dem Abschnitt <runtime> der Datei „app.config“ hinzugefügt und auf false festgelegt wird.It opts out of the legacy scrolling behavior by adding the following AppContext Switch to the <runtime> section of the app config file and setting it to false, as the following example shows.
<runtime>
<AppContextSwitchOverrides value="Switch.System.Windows.Forms.DomainUpDown.UseLegacyScrolling=false"/>
</runtime>
BereichScope Microsoft EdgeEdge
VersionVersion 4.7.24.7.2
TypType NeuzuweisungRetargeting
Betroffene APIsAffected APIs

Windows Presentation Foundation (WPF)Windows Presentation Foundation (WPF)

Verbesserungen der Barrierefreiheit in WPFAccessibility improvements in WPF

DetailsDetails Verbesserungen beim hohen KontrastHigh Contrast improvements
  • Der Fokus für das Expander-Steuerelement wird nun angezeigt.The focus for the Expander control is now visible. In früheren Versionen von .NET Framework war dies nicht der Fall.In previous versions of the .NET Framework, it was not.
  • 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.The text in CheckBox and RadioButton controls when they are selected is now easier to see than in previous .NET Framework versions.
  • Der Rahmen eines deaktivierten ComboBox-Elements hat nun die gleiche Farbe wie der deaktivierte Text.The border of a disabled ComboBox is now the same color as the disabled text. In früheren Versionen von .NET Framework war dies nicht der Fall.In previous versions of the .NET Framework, it was not.
  • Deaktivierte Schaltflächen und Schaltflächen mit Fokus verwenden nun das richtige Farbdesign.Disabled and focused buttons now use the correct theme color. In früheren Versionen von .NET Framework war dies nicht der Fall.In previous versions of the .NET Framework, they did not.
  • Die Dropdownschaltfläche ist nun sichtbar, wenn das Format eines ComboBox-Steuerelements auf ToolBar.ComboBoxStyleKey festgelegt ist. In früheren Versionen von .NET Framework war dies nicht der Fall.The dropdown button is now visible when a ComboBox control's style is set to ToolBar.ComboBoxStyleKey, In previous versions of the .NET Framework, it was not.
  • Der Pfeil für die Sortieranzeige in einem DataGrid-Steuerelement verwendet nun die Farben des Designs.The sort indicator arrow in a DataGrid control now uses theme colors. In früheren Versionen von .NET Framework war dies nicht der Fall.In previous versions of the .NET Framework, it did not.
  • Das Standardformat für Links ändert sich nun in das richtige Farbdesign, wenn mit der Maus darauf gezeigt wird.The default hyperlink style now changes to the correct theme color on mouse over. In früheren Versionen von .NET Framework war dies nicht der Fall.In previous versions of the .NET Framework, it did not.
  • Es wird nun angezeigt, wenn der Tastaturfokus sich auf Optionsfeldern befindet.The Keyboard focus on radio buttons is now visible. In früheren Versionen von .NET Framework war dies nicht der Fall.In previous versions of the .NET Framework, it was not.
  • Die Spalte für Kontrollkästchen des DataGrid-Steuerelements verwendet nun die erwarteten Farben für das Feedback des Tastaturfokus.The DataGrid control's checkbox column now uses the expected colors for keyboard focus feedback. In früheren Versionen von .NET Framework war dies nicht der Fall.In previous versions of the .NET Framework, it did not.
  • Die visuellen Elemente des Tastaturfokus werden nun für ComboBox- und ListBox-Steuerelemente angezeigt.the Keyboard focus visuals are now visible on ComboBox and ListBox controls. In früheren Versionen von .NET Framework war dies nicht der Fall.In previous versions of the .NET Framework, it was not.

Verbesserungen der Interaktion mit der SprachausgabeScreen reader interaction improvements
  • Expander-Steuerelemente werden von der Sprachausgabe nun richtig als Gruppen (erweitern/reduzieren) ausgegeben.Expander controls are now correctly announced as groups (expand/collapse) by screen readers.
  • DataGridCell-Steuerelemente werden von der Sprachausgabe nun richtig als Datenrasterzellen (lokalisiert) ausgegeben.DataGridCell controls are now correctly announced as data grid cell (localized) by screen readers.
  • Die Sprachausgabe gibt nun den Namen eines bearbeitbaren ComboBox-Elements aus.Screen readers will now announce the name of an editable ComboBox.
  • PasswordBox-Steuerelemente werden von der Sprachausgabe nicht mehr als "Es befindet sich kein Element in der Ansicht." ausgegeben.PasswordBox controls are no longer announced as "no item in view" by screen readers.

LiveRegion-UnterstützungLiveRegion support
Sprachausgaben wie die Microsoft-Sprachausgabe unterstützen die Benutzer dabei, die Inhalte der Benutzeroberfläche einer Anwendung zu erkennen. Üblicherweise wird dies durch eine Beschreibung des Teils der Benutzeroberfläche erreicht, in dem sich zurzeit der Fokus befindet, da es sich dabei wahrscheinlich um das Element handelt, das für den Benutzer aktuell am wichtigsten ist.Screen readers such as Narrator help people know the UI contents of an application, usually by describing something about the UI that's currently focused, because that is probably the element of most interest to the user. 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.However, if a UI element changes somewhere in the screen and it does not have the focus, the user may not be informed and miss important information. LiveRegions wurden dafür entwickelt, dieses Problem zu lösen.LiveRegions are meant to solve this problem. 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.A developer can use them to inform the screen reader or any other UI Automation client that an important change has been made to a UI element. 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.The screen reader can then decide how and when to inform the user of this change.The LiveSetting property also lets the screen reader know how important it is to inform the user of the change made to the UI.
VorschlagSuggestion Aktivieren bzw. Deaktivieren dieser ÄnderungenHow to opt in or out of these changes
Damit die Anwendung von diesen Änderungen profitieren kann, muss sie unter .NET Framework 4.7.1 oder höher ausgeführt werden.In order for the application to benefit from these changes, it must run on the .NET Framework 4.7.1 or later. Die Anwendung kann von diesen Änderungen profitieren, wenn Sie Folgendes durchführen:The application can benefit from these changes in either of the following ways:
  • Festlegen von .NET Framework 4.7.1 als Ziel.Target the .NET Framework 4.7.1. Dies ist die empfohlene Vorgehensweise.This is the recommended approach. Diese Änderungen der Barrierefreiheit werden standardmäßig für WPF-Anwendungen aktiviert, die .NET Framework 4.7.1 oder höher anzielen.These accessibility changes are enabled by default on WPF applications that target the .NET Framework 4.7.1 or later.
  • 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 auf false festgelegt wird.It opts out of the legacy accessibility behaviors by adding the following AppContext Switch in the <runtime> section of the app config file and setting it to false, as the following example shows.
<?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.Applications that target the .NET Framework 4.7.1 or later and want to preserve the legacy accessibility behavior can opt in to the use of legacy accessibility features by explicitly setting this AppContext switch to true.
Einen Überblick über die Benutzeroberflächenautomatisierung finden Sie unter Benutzeroberflächenautomatisierung: Übersicht.For an overview of UI automation, see the UI Automation Overview.
BereichScope HauptversionMajor
VersionVersion 4.7.14.7.1
TypType NeuzuweisungRetargeting
Betroffene APIsAffected APIs

CurrentCulture wird zwischen WPF-Dispatcher-Vorgängen nicht beibehaltenCurrentCulture is not preserved across WPF Dispatcher operations

DetailsDetails Ab .NET Framework 4.6 gehen Änderungen an CurrentCulture oder CurrentUICulture, die innerhalb eines Dispatcher-Elements vorgenommen werden, am Ende des Verteilungsvorgangs verloren.Beginning in the .NET Framework 4.6, changes to CurrentCulture or CurrentUICulture made within a Dispatcher will be lost at the end of that dispatcher operation. Auf ähnliche Weise werden Änderungen an CurrentCulture oder CurrentUICulture außerhalb eines Verteilungsvorgangs möglicherweise nicht übernommen, wenn der Vorgang ausgeführt wird. In der Praxis bedeutet dies, dass Änderungen an CurrentCulture und CurrentUICulture möglicherweise zwischen Rückrufen der WPF-Benutzeroberfläche und anderem Code in einer WPF-Anwendung nicht übertragen werden. Der Grund dafür ist eine Änderung in ExecutionContext, durch die CurrentCulture und CurrentUICulture im Ausführungskontext gespeichert werden. Diese Änderung betrifft Apps mit der Zielplattform .NET Framework 4.6 und höher.Similarly, changes to CurrentCulture or CurrentUICulture made outside of a Dispatcher operation may not be reflected when that operation executes.Practically speaking, this means that CurrentCulture and CurrentUICulture changes may not flow between WPF UI callbacks and other code in a WPF application.This is due to a change in ExecutionContext that causes CurrentCulture and CurrentUICulture to be stored in the execution context beginning with apps targeting the .NET Framework 4.6. WPF-Verteilungsvorgänge speichern den Ausführungskontext, der dazu verwendet wurde, um den Vorgang zu beginnen und stellen den vorherigen Kontext wieder her, wenn der Vorgang abgeschlossen ist.WPF dispatcher operations store the execution context used to begin the operation and restore the previous context when the operation is completed. Da CurrentCulture und CurrentUICulture jetzt Bestandteil dieses Kontexts sind, bleiben innerhalb eines Dispatchervorgangs an ihnen vorgenommene Änderungen außerhalb des Vorgangs nicht erhalten.Because CurrentCulture and CurrentUICulture are now part of that context, changes to them within a dispatcher operation are not persisted outside of the operation.
VorschlagSuggestion Von dieser Änderung betroffene Apps können dieses Problem möglicherweise umgehen, indem das gewünschte CurrentCulture- oder CurrentUICulture-Element in einem Feld gespeichert wird und für alle Vorgangstexte der Verteilung (einschließlich der Rückrufereignishandler für Benutzeroberflächenereignisse) geprüft wird, ob das richtige CurrentCulture- und CurrentUICulture-Element festgelegt ist.Apps affected by this change may work around it by storing the desired CurrentCulture or CurrentUICulture in a field and checking in all Dispatcher operation bodies (including UI event callback handlers) that the correct CurrentCulture and CurrentUICulture are set. Da die ExecutionContext-Änderung, die dieser WPF-Änderung zugrunde liegt, nur Apps betrifft, die auf .NET Framework 4.6 oder höher ausgerichtet sind, kann dieser Fehler alternativ vermieden werden, indem .NET Framework 4.5.2 als Zielplattform verwendet wird. Apps mit der Zielplattform .NET Framework 4.6 oder höher können dieses Problem ebenfalls umgehen, indem die folgende Kompatibilitätsoption festgelegt wird:Alternatively, because the ExecutionContext change underlying this WPF change only affects apps targeting the .NET Framework 4.6 or newer, this break can be avoided by targeting the .NET Framework 4.5.2.Apps that target .NET Framework 4.6 or later can also work around this by setting the following compatibility switch:
AppContext.SetSwitch("Switch.System.Globalization.NoAsyncCurrentCulture", true);
Dieses Problem wurde von WPF in .NET Framework 4.6.2 behoben.This issue has been fixed by WPF in .NET Framework 4.6.2. Es wurde ebenfalls in .NET Framework 4.6 und 4.6.1 durch KB 3139549 behoben.It has also been fixed in .NET Frameworks 4.6, 4.6.1 through KB 3139549. Apps mit der Zielplattform .NET Framework 4.6 oder höher erhalten automatisch das richtige Verhalten in WPF-Anwendungen (CurrentCulture/CurrentUICulture), das über Dispatcher-Vorgänge hinweg beibehalten werden würde.Applications targeting .NET Framework 4.6 or later will automatically get the right behavior in WPF applications - CurrentCulture/CurrentUICulture) would be preserved across Dispatcher operations.
BereichScope GeringMinor
VersionVersion 4.64.6
TypType NeuzuweisungRetargeting

Der Tastaturfokus bewegt sich jetzt ordnungsgemäß über mehrere Ebenen von WinForms-/WPF-HostingKeyboard focus now moves correctly across multiple layers of WinForms/WPF hosting

DetailsDetails Nehmen Sie als Beispiel eine WPF-Anwendung, die ein WinForms-Steuerelement hostet, das wiederum WPF-Steuerelemente hostet.Consider a WPF application hosting a WinForms control which in turn hosts WPF controls. 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.Users may not be able to tab out of the WinForms layer if the first or last control in that layer is the WPF System.Windows.Forms.Integration.ElementHost. 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.This change fixes this issue, and users are now able to tab out of the WinForms layer.Automated applications that rely on focus never escaping the WinForms layer may no longer work as expected.
VorschlagSuggestion 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.A developer who wants to utilize this change while targeting a framework version below .NET 4.7.2 can set the following set of AppContext flags to false for the change to be enabled.
<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.WPF applications must opt in to all early accessibility improvements to get the later improvements. 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.In other words, both the Switch.UseLegacyAccessibilityFeatures and the Switch.UseLegacyAccessibilityFeatures.2 switches must be setA developer who requires the previous functionality while targeting .NET 4.7.2 or greater can set the following AppContext flag to true for the change to be disabled.
<configuration>
<runtime>
<AppContextSwitchOverrides value="Switch.UseLegacyAccessibilityFeatures.2=true"/>
</runtime>
</configuration>
BereichScope Microsoft EdgeEdge
VersionVersion 4.7.24.7.2
TypType NeuzuweisungRetargeting

NullReferenceException im Ausnahmebehandlungscode von ImageSourceConverter.ConvertFromNullReferenceException in exception handling code from ImageSourceConverter.ConvertFrom

DetailsDetails Ein Fehler im Ausnahmebehandlungscode für ConvertFrom(ITypeDescriptorContext, CultureInfo, Object) löste eine inkorrekte NullReferenceException anstelle der beabsichtigten Ausnahme (z.B. DirectoryNotFoundException oder FileNotFoundException) aus.An error in the exception handling code for ConvertFrom(ITypeDescriptorContext, CultureInfo, Object) caused an incorrect NullReferenceException to be thrown instead of the intended exception (e.g. DirectoryNotFoundException, FileNotFoundException). Diese Änderung korrigiert diesen Fehler, damit die Methode nun die richtige Ausnahme auslöst.This change corrects that error so that the method now throws the right exception.

In der Standardeinstellung lösen Anwendungen mit dem Ziel .NET Framework 4.6.2 und früher der Kompatibilität wegen weiterhin NullReferenceException aus.By default all applications targeting .NET Framework 4.6.2 and earlier continue to throw NullReferenceException for compatibility. Entwickler, die .NET Framework 4.7 und höher anzielen, sollten die richtigen Ausnahmen angezeigt bekommen.Developers targeting .NET Framework 4.7 and above should see the right exceptions.

VorschlagSuggestion Entwickler, die wieder NullReferenceException erhalten möchten, wenn Sie .NET Framework 4.7 als Zielplattform verwenden, können der Datei „app.config“ ihrer Anwendung Folgendes hinzufügen oder die entsprechenden Angaben zusammenführen:Developers who wish to revert to getting NullReferenceException when targeting .NET Framework 4.7 can add/merge the following to their application's App.config file:
<configuration>
<runtime>
<AppContextSwitchOverrides value="Switch.System.Windows.Media.ImageSourceConverter.OverrideExceptionWithNullReferenceException=true"/>
</runtime>
</configuration>
BereichScope Microsoft EdgeEdge
VersionVersion 4.74.7
TypType NeuzuweisungRetargeting
Betroffene APIsAffected APIs

Selector-Klasse – SelectionChanged-Ereignis und SelectedValue-EigenschaftSelector SelectionChanged event and SelectedValue property

DetailsDetails 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.Starting with the .NET Framework 4.7.1, a Selector always updates the value of its SelectedValue property before raising the SelectionChanged event, when its selection changes. Dadurch wird die „SelectedValue“-Eigenschaft mit den anderen Auswahleigenschaften (SelectedItem und SelectedIndex) in Einklang gebracht, die vor dem Auslösen des Ereignisses aktualisiert werden.This makes the SelectedValue property consistent with the other selection properties (SelectedItem and SelectedIndex), which are updated before raising the event.

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.In the .NET Framework 4.7 and earlier versions, the update to SelectedValue happened before the event in most cases, but it happened after the event if the selection change was caused by changing the SelectedValue property.

VorschlagSuggestion 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:Apps that target the .NET Framework 4.7.1 or later can opt out of this change and use legacy behavior by adding the following to the <runtime> section of the application configuration file:
<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:Apps that target the .NET Framework 4.7 or earlier but are running on the .NET Framework 4.7.1 or later can enable the new behavior by adding the following line to the <runtime> section of the application .configuration file:
<runtime>
<AppContextSwitchOverrides value="Switch.System.Windows.Controls.TabControl.SelectionPropertiesCanLagBehindSelectionChangedEvent=false" />
</runtime>
BereichScope GeringMinor
VersionVersion 4.7.14.7.1
TypType NeuzuweisungRetargeting
Betroffene APIsAffected APIs

SelectionChanged-Ereignis und SelectedContent-Eigenschaft von „TabControl“TabControl SelectionChanged event and SelectedContent property

DetailsDetails 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.Starting with the .NET Framework 4.7.1, a TabControl updates the value of its SelectedContent property before raising the SelectionChanged event, when its selection changes.In the .NET Framework 4.7 and earlier versions, the update to SelectedContent happened after the event.
VorschlagSuggestion 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:Apps that target the .NET Framework 4.7.1 or later can opt out of this change and use legacy behavior by adding the following to the <runtime> section of the application configuration file:
<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:Apps that target the .NET Framework 4.7 or earlier but are running on the .NET Framework 4.7.1 or later can enable the new behavior by adding the following line to the <runtime> section of the application .configuration file:
<runtime>
<AppContextSwitchOverrides value="Switch.System.Windows.Controls.TabControl.SelectionPropertiesCanLagBehindSelectionChangedEvent=false" />
</runtime>
BereichScope GeringMinor
VersionVersion 4.7.14.7.1
TypType NeuzuweisungRetargeting
Betroffene APIsAffected APIs

SHA256 ist jetzt der Standardhashalgorithmus für WPF-PackageDigitalSignatureManagerThe default hash algorithm for WPF PackageDigitalSignatureManager is now SHA256

DetailsDetails Der System.IO.Packaging.PackageDigitalSignatureManager stellt Funktionen zur digitalen Signatur von WPF-Paketen zur Verfügung.The System.IO.Packaging.PackageDigitalSignatureManager provides functionality for digital signatures in relation to WPF packages. In .NET Framework 4.7 und früheren Versionen, war SHA1 der Standardhashalgorithmus (PackageDigitalSignatureManager.DefaultHashAlgorithm), der zum Signieren von Paketbestandteilen verwendet wurde.In the .NET Framework 4.7 and earlier versions, the default algorithm (PackageDigitalSignatureManager.DefaultHashAlgorithm) used for signing parts of a package was SHA1. Diese Standardeinstellung wurde ab .NET Framework 4.7.1 aufgrund von Sicherheitsbedenken im Zusammenhang mit SHA1 auf SHA256 geändert.Due to recent security concerns with SHA1, this default has been changed to SHA256 starting with the .NET Framework 4.7.1. Diese Änderung betrifft die Signierung aller Pakete, einschließlich XPS-Dokumenten.This change affects all package signing, including XPS documents.
VorschlagSuggestion 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.A developer who wants to utilize this change while targeting a framework version below .NET Framework 4.7.1 or a developer who requires the previous functionality while targeting .NET Framework 4.7.1 or greater can set the following AppContext flag appropriately. Wenn ein TRUE-Wert zurückgegeben wird, wird SHA1 als Standardalgorithmus verwendet. Bei FALSE-Werten wird SHA256 zurückgegeben.A value of true will result in SHA1 being used as the default algorithm; false results in SHA256.
<configuration>
<runtime>
<AppContextSwitchOverrides value="Switch.MS.Internal.UseSha1AsDefaultHashAlgorithmForDigitalSignatures=true"/>
</runtime>
</configuration>
BereichScope Microsoft EdgeEdge
VersionVersion 4.7.14.7.1
TypType NeuzuweisungRetargeting
Betroffene APIsAffected APIs

Der Standardhashalgorithmus für den Markupcompiler von WPF ist jetzt SHA256The default hash algorithm for WPF's Markup Compiler is now SHA256

DetailsDetails Die WPF-MarkupCompiler stellt Kompilierungsdienste für XAML-Markupdateien bereit.The WPF MarkupCompiler provides compilation services for XAML markup files. In .NET Framework 4.7.1 und früheren Versionen war SHA1 der Standardhashalgorithmus, der für Prüfsummen verwendet wurde.In the .NET Framework 4.7.1 and earlier versions, the default hash algorithm used for checksums was SHA1. Diese Standardeinstellung wurde ab .NET Framework 4.7.2 aufgrund von Sicherheitsbedenken im Zusammenhang mit SHA1 in SHA256 geändert.Due to recent security concerns with SHA1, this default has been changed to SHA256 starting with the .NET Framework 4.7.2. Diese Änderung wirkt sich auf die gesamte Prüfsummengenerierung für Markupdateien während der Kompilierung aus.This change affects all checksum generation for markup files during compilation.
VorschlagSuggestion 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.A developer who targets .NET Framework 4.7.2 or greater and wants to revert to SHA1 hashing behavior must set the following AppContext flag.
<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.A developer who wants to utilize SHA256 hashing while targeting a framework version below .NET 4.7.2 must set the below AppContext flag. Beachten Sie, dass die installierte Version von .NET Framework 4.7.2 oder höher sein muss.Note that the installed version of the .NET Framework must be 4.7.2 or greater.
<configuration>
<runtime>
<AppContextSwitchOverrides value="Switch.System.Windows.Markup.DoNotUseSha256ForMarkupCompilerChecksumAlgorithm=false
</runtime>
</configuration>
BereichScope TransparentTransparent
VersionVersion 4.7.24.7.2
TypType NeuzuweisungRetargeting

Ändern eines Primärschlüssels durch WPF beim Anzeigen von ADO-Daten in einem Master/Detail-SzenarioWPF Changing a primary key when displaying ADO data in a Master/Detail scenario

DetailsDetails Nehmen Sie an, Sie haben eine ADO-Sammlung von Elementen des Typs Order mit einer Beziehung namens "OrderDetails", durch die diese Sammlung über den Primärschlüssel "OrderID" mit einer Sammlung von Elementen des Typs Detail verknüpft wird.Suppose you have an ADO collection of items of type Order, with a relation named "OrderDetails" relating it to a collection of items of type Detail via the primary key "OrderID". In Ihrer WPF-App können Sie ein Listensteuerelement an die Details für einen bestimmten Auftrag binden:In your WPF app, you can bind a list control to the details for a given order:
<ListBox ItemsSource="{Binding Path=OrderDetails}" >
Beim DataContext handelt es sich um ein Order-Element.where the DataContext is an Order. WPF ruft den Wert der OrderDetails-Eigenschaft ab – eine Sammlung D aller Detail-Elemente, deren OrderID der OrderID des Masterelements entspricht. Die Verhaltensänderung tritt auf, wenn Sie den Primärschlüssel OrderID des Masterelements ändern.WPF gets the value of the OrderDetails property - a collection D of all the Detail items whose OrderID matches the OrderID of the master item.The behavior change arises when you change the primary key OrderID of the master item. ADO ändert automatisch die OrderID jedes der betroffenen Datensätze in der Sammlung „Details“ (also diejenigen, die in Sammlung D kopiert wurden).ADO automatically changes the OrderID of each of the affected records in the Details collection (namely the ones copied into collection D). Was passiert mit D?But what happens to D?
  • Altes Verhalten: Sammlung D wird gelöscht.Old behavior: Collection D is cleared. Das Masterelement löst keine Änderungsbenachrichtigung für die Eigenschaft OrderDetails aus.The master item does not raise a change notification for property OrderDetails. Das ListBox-Element verwendet weiterhin Sammlung D, die jetzt leer ist.The ListBox continues to use collection D, which is now empty.
  • Neues Verhalten: Sammlung D wird nicht geändert.New behavior: Collection D is unchanged. Jedes enthaltene Element löst Änderungsbenachrichtigung für die Eigenschaft OrderID aus.Each of its items raises a change notification for the OrderID property. ListBox verwendet weiterhin Sammlung D, und zeigt die Details mit der neuen OrderID an.The ListBox continues to use collection D, and displays the details with the new OrderID.
WPF implementiert das neue Verhalten, indem Sammlung D auf andere Weise erstellt wird: durch Aufruf der ADO-Methode DataRowView.CreateChildView(DataRelation, Boolean) mit dem auf true festgelegten followParent-Argument.WPF implements the new behavior by creating collection D in a different way: by calling the ADO method DataRowView.CreateChildView(DataRelation, Boolean) with the followParent argument set to true.
VorschlagSuggestion Eine App ruft das neue Verhalten durch Verwendung der folgenden AppContext-Option auf.An app gets the new behavior by using the following AppContext switch.
<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.The switch defaults to true (old behavior) for apps that target .NET 4.7.1 or below, and to false (new behavior) for apps that target .NET 4.7.2 or above.
BereichScope GeringMinor
VersionVersion 4.7.24.7.2
TypType NeuzuweisungRetargeting

WPF FocusVisual für RadioButton und CheckBox wird jetzt ordnungsgemäß angezeigt, wenn die Steuerelemente keinen Inhalt enthaltenWPF FocusVisual for RadioButton and CheckBox Now Displays Correctly When The Controls Have No Content

DetailsDetails In .NET Framework 4.7.1 und früheren Versionen weisen CheckBox und RadioButton von WPF inkonsistente und im klassischen Design und im Design mit hohem Kontrast falsche visuelle Fokuselemente auf.In the .NET Framework 4.7.1 and earlier versions, WPF CheckBox and RadioButton have inconsistent and, in Classic and High Contrast themes, incorrect focus visuals. Diese Probleme treten in Fällen auf, in denen für die Steuerelemente keine Inhalte festgelegt sind.These issues occur in cases where the controls do not have any content set. Dadurch kann der Übergang zwischen Designs verwirrend wirken und das visuelle Fokuselement schwer zu erkennen sein.This can make the transition between themes confusing and the focus visual hard to see. 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.In the .NET Framework 4.7.2, these visuals are now more consistent across themes and more easily visible in Classic and High Contrast themes.
VorschlagSuggestion 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.A developer targeting .NET Framework 4.7.2 that wants to revert to the behavior in .NET 4.7.1 will need to set the following AppContext flag.
<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.A developer who wants to utilize this change while targeting a framework version below .NET 4.7.2 must set the following AppContext flags.Note that all the flags must be set appropriately and the installed version of the .NET Framework must be 4.7.2 or greater.WPF applications are required to opt in to all earlier accessibility improvements to get the latest improvements. Stellen Sie zu diesem Zweck sicher, dass die AppContext-Schalter „Switch.UseLegacyAccessibilityFeatures“ und „Switch.UseLegacyAccessibilityFeatures.2“ auf FALSE festgelegt sind.To do this, ensure that both the AppContext switches 'Switch.UseLegacyAccessibilityFeatures' and 'Switch.UseLegacyAccessibilityFeatures.2' are set to false.
<configuration>
<runtime>
<AppContextSwitchOverrides value="Switch.UseLegacyAccessibilityFeatures=false;Switch.UseLegacyAccessibilityFeatures.2=false;"/>
</runtime>
</configuration>
BereichScope Microsoft EdgeEdge
VersionVersion 4.7.24.7.2
TypType NeuzuweisungRetargeting

Platzvergabe im Raster für *-SpaltenWPF Grid allocation of space to star-columns

DetailsDetails Ab .NET Framework 4.7 ersetzt WPF den Algorithmus, den Grid verwendet, um Platz für *-Spalten zuzuweisen.Starting with the .NET Framework 4.7, WPF replaces the algorithm that Grid uses to allocate space to *-columns. Dadurch wird die den *-Spalten zugewiesene tatsächliche Breite unter den folgenden Umständen geändert:This will change the actual width assigned to *-columns in a number of cases:
  • 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.When one or more *-columns also have a minimum or maximum width that overrides the proportional allocation for that column. (Die Minimalbreite kann aus einer expliziten MinWidth-Deklaration oder aus einem impliziten Minimalwert abgeleitet werden, der sich aus dem Spalteninhalt ergibt.(The minimum width can derive from an explicit MinWidth declaration, or from an implicit minimum obtained from the column's content. Die maximale Breite kann nur explizit aus einer MaxWidth-Deklaration definiert werden.)The maximum width can only be defined explicitly, from a MaxWidth declaration.)
  • Wenn eine oder mehrere *-Spalten eine extrem große *-Gewichtung deklarieren, größer als 10^298.When one or more *-columns declare an extremely large *-weight, greater than 10^298.
  • Wenn die *-Gewichtungen ausreichend verschieden sind, um zu Gleitkommainstabilität zu führen (Überlauf, Unterlauf, Genauigkeitsverlust).When the *-weights are sufficiently different to encounter floating-point instability (overflow, underflow, loss of precision).
  • Wenn Layoutglättung aktiviert ist und der effektive DPI-Wert der Anzeige ausreichend hoch ist.When layout rounding is enabled, and the effective display DPI is sufficiently high.
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.In the first two cases, the widths produced by the new algorithm can be significantly different from those produced by the old algorithm; in the last case, the difference will be at most one or two pixels.

Der neue Algorithmus behebt mehrere Probleme, die beim alten Algorithmus auftreten:The new algorithm fixes several bugs present in the old algorithm:

  1. Die Gesamtzuweisung an Spalten kann die Breite des Rasters überschreiten.Total allocation to columns can exceed the Grid's width. Dies kann beim Zuweisen von Platz an eine Spalte geschehen, deren proportionaler Anteil geringer als ihre Mindestgröße ist.This can occur when allocating space to a column whose proportional share is less than its minimum size. Der Algorithmus weist die Mindestgröße zu, wodurch der für andere Spalten verfügbare Platz verringert wird.The algorithm allocates the minimum size, which decreases the space available to other columns. Wenn keine zuzuweisenden *-Spalten mehr vorhanden sind, ist die Gesamtzuweisung zu groß.If there are no *-columns left to allocate, the total allocation will be too large.
  2. Die Gesamtzuweisung kann die Breite des Rasters unterschreiten.Total allocation can fall short of the Grid's width. Dies ist das umgekehrte Problem zu Nr. 1, das beim Zuweisen zu einer Spalte auftritt, deren proportionaler Anteil größer als ihre Maximalgröße ist, wenn keine *-Spalten zum Ausgleich des Über- oder Untermaßes vorhanden sind.This is the dual problem to #1, arising when allocating to a column whose proportional share is greater than its maximum size, with no *-columns left to take up the slack.
  3. Zwei *-Spalten können Zuweisungen erhalten, die nicht proportional zu ihren *-Gewichtungen sind.Two *-columns can receive allocations not proportional to their *-weights. 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.This is a milder version of #1/#2, arising when allocating to *-columns A, B, and C (in that order), where B's proportional share violates its min (or max) constraint. 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.As above, this changes the space available to column C, who gets less (or more) proportional allocation than A did,
  4. Spalten mit extrem hohen Gewichtungen (> 10^298) werden alle behandelt, als würden sie die Gewichtung 10^298 aufweisen.Columns with extremely large weights (> 10^298) are all treated as if they had weight 10^298. Proportionale Unterschiede zwischen ihnen (und zwischen Spalten mit erheblich kleineren Gewichtungen) werden nicht berücksichtigt.Proportional differences between them (and between columns with slightly smaller weights) are not honored.
  5. Spalten mit der Gewichtung unendlich werden nicht ordnungsgemäß behandelt.Columns with infinite weights are not handled correctly. [Tatsächlich lässt sich die Gewichtung nicht auf unendlich festlegen, aber das ist eine künstliche Einschränkung.[Actually you can't set a weight to Infinity, but this is an artificial restriction. Der Zuweisungscode hat versucht, das Problem zu behandeln, dabei aber versagt.]The allocation code was trying to handle it, but doing a bad job.]
  6. Mehrere kleinere Probleme beim Vermeiden von Überlauf, Unterlauf, Genauigkeitsverlust und ähnlichen Gleitkommaproblemen.Several minor problems while avoiding overflow, underflow, loss of precision and similar floating-point issues.
  7. Anpassungen für Layoutglättung sind bei ausreichend hohem DPI fehlerhaft.Adjustments for layout rounding are incorrect at sufficiently high DPI.
Der neue Algorithmus erzeugt Ergebnisse, die den folgenden Kriterien genügen:The new algorithm produces results that meet the following criteria:

A.A. Die einer *-Spalte zugewiesene Breite ist niemals kleiner als ihre Mindestbreite oder größer als ihre Maximalbreite.The actual width assigned to a *-column is never less than its minimum width nor greater than its maximum width.
B.B. 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 werden 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.Each -column that is not assigned its minimum or maximum width is assigned a width proportional to its -weight. To be precise, if two columns are declared with width x and y respectively, and if neither column receives its minimum or maximum width, the actual widths v and w assigned to the columns are in the same proportion: v / w == x / y.
C.C. 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 Minimal- oder Maximalbreite zugewiesen wird).The total width allocated to "proportional" *-columns is equal to the space available after allocating to the constrained columns (fixed, auto, and *-columns that are allocated their min or max width). Diese kann Null sein, beispielsweise, wenn die Summe der Mindestbreiten die zur Verfügung stehende Breite des Rasters überschreitet.This might be zero, for instance if the sum of the minimum widths exceeds the Grid's available width.
D.D. Alle diese Anweisungen müssen im Hinblick auf das "ideale" Layout interpretiert werden.All these statements are to be interpreted with respect to the "ideal" layout. Wenn Layoutglättung aktiviert ist, können die tatsächlichen Breiten um bis zu ein Pixel von den idealen Breiten abweichen.When layout rounding is in effect, the actual widths can differ from the ideal widths by as much as one pixel.
Der alte Algorithmus berücksichtigte in den oben dargestellten Fällen (A), nicht jedoch die anderen Kriterien.The old algorithm honored (A) but failed to honor the other criteria in the cases outlined above.

Alle Aussagen über Spalten und Breiten in diesem Artikel gelten ebenso für Zeilen und Höhen.Everything said about columns and widths in this article applies as well to rows and heights.

VorschlagSuggestion 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.By default, apps that target versions of the .NET Framework starting with the .NET Framework 4.7 will see the new algorithm, while apps that target the .NET Framework 4.6.2 or earlier versions will see the old algorithm.

Um die Standardeinstellung außer Kraft zu setzen, verwenden Sie die folgenden Konfigurationseinstellung:To override the default, use the following configuration setting:

<runtime>
<AppContextSwitchOverrides value="Switch.System.Windows.Controls.Grid.StarDefinitionsCanExceedAvailableSpace=true" />
</runtime>
Der Wert true legt den alten Algorithmus fest, false den neuen.The value true selects the old algorithm, false selects the new algorithm.
BereichScope GeringMinor
VersionVersion 4.74.7
TypType NeuzuweisungRetargeting

Zeigerbasierte Touch-Stapel in WPFWPF Pointer-Based Touch Stack

DetailsDetails Diese Änderung ermöglicht das Aktivieren eines optionalen WM_POINTER-basierten WPF-Touch-/Stift-Stapels.This change adds the ability to enable an optional WM_POINTER based WPF touch/stylus stack. 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:Developers that do not explicitly enable this should see no change in WPF touch/stylus behavior.Current Known Issues With optional WM_POINTER based touch/stylus stack:
  • Keine Unterstützung für Freihand in Echtzeit.No support for real-time inking.
  • Zwar funktionieren Freihand- und Stift-Plug-Ins nach wie vor, jedoch werden sie im Benutzeroberflächenthread verarbeitet, was zu schlechter Leistung führen kann.While inking and StylusPlugins will still work, they will be processed on the UI Thread which can lead to poor performance.
  • Verhaltensänderungen aufgrund der Verlagerung von Touch/Stift-Ereignissen zu Mausereignissen.Behavioral changes due to changes in promotion from touch/stylus events to mouse events
  • Die Bearbeitung verhält sich möglicherweise anders.Manipulation may behave differently
  • Drag/Drop zeigt keine angemessene Rückmeldung bei Toucheingaben.Drag/Drop will not show appropriate feedback for touch input
  • Dies betrifft keine Stifteingaben.This does not affect stylus input
  • Drag/Drop kann für Touch/Stift-Ereignisse nicht mehr ausgelöst werden.Drag/Drop can no longer be initiated on touch/stylus events
  • Dadurch kann es vorkommen, dass die Anwendung nicht mehr reagiert, bis die Mauseingabe erkannt wird.This can potentially cause the application to stop responding until mouse input is detected.
  • Stattdessen sollten Entwickler Drag & Drop über Mausereignisse einleiten.Instead, developers should initiate drag and drop from mouse events.
VorschlagSuggestion Entwickler, die diesen Stapel aktivieren möchten, können der Datei „app.config“ ihrer Anwendung Folgendes hinzufügen:Developers who wish to enable this stack can add/merge the following to their application's App.config file:
<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.Removing this or setting the value to false will turn this optional stack off.Note that this stack is available only on Windows 10 Creators Update and above.
BereichScope Microsoft EdgeEdge
VersionVersion 4.74.7
TypType NeuzuweisungRetargeting

TextBox-/PasswordBox-Textauswahl von WPF folgt nicht den SystemfarbenWPF TextBox/PasswordBox Text Selection Does Not Follow System Colors

DetailsDetails 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 .NET Framework 4.7.1 and earlier versions, WPF System.Windows.Controls.TextBox and System.Windows.Controls.PasswordBox could only render a text selection in the Adorner layer. In einigen Systemdesigns verdeckte dies Text, wodurch die Lesbarkeit erschwert wurde.In some system themes this would occlude text, making it hard to read. 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.In .NET Framework 4.7.2 and later, developers have an option of enabling a non-Adorner-based selection rendering scheme that alleviates this issue.
VorschlagSuggestion Ein Entwickler, die diese Änderung nutzen möchte, muss das folgende AppContext-Flag entsprechend festlegen.A developer who wants to utilize this change must set the following AppContext flag appropriately. 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.To utilize this feature, the installed .NET Framework version must be 4.7.2 or greater.To enabled the non-adorner-based selection, use the following AppContext flag.
<configuration>
<runtime>
<AppContextSwitchOverrides value="Switch.System.Windows.Controls.Text.UseAdornerForTextboxSelectionRendering=false"/>
</runtime>
</configuration>
BereichScope Microsoft EdgeEdge
VersionVersion 4.7.24.7.2
TypType NeuzuweisungRetargeting

Windows Workflow Foundation (WF)Windows Workflow Foundation (WF)

Verbesserungen der Bedienungshilfen im Workflow-Designer von Windows Workflow Foundation (WF)Accessibility improvements in Windows Workflow Foundation (WF) workflow designer

DetailsDetails Die Arbeitsweise von Workflow-Designer von Windows Workflow Foundation (WF) mit Technologien für die Barrierefreiheit wurde verbessert.The Windows Workflow Foundation (WF) workflow designer is improving how it works with accessibility technologies. Diese Verbesserungen umfassen folgende Änderungen:These improvements include the following changes:
  • Die Aktivierreihenfolge wurde bei manchen Steuerelementen in „ Von links nach rechts“ und in „Von oben nach unten“ geändert:The tab order is changed to left to right and top to bottom in some controls:
  • Das Fenster „Korrelation initialisieren“ für das Festlegen von Korrelationsdaten für die InitializeCorrelation-AktivitätThe initialize correlation window for setting correlation data for the InitializeCorrelation activity
  • Das Fenster „Inhaltsdefinition“ für die Aktivitäten Receive, Send, SendReply und ReceiveReplyThe content definition window for the Receive, Send, SendReply, and ReceiveReply activities
  • Weitere Funktionen sind über die Tastatur verfügbar:More functions are available via the keyboard:
  • Beim Bearbeiten der Eigenschaften einer Aktivität können die Eigenschaftengruppen über die Tastatur reduziert werden, wenn diese zum ersten Mal fokussiert werden.When editing the properties of an activity, property groups can be collapsed by keyboard the first time they are focused.
  • Auf Warnsymbole kann nun über die Tastatur zugegriffen werden.Warning icons are now accessible by keyboard.
  • Auf die Schaltfläche „Weitere Eigenschaften“ im Fenster „Eigenschaften“ kann nun über die Tastatur zugegriffen werden.The More Properties button in the Properties window is now accessible by keyboard.
  • Tastaturbenutzer können nun auf die Headerelemente in den Bereichen „Argumente“ und „Variablen“ des Workflow-Designers zugreifen.Keyboard users now can access the header items in the Arguments and Variables panes of the Workflow Designer.
  • Verbesserte Sichtbarkeit von Elementen mit Fokus, z.B. in folgenden Fällen:Improved visibility of items with focus, such as when:
  • Hinzufügen von Zeilen zu Datenrastern, die vom Workflow-Designer und von Aktivitäts-Designern verwendet werdenAdding rows to data grids used by the Workflow Designer and activity designers.
  • Wechseln von Feldern mit der TAB-TASTE in den Aktivitäten ReceiveReply und SendReplyTabbing through fields in the ReceiveReply and SendReply activities.
  • Festlegen von Standardwerten für Variablen oder ArgumenteSetting default values for variables or arguments
  • Sprachausgaben können Folgendes nun richtig erkennen:Screen readers can now correctly recognize:
  • Breakpoints, die im Workflow-Designer festgelegt wurdenBreakpoints set in the workflow designer.
  • Die Aktivitäten FlowSwitch<T>, FlowDecision und CorrelationScopeThe FlowSwitch<T>, FlowDecision, and CorrelationScope activities.
  • Die Inhalte der Receive-AktivitätThe contents of the Receive activity.
  • Den Zieltyp für die InvokeMethod-AktivitätThe Target Type for the InvokeMethod activity.
  • Das Kombinationsfeld „Ausnahme“ und den Abschnitt „Finally“ in der TryCatch-AktivitätThe Exception combobox and the Finally section in the TryCatch activity.
  • 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)The Message Type combobox, the splitter in the Add Correlation Initializers window, the Content Definition window, and the CorrelatesOn Defintion window in the messaging activities (Receive, Send, SendReply, and ReceiveReply).
  • Übertragungen von Zustandsautomaten und ÜbertragungszieleState machine transitions and transitions destinations.
  • Anmerkungen und Connectors von FlowDecision-AktivitätenAnnotations and connectors on FlowDecision activities.
  • Die per Rechtsklick aufrufbaren Kontextmenüs von AktivitätenThe context (right-click) menus for activities.
  • Die Editors für Eigenschaftswerte, die Schaltfläche, „Suche löschen“, die Sortierschaltflächen „Nach Kategorie“ und „Alphabetisch“ sowie das Dialogfeld „Ausdrucks-Editor“ im EigenschaftenrasterThe property value editors, the Clear Search button, the By Category and Alphabetical sort buttons, and the Expression Editor dialog in the properties grid.
  • Den Zoomprozentwert im Workflow-DesignerThe zoom percentage in the Workflow Designer.
  • Das Trennzeichen in den Aktivitäten Parallel und PickThe separator in Parallel and Pick activities.
  • Die InvokeDelegate-AktivitätThe InvokeDelegate activity.
  • Das Fenster „Typen auswählen“ für Wörterbuchaktivitäten (Microsoft.Activities.AddToDictionary<TKey,TValue>, Microsoft.Activities.RemoveFromDictionary<TKey,TValue> usw.)The Select Types window for dictionary activities (Microsoft.Activities.AddToDictionary<TKey,TValue>, Microsoft.Activities.RemoveFromDictionary<TKey,TValue>, etc.).
  • Das Fenster „.NET-Typ suchen und auswählen“The Browse and Select .NET Type window.
  • Breadcrumbs im Workflow-DesignerBreadcrumbs in the 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.Users who choose High Contrast themes will see many improvements in the visibility of the Workflow Designer and its controls like better contrast ratios between elements and more noticeable selection boxes used for focus elements.
VorschlagSuggestion 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:If you have an application with a re-hosted workflow designer, your application can benefit from these changes by performing either of these actions:
  • Rekompilieren Sie Ihre Anwendung, um .NET Framework 4.7.1 anzuzielen.Recompile your application to target the .NET Framework 4.7.1. Die Verbesserungen der Barrierefreiheit werden standardmäßig aktiviert.These accessibility changes are enabled by default.
  • 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 auf false festlegen.If your application targets the .NET Framework 4.7 or earlier but is running on the .NET Framework 4.7.1, you can opt out of these legacy accessibility behaviors by adding the following AppContext switch to the <runtime> section of the app.config file and set it to false, as the following example shows.
<?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.Applications that target the .NET Framework 4.7.1 or later and want to preserve the legacy accessibility behavior can opt in to the use of legacy accessibility features by explicitly setting this AppContext switch to true.
BereichScope GeringMinor
VersionVersion 4.7.14.7.1
TypType NeuzuweisungRetargeting

Vermeiden von Endlosrekursion für IWorkflowInstanceManagement.TransactedCancel und IWorkflowInstanceManagement.TransactedTerminateAvoiding endless recursion for IWorkflowInstanceManagement.TransactedCancel and IWorkflowInstanceManagement.TransactedTerminate

DetailsDetails 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.Under some circumstances when using IWorkflowInstanceManagement.TransactedCancel or IWorkflowInstanceManagement.TransactedTerminate APIs to cancel or terminate a workflow service instance, the workflow instance may encounter a stack overflow due to endless recursion when the Workflow runtime attempts to persist the service instance as part of processing the request. 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 TransactedCancel- und TransactedTerminate-Vorgänge erstellen Arbeitselemente, die für die Workflowdienstinstanz in die Warteschlange eingereiht werden.The problem occurs if the workflow instance is in a state where it is waiting for some other outstanding WCF request to another service to complete.The TransactedCancel and TransactedTerminate operations create work items that are queued for the workflow service instance. Diese Arbeitselemente werden nicht im Rahmen der Verarbeitung der TransactedCancel/TransactedTerminate-Anforderung ausgeführt.These work items are not executed as part of the processing of the TransactedCancel/TransactedTerminate request. Da die Workflowdienstinstanz damit ausgelastet ist, auf den Abschluss der anderen ausstehenden WCF-Anforderung zu warten, verbleibt das erstellte Arbeitselement in der Warteschlange.Because the workflow service instance is busy waiting for the other outstanding WCF request to complete, the work item created remains queued. Der TransactedCancel/TransactedTerminate-Vorgang wird abgeschlossen, und die Steuerung wird zurück an den Client übergeben.The TransactedCancel/TransactedTerminate operation completes and control is returned back to the client. Wenn die dem TransactedCancel/TransactedTerminate-Vorgang zugeordnete Transaktion den Commit versucht, muss sie den Zustand der Workflowdienstinstanz persistent speichern.When the transaction associated with the TransactedCancel/TransactedTerminate operation attempts to commit, it needs to persist the workflow service instance state. 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.But because there is an outstanding WCF request for the instance, the Workflow runtime cannot persist the workflow service instance, and an endless recursion loop leads to the stack overflow.Because TransactedCancel and TransactedTerminate only create a work item in memory, the fact that a transaction exists doesn't have any effect. 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.A rollback of the transaction does not discard the work item.To address this issue, starting in .NET Framework 4.7.2, we have introduced an AppSetting that can be added to the web.config/app.config of the workflow service that tells it to ignore transactions for TransactedCancel and TransactedTerminate. Auf diese Weise kann die Transaktion einen Commit auszuführen, ohne zu warten, bis die Workflowinstanz persistent gespeichert wurde. Die AppSetting für dieses Feature heißt microsoft:WorkflowServices:IgnoreTransactionsForTransactedCancelAndTransactedTerminate.This allows the transaction to commit without waiting for the workflow instance to persist.The AppSetting for this feature is named microsoft:WorkflowServices:IgnoreTransactionsForTransactedCancelAndTransactedTerminate. Der Wert true gibt an, dass die Transaktion ignoriert werden soll, um so den Stapelüberlauf zu vermeiden.A value of true indicates that the transaction should be ignored, thus avoiding the stack overflow. Der Standardwert dieser AppSetting ist false. Vorhandene Workflowdienstinstanzen sind daher nicht betroffen.The default value of this AppSetting is false, so existing workflow service instances are not affected.
VorschlagSuggestion 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:If you are using AppFabric or another IWorkflowInstanceManagement client and are encountering a stack overflow in the workflow service instance when trying to cancel or terminate a workflow instance, you can add the following to the <appSettings> section of the web.config/app.config file for the workflow service:
<add key="microsoft:WorkflowServices:IgnoreTransactionsForTransactedCancelAndTransactedTerminate" value="true"/>
Wenn dieses Problem nicht auftritt, müssen Sie diese Aktion nicht ausführen.If you are not encountering the problem, you do not need to do this.
BereichScope Microsoft EdgeEdge
VersionVersion 4.7.24.7.2
TypType NeuzuweisungRetargeting

Änderung der Workflowprüfsummen von MD5 in SHA1Workflow checksums changed from MD5 to SHA1

DetailsDetails Die Workflowlaufzeit generiert unter Verwendung eines Hashalgorithmus zur Unterstützung des Debuggens mit Visual Studio eine Prüfsumme für eine Workflowinstanz.To support debugging with Visual Studio, the Workflow runtime generates a checksum for a workflow instance using a hashing algorithm. 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.In the .NET Framework 4.6.2 and earlier versions, workflow checksum hashing used the MD5 algorithm, which caused issues on FIPS-enabled systems. Ab .NET Framework 4.7 wird der SHA1-Algorithmus verwendet.Starting with the .NET Framework 4.7, the algorithm is SHA1. Wenn Ihr Code diese Prüfsummen dauerhaft gespeichert hat, sind diese nicht kompatibel.If your code has persisted these checksums, they will be incompatible.
VorschlagSuggestion Wenn Ihr Code aufgrund eines Prüfsummenfehlers keine Workflowinstanzen laden kann, sollten Sie versuchen, den AppContext-Schalter "Switch.System.Activities.UseMD5ForWFDebugger" auf TRUE festzulegen. Dies können Sie in Form von Code tun:If your code is unable to load workflow instances due to a checksum failure, try setting the AppContext switch "Switch.System.Activities.UseMD5ForWFDebugger" to true.In code:
System.AppContext.SetSwitch("Switch.System.Activities.UseMD5ForWFDebugger", true);
Stattdessen können Sie dies auch im Rahmen der Konfiguration vornehmen:Or in configuration:
<configuration>
<runtime>
<AppContextSwitchOverrides value="Switch.System.Activities.UseMD5ForWFDebugger=true" />
</runtime>
</configuration>
BereichScope GeringMinor
VersionVersion 4.74.7
TypType NeuzuweisungRetargeting