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

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.6.1 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.6.1, review the following topics for application compatibility issues that may affect your app:

KernspeicherCore

Ä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

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

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

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

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

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

Aufrufe von System.Windows.Input.PenContext.Disable auf touchfähigen Systemen können eine ArgumentException auslösenCalls to System.Windows.Input.PenContext.Disable on touch-enabled systems may throw an ArgumentException

DetailsDetails Unter bestimmten Umständen können Aufrufe der internen Methode System.Windows.Intput.PenContext.Disable auf touchfähigen Systemen eine nicht behandelte T:System.ArgumentException aufgrund von Eintrittsinvarianz auslösen.Under some circumstances, calls to the internal System.Windows.Intput.PenContext.Disable method on touch-enabled systems may throw an unhandled T:System.ArgumentException because of reentrancy.
VorschlagSuggestion Dieses Problem wurde in .NET Framework 4.7 behoben.This issue has been addressed in the .NET Framework 4.7. Führen Sie ein Upgrade auf .NET Framework 4.7 oder höher aus, um diese Ausnahme zu vermeiden.To prevent the exception, upgrade to a version of the .NET Framework starting with the .NET Framework 4.7.
BereichScope Microsoft EdgeEdge
VersionVersion 4.6.14.6.1
TypType NeuzuweisungRetargeting