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

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.2 zu 4.7 migrieren, finden Sie in folgenden Themen 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.2 to 4.7, review the following topics for application compatibility issues that may affect your app:

ASP.NETASP.NET

HttpRuntime.AppDomainAppPath löst NullReferenceException ausHttpRuntime.AppDomainAppPath Throws a NullReferenceException

DetailsDetails In .NET Framework 4.6.2 löst die Laufzeit T:System.NullReferenceException aus, wenn ein P:System.Web.HttpRuntime.AppDomainAppPath-Wert abgerufen wird, der NULL-Zeichen enthält. In .NET Framework 4.6.1 und früheren Versionen löst die Laufzeit eine T:System.ArgumentNullException aus.In the .NET Framework 4.6.2, the runtime throws a T:System.NullReferenceException when retrieving a P:System.Web.HttpRuntime.AppDomainAppPath value that includes null characters.In the .NET Framework 4.6.1 and earlier versions, the runtime throws an T:System.ArgumentNullException.
VorschlagSuggestion Sie können mit einer der folgenden Möglichkeiten auf diese Änderung reagieren:You can do either of the follow to respond to this change:
  • Behandeln Sie die T:System.NullReferenceException, wenn Ihre Anwendung in .NET Framework 4.6.2 ausgeführt wird.Handle the T:System.NullReferenceException if you application is running on the .NET Framework 4.6.2.
  • Führen Sie ein Upgrade auf .NET Framework 4.7 durch, sodass das vorherige Verhalten wiederhergestellt und eine T:System.ArgumentNullException ausgelöst wird.Upgrade to the .NET Framework 4.7, which restores the previous behavior and throws an T:System.ArgumentNullException.
BereichScope Microsoft EdgeEdge
VersionVersion 4.6.24.6.2
TypType NeuzuweisungRetargeting
Betroffene APIsAffected APIs

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

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

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)

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-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

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

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

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 möglicherweise zu einem Hängen der Anwendung kommen, bis die Mauseingabe erkannt wird.This can potentially hang the application 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

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

Ä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