Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
In diesem Artikel werden App-Kompatibilitätsprobleme aufgeführt, die in .NET Framework 4.6, 4.6.1 und 4.6.2 auftreten.
.NET Framework 4.6
ASP.NET
GridView-Steuerelemente, bei denen „AllowCustomPaging“ auf TRUE festgelegt ist, kann das Ereignis „PageIndexChanging“ ausgelöst werden, wenn die letzte Seite der Ansicht verlassen wird
Einzelheiten
Ein Fehler im .NET Framework 4.5 bewirkt, dass System.Web.UI.WebControls.GridView.PageIndexChanging manchmal nicht für System.Web.UI.WebControls.GridViews ausgelöst wird, die System.Web.UI.WebControls.GridView.AllowCustomPaging aktiviert haben.
Vorschlag
Dieses Problem wurde in .NET Framework 4.6 behoben und kann durch ein Upgrade auf diese Version von .NET Framework behoben werden. Das Problem kann umgangen werden, indem die App eine explizite BindGrid-Bindung an eine beliebige Page_Load
-Methode durchführt, die diese Bedingungen erfüllt (System.Web.UI.WebControls.GridView befindet sich auf der letzten Seite und LastSystem.Web.UI.WebControls.GridView.PageSize unterscheidet sich von System.Web.UI.WebControls.GridView.PageSize). Alternativ kann die App so geändert werden, dass paging (anstelle von benutzerdefiniertem Paging) zugelassen wird, da in diesem Szenario das Problem nicht veranschaulicht wird.
Name | Wert |
---|---|
Umfang | Geringfügig |
Version | 4.5 |
Typ | Laufzeit |
Betroffene APIs
Kern
Ein in .NET Framework 4.5 mit NetDataContractSerializer serialisiertes ConcurrentDictionary kann nicht von .NET Framework 4.5.1 oder 4.5.2 deserialisiert werden.
Einzelheiten
Aufgrund von Typänderungen können ConcurrentDictionary<TKey,TValue>-Objekte, die unter Verwendung von System.Runtime.Serialization.NetDataContractSerializer mit .NET Framework 4.5 serialisiert werden, nicht in .NET Framework 4.5.1 oder 4.5.2 deserialisiert werden. Beachten Sie jedoch, dass die Serialisierung mit .NET Framework 4.5.x und die Deserialisierung mit .NET Framework 4.5 funktionieren. Genauso funktioniert die versionsübergreifende Serialisierung in .NET Framework 4.x mit .NET Framework 4.6. Dies hat keine Auswirkungen auf die (De-)Serialisierung einer einzelnen Version von .NET Framework.
Vorschlag
Wenn es erforderlich ist, System.Collections.Concurrent.ConcurrentDictionary<TKey,TValue> zwischen .NET Framework 4.5 und .NET Framework 4.5.1/4.5.2 zu serialisieren und zu deserialisieren, sollte ein anderer Serialisierer wie System.Runtime.Serialization.DataContractSerializer anstelle von System.Runtime.Serialization.NetDataContractSerializer verwendet werden. Da dieses Problem in .NET Framework 4.6 behoben ist, kann es durch ein Upgrade auf diese Version von .NET Framework behoben werden.
Name | Wert |
---|---|
Umfang | Geringfügig |
Version | 4.5.1 |
Typ | Laufzeit |
Betroffene APIs
Kann nicht über API-Analyse erkannt werden.
AppDomainSetup.DynamicBase wird von UseRandomizedStringHashAlgorithm nicht mehr randomisiert.
Einzelheiten
Vor dem .NET Framework 4.6 wurde der Wert von DynamicBase zufällig zwischen Anwendungsdomänen oder Prozessen geändert, wenn UseRandomizedStringHashAlgorithm in der Konfigurationsdatei der App aktiviert war. Ab .NET Framework 4.6 DynamicBase gibt ein stabiles Ergebnis zwischen verschiedenen Instanzen einer ausgeführten App und zwischen verschiedenen App-Domänen zurück. Dynamische Basen werden sich für verschiedene Apps immer noch unterscheiden. Diese Änderung entfernt das zufällige Benennungselement für verschiedene Instanzen derselben App.
Vorschlag
Beachten Sie, dass die Aktivierung von UseRandomizedStringHashAlgorithm
nicht dazu führt, dass DynamicBase randomisiert wird. Wenn eine zufällige Basis erforderlich ist, muss sie nicht über diese API, sondern im Code Ihrer App erstellt werden.
Name | Wert |
---|---|
Umfang | Rand |
Version | 4.6 |
Typ | Laufzeit |
Betroffene APIs
Durch das Aufrufen von "Attribute.GetCustomAttributes" auf einer Indexereigenschaft wird keine "AmbiguousMatchException" mehr ausgelöst, wenn die Mehrdeutigkeit durch den Typ des Indexes aufgelöst werden kann.
Einzelheiten
Vor dem .NET Framework 4.6 führte das Aufrufen von GetCustomAttribute(s)
bei einer Indexereigenschaft, die sich nur durch den Typ des Indexes von einer anderen Eigenschaft unterscheidet, zu einem System.Reflection.AmbiguousMatchException. Ab .NET Framework 4.6 werden die Attribute der Eigenschaft ordnungsgemäß zurückgegeben.
Vorschlag
Beachten Sie, dass GetCustomAttribute(s) jetzt häufiger funktioniert. Wenn sich eine App zuvor auf System.Reflection.AmbiguousMatchException verlassen hat, sollte jetzt die Reflektion verwendet werden, um stattdessen explizit nach mehreren Indexern zu suchen.
Name | Wert |
---|---|
Umfang | Rand |
Version | 4.6 |
Typ | Laufzeit |
Betroffene APIs
- Attribute.GetCustomAttribute(MemberInfo, Type)
- Attribute.GetCustomAttribute(MemberInfo, Type, Boolean)
- Attribute.GetCustomAttributes(MemberInfo)
- Attribute.GetCustomAttributes(MemberInfo, Boolean)
- Attribute.GetCustomAttributes(MemberInfo, Type)
- Attribute.GetCustomAttributes(MemberInfo, Type, Boolean)
- CustomAttributeExtensions.GetCustomAttribute(MemberInfo, Type)
- CustomAttributeExtensions.GetCustomAttribute(MemberInfo, Type, Boolean)
- CustomAttributeExtensions.GetCustomAttribute<T>(MemberInfo)
- CustomAttributeExtensions.GetCustomAttribute<T>(MemberInfo, Boolean)
- CustomAttributeExtensions.GetCustomAttributes(MemberInfo)
- CustomAttributeExtensions.GetCustomAttributes(MemberInfo, Boolean)
- CustomAttributeExtensions.GetCustomAttributes(MemberInfo, Type)
- CustomAttributeExtensions.GetCustomAttributes(MemberInfo, Type, Boolean)
- CustomAttributeExtensions.GetCustomAttributes<T>(MemberInfo)
- CustomAttributeExtensions.GetCustomAttributes<T>(MemberInfo, Boolean)
COR_PRF_GC_ROOT_HANDLE-Elemente werden nicht vom Profiler aufgezählt
Einzelheiten
In .NET Framework v4.5.1 gibt die Profilerstellungs-API RootReferences2()
COR_PRF_GC_ROOT_HANDLE
fälschlicherweise nie zurück (sie werden stattdessen als COR_PRF_GC_ROOT_OTHER
zurückgegeben). Dieses Problem wurde ab .NET Framework 4.6 behoben.
Vorschlag
Dieses Problem wurde in .NET Framework 4.6 behoben und kann durch ein Upgrade auf diese Version von .NET Framework behoben werden.
Name | Wert |
---|---|
Umfang | Geringfügig |
Version | 4.5.1 |
Typ | Laufzeit |
Betroffene APIs
Kann nicht über API-Analyse erkannt werden.
ETW EventListeners erfassen keine Ereignisse von Anbietern mit expliziten Schlüsselwörtern (z. B. dem TPL-Anbieter)
Einzelheiten
ETW-EventListener mit einer leeren Schlüsselwortmaske erfassen keine Ereignisse von Providern mit expliziten Schlüsselwörtern. Im .NET Framework 4.5 begann der TPL-Anbieter explizite Schlüsselwörter bereitzustellen und löste dieses Problem aus. In .NET Framework 4.6 wurden EventListener aktualisiert, damit dieses Problem nicht mehr besteht.
Vorschlag
Um dieses Problem zu umgehen, ersetzen Sie Aufrufe an EnableEvents(EventSource, EventLevel) durch Aufrufe der EnableEvents-Überladung, die explizit die zu verwendende Maske "beliebige Schlüsselwörter" angibt: EnableEvents(eventSource, level, unchecked((EventKeywords)0xFFFFffffFFFFffff))
.
Alternativ wurde dieses Problem in .NET Framework 4.6 behoben und kann durch ein Upgrade auf diese Version von .NET Framework behoben werden.
Name | Wert |
---|---|
Umfang | Rand |
Version | 4.5 |
Typ | Laufzeit |
Betroffene APIs
Der persische Kalender verwendet jetzt den Hijri-Solaralgorithmus.
Einzelheiten
Ab .NET Framework 4.6 verwendet die System.Globalization.PersianCalendar Klasse den Hijri-Solaralgorithmus. Das Konvertieren von Datumsangaben zwischen den System.Globalization.PersianCalendar und anderen Kalendern kann zu einem etwas anderen Ergebnis führen, beginnend mit dem .NET Framework 4.6 für Datumsangaben vor 1800 oder nach 2023 (Gregorian). Auch ist jetzt PersianCalendar.MinSupportedDateTimeMarch 22, 0622
anstelle von March 21, 0622
.
Vorschlag
Beachten Sie, dass einige frühe oder späte Datumsangaben bei Verwendung von PersischCalendar in .NET Framework 4.6 geringfügig unterschiedlich sein können. Beim Serialisieren von Datumsangaben zwischen Prozessen, die möglicherweise in verschiedenen .NET Framework-Versionen ausgeführt werden, speichern Sie sie nicht als Persercalendar-Datumszeichenfolgen (da diese Werte möglicherweise unterschiedlich sind).
Name | Wert |
---|---|
Umfang | Geringfügig |
Version | 4.6 |
Typ | Laufzeit |
Betroffene APIs
Reflection-Objekte können nicht mehr von verwaltetem Code an Out-of-Process-DCOM-Clients übergeben werden.
Einzelheiten
Reflection-Objekte können nicht mehr von verwaltetem Code an Out-of-Process-DCOM-Clients übergeben werden. Die folgenden Typen sind betroffen:
- System.Reflection.Assembly
- System.Reflection.MemberInfo (und seine abgeleiteten Typen, einschließlich System.Reflection.FieldInfo, System.Reflection.MethodInfo, System.Typeund System.Reflection.TypeInfo)
- System.Reflection.MethodBody
- System.Reflection.Module
- System.Reflection.ParameterInfo
Aufrufe an IMarshal
für das Objekt geben E_NOINTERFACE
zurück.
Vorschlag
Aktualisieren Sie Marshaling-Code, um mit Nicht-Spiegelungsobjekten zu arbeiten.
Name | Wert |
---|---|
Umfang | Geringfügig |
Version | 4.6 |
Typ | Laufzeit |
Betroffene APIs
- System.Reflection.Assembly
- System.Reflection.FieldInfo
- System.Reflection.MemberInfo
- System.Reflection.MethodBody
- System.Reflection.MethodInfo
- System.Reflection.Module
- System.Reflection.ParameterInfo
- System.Reflection.TypeInfo
- System.Type
TargetFrameworkName für die Standardanwendungsdomäne erhält nicht mehr standardmäßig den Wert NULL, wenn kein Wert festgelegt wurde
Einzelheiten
Die System.AppDomainSetup.TargetFrameworkName Datei war zuvor null in der Standard-App-Domäne, es sei denn, sie wurde explizit festgelegt. Ab 4.6 hat die System.AppDomainSetup.TargetFrameworkName Eigenschaft für die Standard-App-Domäne einen Standardwert, der vom TargetFrameworkAttribute abgeleitet ist (sofern vorhanden). Nicht standardmäßige App-Domänen erben weiterhin ihre System.AppDomainSetup.TargetFrameworkName von der Standard-App-Domäne (die in 4.6 nicht standardmäßig null ist), es sei denn, sie wird explizit außer Kraft gesetzt.
Vorschlag
Der Code sollte aktualisiert werden, damit er nicht von TargetFrameworkName der Standardeinstellung auf NULL abhängt. Wenn es erforderlich ist, dass diese Eigenschaft weiterhin auf NULL ausgewertet wird, kann sie explizit auf diesen Wert festgelegt werden.
Name | Wert |
---|---|
Umfang | Rand |
Version | 4.6 |
Typ | Laufzeit |
Betroffene APIs
X509Certificate2.ToString(Boolean) wird jetzt nicht ausgelöst, wenn .NET das Zertifikat nicht verarbeiten kann
Einzelheiten
Zuvor wurde diese Methode in .NET Framework 4.5.2 ausgelöst, wenn true
für den ausführlichen Parameter übergeben wurde und Zertifikate installiert waren, die von .NET Framework nicht unterstützt wurden. Die Methode wird erfolgreich sein und gibt eine gültige Zeichenfolge zurück, die die nicht zugänglichen Teile des Zertifikats weglässt.
Vorschlag
Jeder von X509Certificate2.ToString(Boolean) abhängige Code sollte aktualisiert werden, um zu erwarten, dass die zurückgegebene Zeichenfolge einige Zertifikatsdaten in einigen Fällen ausschließt (z.B. den öffentlichen Schlüssel, den privaten Schlüssel und die Erweiterungen), in denen zuvor die API ausgelöst worden wäre.
Name | Wert |
---|---|
Umfang | Rand |
Version | 4.6 |
Typ | Laufzeit |
Betroffene APIs
Daten
Beim Versuch, eine TCP/IP-Verbindung zu einer SQL Server-Datenbank herzustellen, die auf localhost
aufgelöst wird, schlägt dies fehl.
Einzelheiten
Versuchen Sie in .NET Framework 4.6 und 4.6.1, eine TCP/IP-Verbindung mit einer SQL Server-Datenbank herzustellen, die zu localhost
aufgelöst wird. Dies schlägt mit dem Fehler "Beim Herstellen einer Verbindung mit SQL Server ist ein netzwerkbezogener oder instanzspezifischer Fehler aufgetreten." fehl. Der Server wurde nicht gefunden oder war nicht zugänglich. Vergewissern Sie sich, dass der Instanzname korrekt ist und SQL Server so konfiguriert ist, dass Remoteverbindungen zulässig sind. (Anbieter: SQL-Netzwerkschnittstellen, Fehler: 26 – Fehler beim Auffinden des angegebenen Servers/der angegebenen Instanz)")
Vorschlag
Dieses Problem wurde behoben und das vorherige Verhalten in .NET Framework 4.6.2 wiederhergestellt. Zum Herstellen einer Verbindung zu einer SQL Server-Datenbank, die auf localhost
verweist, aktualisieren Sie auf das .NET Framework 4.6.2.
Name | Wert |
---|---|
Umfang | Geringfügig |
Version | 4.6 |
Typ | Laufzeit |
Betroffene APIs
Kann nicht über API-Analyse erkannt werden.
Debugger
Null-Koalescerwerte sind im Debugger erst nach einem weiteren Schritt sichtbar.
Einzelheiten
Ein Fehler im .NET Framework 4.5 bewirkt, dass Werte, die über einen Null-Koalierungsvorgang festgelegt wurden, im Debugger nicht sofort sichtbar sind, nachdem der Zuordnungsvorgang ausgeführt wird, wenn er in der 64-Bit-Version des Framework ausgeführt wird.
Vorschlag
Wenn Sie einen weiteren Schritt im Debugger ausführen, wird der Wert der lokalen Variablen bzw. des Feldes korrekt aktualisiert. Außerdem wurde dieses Problem in .NET Framework 4.6 behoben. Ein Upgrade auf diese Version des Frameworks sollte das Problem lösen.
Name | Wert |
---|---|
Umfang | Rand |
Version | 4.5 |
Typ | Laufzeit |
Betroffene APIs
Kann nicht über API-Analyse erkannt werden.
Vernetzung
ContentDisposition DateTimes gibt leicht unterschiedliche Zeichenfolgen zurück.
Einzelheiten
Die Zeichenfolgendarstellungen von System.Net.Mime.ContentDisposition wurden ab Version 4.6 aktualisiert, um die Stundenkomponente von System.DateTime immer mit zwei Ziffern darzustellen. Dies ist die Einhaltung von RFC822 und RFC2822. Dies bewirkt, dass ToString() in Version 4.6 eine etwas andere Zeichenfolge in Szenarien zurückgibt, bei denen eines der Zeitelemente der Anordnung vor 10:00 Uhr liegt. Beachten Sie, dass ContentDispositions manchmal serialisiert werden, indem sie in Zeichenfolgen konvertiert werden, sodass alle ToString() Vorgänge, Serialisierung oder GetHashCode-Aufrufe überprüft werden sollten.
Vorschlag
Erwarten Sie nicht, dass Zeichenfolgendarstellungen von ContentDispositions aus verschiedenen .NET Framework-Versionen ordnungsgemäß miteinander verglichen werden. Konvertieren Sie die Zeichenfolgen, wenn möglich, zurück in ContentDispositions, bevor Sie einen Vergleich durchführen.
Name | Wert |
---|---|
Umfang | Geringfügig |
Version | 4.6 |
Typ | Laufzeit |
Betroffene APIs
Serialisierung
Die Ausnahmemeldung für fehlgeschlagene DataContract-Serialisierungen im Fall eines unbekannten Typs hat sich geändert
Einzelheiten
Ab .NET Framework 4.6 wurde die Ausnahmemeldung konkretisiert, wenn aufgrund fehlender "bekannter Typen" eine System.Runtime.Serialization.DataContractSerializer nicht serialisiert oder System.Runtime.Serialization.Json.DataContractJsonSerializer nicht deserialisiert werden kann.
Vorschlag
Apps sollten nicht von bestimmten Ausnahmemeldungen abhängen. Wenn eine App von dieser Nachricht abhängig ist, aktualisieren Sie sie entweder so, dass die neue Nachricht erwartet wird, oder (vorzugsweise) ändern, damit sie nur vom Ausnahmetyp abhängt.
Name | Wert |
---|---|
Umfang | Rand |
Version | 4.6 |
Typ | Laufzeit |
Betroffene APIs
- DataContractJsonSerializer(Type)
- DataContractJsonSerializer(Type, IEnumerable<Type>)
- DataContractJsonSerializer(Type, DataContractJsonSerializerSettings)
- DataContractJsonSerializer(Type, String)
- DataContractJsonSerializer(Type, String, IEnumerable<Type>)
- DataContractJsonSerializer(Type, XmlDictionaryString)
- DataContractJsonSerializer(Type, XmlDictionaryString, IEnumerable<Type>)
- DataContractJsonSerializer(Type, IEnumerable<Type>, Int32, Boolean, IDataContractSurrogate, Boolean)
- DataContractJsonSerializer(Type, String, IEnumerable<Type>, Int32, Boolean, IDataContractSurrogate, Boolean)
- DataContractJsonSerializer(Type, XmlDictionaryString, IEnumerable<Type>, Int32, Boolean, IDataContractSurrogate, Boolean)
- DataContractSerializer(Type)
- DataContractSerializer(Type, DataContractSerializerSettings)
- DataContractSerializer(Type, IEnumerable<Type>)
- DataContractSerializer(Type, String, String)
- DataContractSerializer(Type, String, String, IEnumerable<Type>)
- DataContractSerializer(Type, XmlDictionaryString, XmlDictionaryString)
- DataContractSerializer(Type, XmlDictionaryString, XmlDictionaryString, IEnumerable<Type>)
- DataContractSerializer(Type, IEnumerable<Type>, Int32, Boolean, Boolean, IDataContractSurrogate)
- DataContractSerializer(Type, IEnumerable<Type>, Int32, Boolean, Boolean, IDataContractSurrogate, DataContractResolver)
- DataContractSerializer(Type, String, String, IEnumerable<Type>, Int32, Boolean, Boolean, IDataContractSurrogate)
- DataContractSerializer(Type, String, String, IEnumerable<Type>, Int32, Boolean, Boolean, IDataContractSurrogate, DataContractResolver)
- DataContractSerializer(Type, XmlDictionaryString, XmlDictionaryString, IEnumerable<Type>, Int32, Boolean, Boolean, IDataContractSurrogate)
- DataContractSerializer(Type, XmlDictionaryString, XmlDictionaryString, IEnumerable<Type>, Int32, Boolean, Boolean, IDataContractSurrogate, DataContractResolver)
Setup und Bereitstellung
Produktversionsänderungen in .NET Framework 4.6 und höheren Versionen
Einzelheiten
Die Produktversionierung hat sich im Vergleich zu den vorherigen Versionen des .NET Frameworks und insbesondere von .NET Framework 4, 4.5, 4.5.1 und 4.5.2 geändert. Im Folgenden sind die detaillierten Änderungen aufgeführt:
- Der Wert des
Version
Eintrags imHKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Full
Schlüssel hat sich für das .NET Framework 4.6 und seine Point-Releases in4.6.xxxxx
geändert und für das .NET Framework 4.7 und 4.7.1 in4.7.xxxxx
. In .NET Framework 4.5, 4.5.1 und 4.5.2 hatte es das Format4.5.xxxxx
. - Die Datei- und Produktversionsverwaltung für .NET Framework-Dateien wurde von dem früheren Versionsverwaltungsschema von 4.0.30319.x in 4.6.X.0 für .NET Framework 4.6 und deren Punktversionen und in 4.7.X.0 für .NET Framework 4.7 und 4.7.1 geändert. Sie können diese neuen Werte sehen, wenn Sie die Eigenschaften der Datei anzeigen, nachdem Sie mit der rechten Maustaste auf eine Datei geklickt haben.
- Die Attribute AssemblyFileVersionAttribute und AssemblyInformationalVersionAttribute für verwaltete Assemblys haben Versionswerte in der Form 4.6.X.0 für das .NET Framework 4.6 und dessen Zwischenversionen sowie 4.7.X.0 für das .NET Framework 4.7 und 4.7.1.
- In .NET Framework 4.6, 4.6.1, 4.6.2, 4.7 und 4.7.1 gibt die Environment.Version Eigenschaft die Zeichenfolge
4.0.30319.42000
der festen Version zurück. In .NET Framework 4, 4.5, 4.5.1 und 4.5.2 werden Versionszeichenfolgen im Format4.0.30319.xxxxx
zurückgegeben (z. B. "4.0.30319.18010"). Bitte beachten Sie, dass wir nicht empfehlen, dass Anwendungscode eine neue Abhängigkeit von der Eigenschaft "Environment.Version" eingeht.
Weitere Informationen finden Sie unter Wie man feststellt, welche .NET Framework-Versionen installiert sind.
Vorschlag
Im Allgemeinen sollten Anwendungen von den empfohlenen Techniken abhängen, um z. B. die Laufzeitversion von .NET Framework und das Installationsverzeichnis zu erkennen:
- Informationen zum Ermitteln der Laufzeitversion von .NET Framework finden Sie unter How to: Determine Which .NET Framework Versions Are Installed.
- Verwenden Sie den Wert des
InstallPath
Eintrags imHKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Full
Schlüssel, um den Installationspfad für .NET Framework zu ermitteln.
Von Bedeutung
Der Unterschlüsselname lautet NET Framework Setup
, nicht .NET Framework Setup
.
- Rufen Sie die Methode RuntimeEnvironment.GetRuntimeDirectory() auf, um den Verzeichnispfad zur .NET Framework Common Language Runtime zu ermitteln.
- Um die CLR-Version abzurufen, rufen Sie die Methode RuntimeEnvironment.GetSystemVersion() auf. Für .NET Framework 4 und deren Punktversionen (.NET Framework 4.5, 4.5.1, 4.5.2 und .NET Framework 4.6, 4.6.1, 4.6.2, 4.7 und 4.7.1) gibt sie die Zeichenfolge v4.0.30319 zurück.
Name | Wert |
---|---|
Umfang | Geringfügig |
Version | 4.6 |
Typ | Laufzeit |
Betroffene APIs
Kann nicht über API-Analyse erkannt werden.
.NET Framework 4.6 verwendet bei seiner Registrierung in der Registrierungsdatenbank keine 4.5.x.x-Version.
Einzelheiten
Wie erwartet, beginnt der in der Registrierung (at HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\NET Framework Setup\NDP\v4\Full
) für .NET Framework 4.6 festgelegte Versionsschlüssel mit '4.6', nicht mit '4.5'. Apps, die von diesen Registrierungsschlüsseln abhängen, um zu wissen, welche .NET Framework-Versionen auf einem Computer installiert sind, sollten aktualisiert werden, um zu verstehen, dass 4.6 eine neue mögliche Version ist und eine, die mit früheren 4.5.x-Versionen kompatibel ist.
Vorschlag
Aktualisieren Sie Apps für eine .NET Framework 4.5-Installation, indem Sie nach 4.5-Registrierungsschlüsseln suchen, um auch 4.6 zu akzeptieren.
Name | Wert |
---|---|
Umfang | Rand |
Version | 4.6 |
Typ | Laufzeit |
Betroffene APIs
Kann nicht über API-Analyse erkannt werden.
Windows Communication Foundation (WCF)
WCF-Dienste, die NETTCP mit SSL-Sicherheit und MD5-Zertifikatauthentifizierung verwenden
Einzelheiten
.NET Framework 4.6 fügt TLS 1.1 und TLS 1.2 zur WCF SSL-Standardprotokollliste hinzu. Wenn sowohl Client- als auch Servercomputer .NET Framework 4.6 oder höher installiert haben, wird TLS 1.2 für die Aushandlung verwendet. TLS 1.2 unterstützt keine MD5-Zertifikatauthentifizierung. Wenn ein Kunde ein MD5-Zertifikat verwendet, kann der WCF-Client daher keine Verbindung mit dem WCF-Dienst herstellen.
Vorschlag
Sie können dieses Problem umgehen, damit ein WCF-Client eine Verbindung mit einem WCF-Server herstellen kann, indem Sie eine der folgenden Aktionen ausführen:
- Aktualisieren Sie das Zertifikat so, dass der MD5-Algorithmus nicht verwendet wird. Dies ist die empfohlene Lösung.
- Wenn die Bindung nicht dynamisch im Quellcode konfiguriert ist, aktualisieren Sie die Konfigurationsdatei der Anwendung so, dass TLS 1.1 oder eine frühere Version des Protokolls verwendet wird. Auf diese Weise können Sie weiterhin ein Zertifikat mit dem MD5-Hashalgorithmus verwenden.
Warnung
Diese Problemumgehung wird nicht empfohlen, da ein Zertifikat mit dem MD5-Hashalgorithmus als unsicher betrachtet wird.
Die folgende Konfigurationsdatei führt dies aus:
<configuration>
<system.serviceModel>
<bindings>
<netTcpBinding>
<binding>
<security mode= "None/Transport/Message/TransportWithMessageCredential" >
<transport clientCredentialType="None/Windows/Certificate"
protectionLevel="None/Sign/EncryptAndSign"
sslProtocols="Ssl3/Tls1/Tls11">
</transport>
</security>
</binding>
</netTcpBinding>
</bindings>
</system.ServiceModel>
</configuration>
- Wenn die Bindung dynamisch im Quellcode konfiguriert ist, aktualisieren Sie die TcpTransportSecurity.SslProtocols Eigenschaft so, dass TLS 1.1 (SslProtocols.Tls11 oder eine frühere Version des Protokolls im Quellcode verwendet wird).
Warnung
Diese Problemumgehung wird nicht empfohlen, da ein Zertifikat mit dem MD5-Hashalgorithmus als unsicher betrachtet wird.
Name | Wert |
---|---|
Umfang | Geringfügig |
Version | 4.6 |
Typ | Laufzeit |
Betroffene APIs
Kann nicht über API-Analyse erkannt werden.
Windows Presentation Foundation (WPF)
Der Zugriff auf die ausgewählten Elemente eines WPF-DataGrid-Steuerelements über einen Handler des UnloadingRow-Ereignisses kann eine NullReferenceException auslösen
Einzelheiten
Aufgrund eines Fehlers in .NET Framework 4.5 können Ereignishandler für DataGrid-Ereignisse, die das Entfernen einer Zeile umfassen, eine System.NullReferenceException auslösen, die ausgelöst werden soll, wenn auf die DataGrid- oder System.Windows.Controls.Primitives.Selector.SelectedItem-Eigenschaft von System.Windows.Controls.Primitives.MultiSelector.SelectedItems zugegriffen wird.
Vorschlag
Dieses Problem wurde in .NET Framework 4.6 behoben und kann durch ein Upgrade auf diese Version von .NET Framework behoben werden.
Name | Wert |
---|---|
Umfang | Geringfügig |
Version | 4.5 |
Typ | Laufzeit |
Betroffene APIs
Das Aufrufen von Items.Refresh für ein WPF ListBox-, ListView- oder DataGrid-Element mit ausgewählten Elementen kann dazu führen, dass doppelte Elemente im Element angezeigt werden.
Einzelheiten
Im .NET Framework 4.5 kann das Aufrufen von ListBox.Items.Refresh aus Code, während Elemente in einem System.Windows.Controls.ListBox Element ausgewählt sind, dazu führen, dass die ausgewählten Elemente in der Liste dupliziert werden. Bei System.Windows.Controls.ListView und System.Windows.Controls.DataGrid tritt ein ähnliches Problem auf. Dies wurde in .NET Framework 4.6 behoben.
Vorschlag
Dieses Problem kann behoben werden, indem die Auswahl von Elementen vor dem System.Windows.Data.CollectionView.Refresh() Aufruf programmgesteuert deaktiviert und nach Abschluss des Anrufs erneut ausgewählt wird. Alternativ wurde dieses Problem in .NET Framework 4.6 behoben und kann durch ein Upgrade auf diese Version von .NET Framework behoben werden.
Wert | |
---|---|
Bereich | Geringfügig |
Version | 4.5 |
Typ | Laufzeit |
Betroffene APIs
KoerceIsSelectionBoxHighlighted
Einzelheiten
Bestimmte Abläufe von Aktionen, die eine System.Windows.Controls.ComboBox und ihre Datenquelle involvieren, können zu einer System.NullReferenceException führen.
Vorschlag
Aktualisieren Sie nach Möglichkeit auf .NET Framework 4.6.2.
Name | Wert |
---|---|
Umfang | Geringfügig |
Version | 4.6 |
Typ | Laufzeit |
Betroffene APIs
IsSelected-Bindungsfehler für ListBoxItem mit ObservableCollection<T>.Move
Einzelheiten
Das Aufrufen von Move(Int32, Int32) oder MoveItem(Int32, Int32) bei einer Sammlung, die an eine System.Windows.Controls.ListBox mit ausgewählten Elementen gebunden ist, kann zu einem fehlerhaften Verhalten bei zukünftiger Auswahl oder dem Aufheben der Auswahl von System.Windows.Controls.ListBox-Elementen führen.
Vorschlag
Der Aufruf von System.Collections.ObjectModel.Collection<T>.Remove(T) und System.Collections.ObjectModel.Collection<T>.Insert(Int32, T) anstelle von Move(Int32, Int32) wird dieses Problem umgehen. Alternativ wurde dieses Problem in .NET Framework 4.6 behoben und kann durch ein Upgrade auf diese Version von .NET Framework behoben werden.
Name | Wert |
---|---|
Umfang | Geringfügig |
Version | 4.5 |
Typ | Laufzeit |
Betroffene APIs
Wenn Sie mit der rechten Maustaste auf eine WPF DataGrid-Zeilenüberschrift klicken, wird die DataGrid-Auswahl geändert.
Einzelheiten
Wenn Sie mit der rechten Maustaste auf eine markierte System.Windows.Controls.DataGrid Zeilenüberschrift klicken, während mehrere Zeilen markiert sind, ändert sich die System.Windows.Controls.DataGrid-Auswahl nur auf diese Zeile.
Vorschlag
Dieses Problem wurde in .NET Framework 4.6 behoben und kann durch ein Upgrade auf diese Version von .NET Framework behoben werden.
Name | Wert |
---|---|
Umfang | Rand |
Version | 4.5 |
Typ | Laufzeit |
Betroffene APIs
WPF startet einen wisptis.exe-Prozess, der die Maus einfrieren kann.
Einzelheiten
Mit Version 4.5.2 wurde ein Problem eingeführt, durch das wisptis.exe
erzeugt wird. Hierdurch kann die Mauseingabe gesperrt werden.
Vorschlag
Ein Fix für dieses Problem ist in einer Wartungsversion von .NET Framework 4.5.2 (Hotfixrollup 3026376) oder durch Upgrade auf .NET Framework 4.6 verfügbar.
Name | Wert |
---|---|
Umfang | Haupt |
Version | 4.5.2 |
Typ | Laufzeit |
Betroffene APIs
Kann nicht über API-Analyse erkannt werden.
Die WPF-Rechtschreibprüfung in textfähigen Steuerelementen funktioniert in Windows 10 nicht für Sprachen, die nicht in der Eingabesprachenliste des Betriebssystems enthalten sind.
Einzelheiten
Wenn die Rechtschreibprüfung unter Windows 10 ausgeführt wird, funktioniert die Rechtschreibprüfung möglicherweise nicht für WPF-Text-fähige Steuerelemente, da plattformbasierte Rechtschreibprüfungsfunktionen nur für Sprachen verfügbar sind, die in der Liste der Eingabesprachen vorhanden sind. Wenn in Windows 10 eine Sprache zur Liste der verfügbaren Tastaturen hinzugefügt wird, lädt Windows automatisch ein entsprechendes Feature on Demand (FOD)-Paket herunter und installiert es, das Die Rechtschreibprüfungsfunktionen bereitstellt. Durch Hinzufügen der Sprache zur Liste der Eingabesprachen wird die Rechtschreibprüfung unterstützt.
Vorschlag
Beachten Sie, dass die zu überprüfende Sprache oder der Text als Eingabesprache für die Rechtschreibprüfung in Windows 10 hinzugefügt werden muss.
Name | Wert |
---|---|
Umfang | Rand |
Version | 4.6 |
Typ | Laufzeit |
Betroffene APIs
Kann nicht über API-Analyse erkannt werden.
WPF-Fenster werden ohne Clipping gerendert, wenn diese die Größe eines einzelnen Monitors überschreiten
Einzelheiten
In .NET Framework 4.6, das unter Windows 8 und höher ausgeführt wird, wird das gesamte Fenster ohne Beschnitt gerendert, wenn es außerhalb der einzelnen Anzeige in einem Szenario mit mehreren Monitoren erweitert wird. Dies unterscheidet sich von früheren Versionen von .NET Framework, bei denen WPF-Fenster beschnitten werden, die eine einzelne Anzeige überschreiten.
Vorschlag
Dieses Verhalten (ob ausgeschnitten wird oder nicht) kann durch das <EnableMultiMonitorDisplayClipping>
-Element in der <appSettings>
-Konfigurationsdatei einer Anwendung oder durch Einstellen der EnableMultiMonitorDisplayClipping
-Eigenschaft beim Start der App explizit festgelegt werden.
Name | Wert |
---|---|
Umfang | Geringfügig |
Version | 4.6 |
Typ | Laufzeit |
Betroffene APIs
Kann nicht über API-Analyse erkannt werden.
.NET Framework 4.6.1
Werkzeuge
Contract.Invariant oder Contract.Requires<TException> erkennt „String.IsNullOrEmpty“ nicht als reinen Wert an.
Einzelheiten
Für Apps, die auf das .NET Framework 4.6.1 abzielen, gibt der Rewriter die Compilerwarnung CC1036 aus, wenn entweder der invariante Vertrag für Contract.Invariant oder der Vorbedingungsvertrag für Requires die Methode String.IsNullOrEmpty aufruft. Dabei wird „System.String.IsNullOrWhiteSpace(System.String)“ ohne [Pure] in der Methode aufgerufen. Dies ist eine Compilerwarnung und kein Compilerfehler.
Vorschlag
Dieses Verhalten wurde in GitHub Issue #339 behoben. Um diese Warnung zu beseitigen, können Sie eine aktualisierte Version des Quellcodes für das Codeverträge-Tool von GitHub herunterladen und kompilieren. Downloadinformationen finden Sie unten auf der Seite.
Name | Wert |
---|---|
Umfang | Geringfügig |
Version | 4.6.1 |
Typ | Laufzeit |
Betroffene APIs
Windows Presentation Foundation (WPF)
Elementscrolling durch eine flache Liste mit Elementen mit unterschiedlicher Pixelhöhe
Einzelheiten
Wenn ein System.Windows.Controls.ItemsControl-Element eine Sammlung mithilfe von Virtualisierung (IsVirtualizing=true
) und Elementscrolling (ScrollUnit=Item
) anzeigt, und wenn das Steuerelement gescrollt wird, um ein Element anzuzeigen, dessen Größe in Pixeln sich von dessen Nachbarn unterscheidet, durchläuft System.Windows.Controls.VirtualizingStackPanel alle Elemente in der Sammlung. Die Benutzeroberfläche reagiert während dieser Iteration nicht. Die Iteration erfolgt unter anderen Umständen auch in früheren .NET Framework-Versionen. Sie tritt z.B. beim Scrollen von Pixeln (ScrollUnit=Pixel
) auf, nachdem ein Element mit einer anderen Pixelhöhe erkannt wurde sowie beim Elementscrolling für hierarchische Daten (wie beim System.Windows.Controls.TreeView-Steuerelement oder einem System.Windows.Controls.ItemsControl-Element mit aktivierter Gruppierung), nachdem bei einem Element eine andere Anzahl von Nachfolgerelementen als bei seinen Nachbarn erkannt wurde. Im Fall des Elementscrollings bei unterschiedlicher Pixelhöhe wurde die Iteration in .NET Framework 4.6.1 eingeführt, um Fehler im Layout der hierarchischen Daten zu beheben. Es ist nicht erforderlich, wenn die Daten flach (keine Hierarchie) sind, und .NET Framework 4.6.2 tut dies in diesem Fall nicht.
Vorschlag
Wenn die Iteration in .NET Framework 4.6.1, aber nicht in früheren Releases auftritt, also wenn System.Windows.Controls.ItemsControl das Elementscrolling in einer flachen Liste von Elementen mit unterschiedlicher Pixelhöhe durchführt, gibt es zwei Lösungen:
- Installieren Sie .NET Framework 4.6.2.
- Installieren Sie Hotfix HR 1605 für .NET Framework 4.6.1.
Name | Wert |
---|---|
Umfang | Geringfügig |
Version | 4.6.1 |
Typ | Laufzeit |
Betroffene APIs
ObjectDisposedException wird von WPF-Rechtschreibprüfung ausgelöst
Einzelheiten
WPF-Anwendungen stürzen gelegentlich während des Herunterfahrens der Anwendung ab, wobei System.ObjectDisposedException die Rechtschreibprüfung ausgelöst wird. Dies wurde in .NET Framework 4.7 WPF behoben, indem die Ausnahme ordnungsgemäß behandelt wird und somit sichergestellt wird, dass Anwendungen nicht mehr negativ betroffen sind. Es sollte beachtet werden, dass First-Chance-Ausnahmen gelegentlich weiterhin in Anwendungen festgestellt werden, die unter einem Debugger ausgeführt werden.
Vorschlag
Upgrade auf .NET Framework 4.7
Name | Wert |
---|---|
Umfang | Rand |
Version | 4.6.1 |
Typ | Laufzeit |
Betroffene APIs
Kann nicht über API-Analyse erkannt werden.
Die Fehler bei der WPF-Rechtschreibprüfung treten auf unerwartete Art und Weise auf.
Einzelheiten
Dies umfasst eine Reihe von WPF-Rechtschreibprüfungsproblemen:
- Die WPF-Rechtschreibprüfungs-API löst manchmal System.Runtime.InteropServices.COMException aus
- Die WPF-Rechtschreibprüfung schlägt mit UnauthorizedAccessException fehl, wenn Anwendungen mithilfe von "Als anderer Benutzer ausführen" gestartet werden.
- Die WPF-Rechtschreibprüfung identifiziert Rechtschreibfehler falsch in zusammengesetzten Wörtern wie "Hausnummer" in Deutsch.
Vorschlag
Problem Nr. 1 – Dies wurde in .NET Framework 4.6.2 Problem #2 behoben. Die WPF-Rechtschreibprüfung wird nicht mehr unterstützt, wenn Anwendungen mit "Als anderer Benutzer ausgeführt" gestartet werden. Ab .NET Framework 4.6.2 stürzt anwendungen, die auf diese Weise gestartet wurden, nicht mehr unerwartet ab. Stattdessen wird die Rechtschreibprüfung im Hintergrund deaktiviert. Problem #3 – Dies wurde in .NET Framework 4.6.2 behoben.
Name | Wert |
---|---|
Umfang | Rand |
Version | 4.6.1 |
Typ | Laufzeit |
Betroffene APIs
Kann nicht über API-Analyse erkannt werden.
.NET Framework 4.6.2
Daten
Beim Versuch, eine TCP/IP-Verbindung zu einer SQL Server-Datenbank herzustellen, die auf localhost
aufgelöst wird, schlägt dies fehl.
Einzelheiten
Versuchen Sie in .NET Framework 4.6 und 4.6.1, eine TCP/IP-Verbindung mit einer SQL Server-Datenbank herzustellen, die zu localhost
aufgelöst wird. Dies schlägt mit dem Fehler "Beim Herstellen einer Verbindung mit SQL Server ist ein netzwerkbezogener oder instanzspezifischer Fehler aufgetreten." fehl. Der Server wurde nicht gefunden oder war nicht zugänglich. Vergewissern Sie sich, dass der Instanzname korrekt ist und SQL Server so konfiguriert ist, dass Remoteverbindungen zulässig sind. (Anbieter: SQL-Netzwerkschnittstellen, Fehler: 26 – Fehler beim Auffinden des angegebenen Servers/der angegebenen Instanz)")
Vorschlag
Dieses Problem wurde behoben und das vorherige Verhalten in .NET Framework 4.6.2 wiederhergestellt. Zum Herstellen einer Verbindung zu einer SQL Server-Datenbank, die auf localhost
verweist, aktualisieren Sie auf das .NET Framework 4.6.2.
Name | Wert |
---|---|
Umfang | Geringfügig |
Version | 4.6 |
Typ | Laufzeit |
Betroffene APIs
Kann nicht über API-Analyse erkannt werden.
Blockierungszeitraum für Verbindungspools für Azure SQL-Datenbanken wird entfernt
Einzelheiten
Ab .NET Framework 4.6.2 wird für Verbindungsöffnungsanforderungen an bekannte Azure SQL-Datenbanken (*.database.windows.net, *.database.chinacloudapi.cn, *.database.usgovcloudapi.net, *.database.cloudapi.de) der Sperrzeitraum für Verbindungspools entfernt, und Verbindungsöffnungsfehler werden nicht zwischengespeichert. Versuche, geöffnete Verbindungsanforderungen erneut zu versuchen, treten fast unmittelbar nach vorübergehenden Verbindungsfehlern auf. Diese Änderung ermöglicht die sofortige Wiederholung eines Versuchs zum Öffnen einer Verbindung mit Azure SQL-Datenbanken. Dadurch wird die Leistung von cloudfähigen Apps verbessert. Für alle anderen Verbindungsversuche wird die Sperrfrist für den Verbindungspool weiterhin erzwungen.
In .NET Framework 4.6.1 und früheren Versionen, wenn eine App auf einen vorübergehenden Verbindungsfehler beim Herstellen einer Verbindung zu einer Datenbank stößt, kann der Verbindungsversuch nicht schnell wiederholt werden, da der Verbindungspool den Fehler zwischenspeichert und ihn für 5 Sekunden bis 1 Minute erneut auslöst. Weitere Informationen finden Sie unter SQL Server-Verbindungspooling (ADO.NET). Dieses Verhalten ist für Verbindungen mit Azure SQL-Datenbanken problematisch, die häufig aufgrund vorübergehender Fehler fehlschlagen, die in der Regel innerhalb weniger Sekunden behoben sind. Das Feature zum Blockieren des Verbindungspools bedeutet, dass die App für einen längeren Zeitraum keine Verbindung mit der Datenbank herstellen kann, obwohl die Datenbank verfügbar ist und die App innerhalb weniger Sekunden gerendert werden muss.
Vorschlag
Wenn dieses Verhalten nicht erwünscht ist, können Sie den Blockierungszeitraum für den Verbindungspool konfigurieren, indem Sie die System.Data.SqlClient.SqlConnectionStringBuilder.PoolBlockingPeriod in .NET Framework 4.6.2 eingeführte Eigenschaft festlegen. Der Wert der Eigenschaft ist ein Element der System.Data.SqlClient.PoolBlockingPeriod Aufzählung, die einen von drei Werten annehmen kann:
Sie können das vorherige Verhalten wiederherstellen, indem Sie die System.Data.SqlClient.SqlConnectionStringBuilder.PoolBlockingPeriod-Eigenschaft auf AlwaysBlock setzen.
Name | Wert |
---|---|
Umfang | Geringfügig |
Version | 4.6.2 |
Typ | Laufzeit |
Betroffene APIs
Globalisierung
Unicode-Standardversion 8.0-Kategorien werden jetzt unterstützt
Einzelheiten
In .NET Framework 4.6.2 wurden Unicode-Daten von Unicode Standard Version 6.3 auf Version 8.0 aktualisiert. Beim Anfordern von Unicode-Zeichenkategorien in .NET Framework 4.6.2 stimmen einige Ergebnisse möglicherweise nicht mit den Ergebnissen in früheren .NET Framework-Versionen überein. Diese Änderung betrifft hauptsächlich Cherokee-Silben und Neu-Tai-Lue-Vokalzeichen sowie Tonmarkierungen.
Vorschlag
Überprüfen Sie Code, und entfernen/ändern Sie logik, die von hartcodierten Unicode-Zeichenkategorien abhängt.
Name | Wert |
---|---|
Umfang | Geringfügig |
Version | 4.6.2 |
Typ | Laufzeit |
Betroffene APIs
- Char.GetUnicodeCategory(Char)
- CharUnicodeInfo.GetUnicodeCategory(Char)
- CharUnicodeInfo.GetUnicodeCategory(String, Int32)
Sicherheit
RSACng und DSACng können in Szenarien mit teilweiser Vertrauensstellung wieder verwendet werden
Einzelheiten
CngLightup (verwendet in mehreren Krypto-APIs auf höherer Ebene, z. B. System.Security.Cryptography.Xml.EncryptedXml) und System.Security.Cryptography.RSACng sind in einigen Fällen auf vollständiges Vertrauen angewiesen. Dazu gehören P/Invokes ohne die Berechtigungen zu beanspruchenSecurityPermissionFlag.UnmanagedCode und Codepfade, für dieSystem.Security.Cryptography.CngKey Berechtigungsanforderungen geltenSecurityPermissionFlag.UnmanagedCode. Ab .NET Framework 4.6.2 wurde CngLightup verwendet, um nach Möglichkeit zu System.Security.Cryptography.RSACng wechseln. Daher begannen Apps mit teilweisem Vertrauen, bei denen System.Security.Cryptography.Xml.EncryptedXml erfolgreich verwendet wurde, zu fehlschlagen und SecurityException-Ausnahmen auszulösen. Diese Änderung fügt die erforderlichen Assertions hinzu, sodass alle Funktionen, die CngLightup verwenden, über die erforderlichen Berechtigungen verfügen.
Vorschlag
Wenn sich diese Änderung in .NET Framework 4.6.2 negativ auf Ihre teilweise vertrauenswürdigen Apps auswirkt, führen Sie ein Upgrade auf .NET Framework 4.7.1 durch.
Name | Wert |
---|---|
Umfang | Rand |
Version | 4.6.2 |
Typ | Laufzeit |
Betroffene APIs
- DSACng(CngKey)
- DSACng.Key
- DSACng.LegalKeySizes
- DSACng.CreateSignature(Byte[])
- DSACng.VerifySignature(Byte[], Byte[])
- RSACng(CngKey)
- RSACng.Key
- RSACng.Decrypt(Byte[], RSAEncryptionPadding)
- RSACng.SignHash(Byte[], HashAlgorithmName, RSASignaturePadding)
RSACng.VerifyHash gibt jetzt False für alle Überprüfungsfehler zurück.
Einzelheiten
Ab .NET Framework 4.6.2 gibt diese Methode False zurück, wenn die Signatur selbst schlecht formatiert ist. Sie gibt nun für jeden Überprüfungsfehler FALSE zurück. In .NET Framework 4.6 und 4.6.1 löst diese Methode die Ausnahme System.Security.Cryptography.CryptographicException aus, wenn die Signatur selbst falsch formatiert ist.
Vorschlag
Jeder Code, dessen Ausführung von der System.Security.Cryptography.CryptographicException Behandlung abhängt, sollte stattdessen ausgeführt werden, wenn die Überprüfung fehlschlägt und die Methode False zurückgibt.
Name | Wert |
---|---|
Umfang | Geringfügig |
Version | 4.6.2 |
Typ | Laufzeit |
Betroffene APIs
Breaking Changes bei SignedXml und EncryptedXml
Einzelheiten
In .NET Framework 4.6.2 führen Sicherheitsfixes in System.Security.Cryptography.Xml.SignedXml und System.Security.Cryptography.Xml.EncryptedXml zu unterschiedlichen Laufzeitverhalten. Beispiel:
- Wenn ein Dokument mehrere Elemente mit demselben
id
Attribut aufweist und eine Signatur auf eines dieser Elemente als Stamm der Signatur abzielt, wird das Dokument jetzt als ungültig betrachtet. - Dokumente, die nicht kanonische XPath-Transformationsalgorithmen in Verweisen verwenden, gelten jetzt als ungültig.
- Dokumente, die nicht kanonische XSLT-Transformationsalgorithmen in Verweisen verwenden, werden jetzt als ungültig betrachtet.
- Alle Programme, die externe ressourcentrennte Signaturen verwenden, können dies nicht tun.
Vorschlag
Entwickler möchten möglicherweise die Verwendung von XmlDsigXsltTransform und XmlDsigXsltTransformsowie Typen überprüfen, die von denen Transform abgeleitet werden, da ein Dokumentempfänger sie möglicherweise nicht verarbeiten kann.
Name | Wert |
---|---|
Umfang | Geringfügig |
Version | 4.6.2 |
Typ | Laufzeit |
Betroffene APIs
- System.Security.Cryptography.Xml.Transform
- System.Security.Cryptography.Xml.XmlDsigXPathTransform
- System.Security.Cryptography.Xml.XmlDsigXsltTransform
Windows Communication Foundation (WCF)
Entfernen von Ssl3 aus den WCF-TransportDefaults
Einzelheiten
Bei Verwendung von NetTcp mit Transportsicherheit und einem Zertifikattyp für Anmeldeinformationen ist das SSL 3-Protokoll kein Standardprotokoll mehr, das für die Aushandlung einer sicheren Verbindung verwendet wird. In den meisten Fällen sollte es keine Auswirkungen auf vorhandene Apps geben, da TLS 1.0 immer in die Protokollliste für NetTcp aufgenommen wurde. Alle vorhandenen Clients sollten in der Lage sein, eine Verbindung mit mindestens TLS1.0 auszuhandeln.
Vorschlag
Wenn Ssl3 erforderlich ist, verwenden Sie einen der folgenden Konfigurationsmechanismen, um der Liste der ausgehandelten Protokolle Ssl3 hinzuzufügen.
Name | Wert |
---|---|
Umfang | Rand |
Version | 4.6.2 |
Typ | Laufzeit |
Betroffene APIs
Windows Presentation Foundation (WPF)
Das Ändern der IsEnabled-Eigenschaft des übergeordneten Elements eines TextBlock-Steuerelements wirkt sich auf alle untergeordneten Steuerelemente aus
Einzelheiten
Ab .NET Framework 4.6.2 beeinflusst das Ändern der System.Windows.UIElement.IsEnabled-Eigenschaft des übergeordneten System.Windows.Controls.TextBlock-Steuerelements auch alle untergeordneten Steuerelemente (wie Hyperlinks und Schaltflächen) des System.Windows.Controls.TextBlock-Steuerelements. In .NET Framework 4.6.1 und früheren Versionen spiegelten Steuerelemente innerhalb eines System.Windows.Controls.TextBlock-Elements nicht immer den Zustand der System.Windows.UIElement.IsEnabled-Eigenschaft des System.Windows.Controls.TextBlock-übergeordneten Elements wider.
Vorschlag
Keiner. Diese Änderung entspricht dem erwarteten Verhalten für Steuerelemente innerhalb eines System.Windows.Controls.TextBlock Steuerelements.
Name | Wert |
---|---|
Umfang | Geringfügig |
Version | 4.6.2 |
Typ | Laufzeit |
Betroffene APIs
KoerceIsSelectionBoxHighlighted
Einzelheiten
Bestimmte Abläufe von Aktionen, die eine System.Windows.Controls.ComboBox und ihre Datenquelle involvieren, können zu einer System.NullReferenceException führen.
Vorschlag
Aktualisieren Sie nach Möglichkeit auf .NET Framework 4.6.2.
Name | Wert |
---|---|
Umfang | Geringfügig |
Version | 4.6 |
Typ | Laufzeit |
Betroffene APIs
DataGridCellsPanel.BringIndexIntoView löst ArgumentOutOfRangeException aus.
Einzelheiten
ScrollIntoView(Object) funktioniert asynchron, wenn die Spaltenvirtualisierung aktiviert ist, aber die Spaltenbreiten wurden noch nicht bestimmt. Wenn Spalten entfernt werden, bevor die asynchrone Arbeit erfolgt, kann ein System.ArgumentOutOfRangeException Fehler auftreten.
Vorschlag
Eine der folgenden Optionen:
- Upgrade auf .NET Framework 4.7.
- Installieren Sie den neuesten Wartungspatch für .NET Framework 4.6.2.
- Vermeiden Sie das Entfernen von Spalten, bis die asynchrone Antwort auf ScrollIntoView(Object) abgeschlossen ist.
Name | Wert |
---|---|
Umfang | Rand |
Version | 4.6.2 |
Typ | Laufzeit |
Betroffene APIs
Horizontales Scrollen und Virtualisierung
Einzelheiten
Diese Änderung betrifft System.Windows.Controls.ItemsControl-Objekte mit eigener Virtualisierung in der senkrecht zur Hauptscrollrichtung stehenden Richtung (z. B. System.Windows.Controls.DataGrid mit EnableColumnVirtualization="True"). Das Ergebnis bestimmter horizontaler Bildlaufvorgänge wurde geändert, um Ergebnisse zu erzielen, die naheliegender und den Ergebnissen vergleichbarer vertikaler Vorgänge ähnlicher sind.
Zu den Vorgängen gehören „Bildlauf hierhin durchführen“ und „Rechter Rand“, um die Namen aus dem Menü zu verwenden, das durch Klicken mit der rechten Maustaste auf eine horizontale Scrollleiste angezeigt wird. Beide berechnen einen Kandidatenoffset und rufen SetHorizontalOffset(Double) auf.
Nach dem Scrollen zum neuen Offset hat sich die Definition von „Hier“ oder „Rechter Rand“ möglicherweise geändert, da die neuen entvirtualisierten Inhalte den Wert von System.Windows.Controls.Primitives.IScrollInfo.ExtentWidth geändert haben.
Vor .NET Framework 4.6.2 verwendet der Scrollvorgang einfach den Kandidatenoffset, obwohl er möglicherweise nicht mehr „Hier“ oder „Rechter Rand“ entspricht. Dies führt zu Effekten wie einem „Springen“ des Leistenziehpunkts, die sich am besten durch ein Beispiel veranschaulichen lassen. Angenommen, ein System.Windows.Controls.DataGrid hat ExtentWidth=1000 und Width=200. Ein Scrollen zu „Rechter Rand“ verwendet den Kandidatenoffset 1000 - 200 = 800. Beim Scrollen zu diesem Offset werden neue Spalten entvirtualisiert. Nehmen Sie an, dass diese sehr breit sind, sodass sich System.Windows.Controls.Primitives.IScrollInfo.ExtentWidth in 2000 ändert. Das Scrollen endet bei HorizontalOffset=800, und der Ziehpunkt „springt“ annähernd zur Mitte der Bildlaufleiste zurück – genau bei 800:2000 = 40 %.
Die Änderung besteht darin, einen neuen Kandidatenoffset neu zu berechnen, wenn diese Situation auftritt, und es erneut zu versuchen. So funktioniert das vertikale Scrollen bereits.
Die Änderung ergibt ein besser vorhersehbares und intuitiveres Verhalten für den Endbenutzer, sie kann sich aber auf jede App auswirken, die auf den genauen Wert von System.Windows.Controls.Primitives.IScrollInfo.HorizontalOffset nach einem horizontalen Scrollvorgang angewiesen ist, ob vom Endbenutzer oder durch einen expliziten Aufruf von SetHorizontalOffset(Double) aufgerufen.
Vorschlag
Eine App, die einen vorhergesagten Wert für System.Windows.Controls.Primitives.IScrollInfo.HorizontalOffset verwendet, sollte so geändert werden, dass sie nach jedem horizontalen Scrollen, durch das System.Windows.Controls.Primitives.IScrollInfo.ExtentWidth aufgrund der Entvirtualisierung geändert werden könnte, den tatsächlichen Wert (und den Wert von System.Windows.Controls.Primitives.IScrollInfo.ExtentWidth) abruft.
Name | Wert |
---|---|
Umfang | Geringfügig |
Version | 4.6.2 |
Typ | Laufzeit |
Betroffene APIs
Items.Clear entfernt keine Duplikate aus SelectedItems
Einzelheiten
Angenommen, ein Selektor (mit aktivierter Mehrfachauswahl) hat Duplikate in seiner System.Windows.Controls.Primitives.MultiSelector.SelectedItems Sammlung – dasselbe Element wird mehrmals angezeigt. Durch das Entfernen dieser Elemente aus der Datenquelle (z. B. indem Items.Clear aufgerufen wird) gelingt es nicht, sie aus System.Windows.Controls.Primitives.MultiSelector.SelectedItems zu entfernen; nur die erste Instanz wird entfernt. Darüber hinaus kann die nachfolgende Verwendung von System.Windows.Controls.Primitives.MultiSelector.SelectedItems (z. B. SelectedItems.Clear()) auf Probleme wie System.ArgumentException stoßen, da System.Windows.Controls.Primitives.MultiSelector.SelectedItems Elemente enthält, die nicht mehr in der Datenquelle vorhanden sind.
Vorschlag
Aktualisieren Sie nach Möglichkeit auf .NET Framework 4.6.2.
Name | Wert |
---|---|
Umfang | Geringfügig |
Version | 4.5 |
Typ | Laufzeit |
Betroffene APIs
Elementscrolling durch eine flache Liste mit Elementen mit unterschiedlicher Pixelhöhe
Einzelheiten
Wenn ein System.Windows.Controls.ItemsControl-Element eine Sammlung mithilfe von Virtualisierung (IsVirtualizing=true
) und Elementscrolling (ScrollUnit=Item
) anzeigt, und wenn das Steuerelement gescrollt wird, um ein Element anzuzeigen, dessen Größe in Pixeln sich von dessen Nachbarn unterscheidet, durchläuft System.Windows.Controls.VirtualizingStackPanel alle Elemente in der Sammlung. Die Benutzeroberfläche reagiert während dieser Iteration nicht. Die Iteration erfolgt unter anderen Umständen auch in früheren .NET Framework-Versionen. Sie tritt z.B. beim Scrollen von Pixeln (ScrollUnit=Pixel
) auf, nachdem ein Element mit einer anderen Pixelhöhe erkannt wurde sowie beim Elementscrolling für hierarchische Daten (wie beim System.Windows.Controls.TreeView-Steuerelement oder einem System.Windows.Controls.ItemsControl-Element mit aktivierter Gruppierung), nachdem bei einem Element eine andere Anzahl von Nachfolgerelementen als bei seinen Nachbarn erkannt wurde. Im Fall des Elementscrollings bei unterschiedlicher Pixelhöhe wurde die Iteration in .NET Framework 4.6.1 eingeführt, um Fehler im Layout der hierarchischen Daten zu beheben. Es ist nicht erforderlich, wenn die Daten flach (keine Hierarchie) sind, und .NET Framework 4.6.2 tut dies in diesem Fall nicht.
Vorschlag
Wenn die Iteration in .NET Framework 4.6.1, aber nicht in früheren Releases auftritt, also wenn System.Windows.Controls.ItemsControl das Elementscrolling in einer flachen Liste von Elementen mit unterschiedlicher Pixelhöhe durchführt, gibt es zwei Lösungen:
- Installieren Sie .NET Framework 4.6.2.
- Installieren Sie Hotfix HR 1605 für .NET Framework 4.6.1.
Name | Wert |
---|---|
Umfang | Geringfügig |
Version | 4.6.1 |
Typ | Laufzeit |
Betroffene APIs
Der Hintergrund der RibbonGroup ist in lokalisierten Builds auf transparent festgelegt.
Einzelheiten
System.Windows.Controls.Ribbon.RibbonGroup Hintergrund auf lokalisierten Builds wurde immer mit transparentem Pinsel gezeichnet, was zu einer schlechten Ui-Erfahrung führt. Dies wurde im .NET Framework 4.7 WPF-Fix behoben, indem die lokalisierten Ressourcen für System.Windows.Controls.Ribbon.RibbonGroup aktualisiert werden, was wiederum sicherstellt, dass der richtige Pinsel ausgewählt wird.
Vorschlag
Upgrade auf .NET Framework 4.7
Name | Wert |
---|---|
Umfang | Rand |
Version | 4.6.2 |
Typ | Laufzeit |
Betroffene APIs
Kann nicht über API-Analyse erkannt werden.
Die Fehler bei der WPF-Rechtschreibprüfung treten auf unerwartete Art und Weise auf.
Einzelheiten
Dies umfasst eine Reihe von WPF-Rechtschreibprüfungsproblemen:
- Die WPF-Rechtschreibprüfungs-API löst manchmal System.Runtime.InteropServices.COMException aus
- Die WPF-Rechtschreibprüfung schlägt mit UnauthorizedAccessException fehl, wenn Anwendungen mithilfe von "Als anderer Benutzer ausführen" gestartet werden.
- Die WPF-Rechtschreibprüfung identifiziert Rechtschreibfehler falsch in zusammengesetzten Wörtern wie "Hausnummer" in Deutsch.
Vorschlag
Problem Nr. 1 – Dies wurde in .NET Framework 4.6.2 Problem #2 behoben. Die WPF-Rechtschreibprüfung wird nicht mehr unterstützt, wenn Anwendungen mit "Als anderer Benutzer ausgeführt" gestartet werden. Ab .NET Framework 4.6.2 stürzt anwendungen, die auf diese Weise gestartet wurden, nicht mehr unerwartet ab. Stattdessen wird die Rechtschreibprüfung im Hintergrund deaktiviert. Problem #3 – Dies wurde in .NET Framework 4.6.2 behoben.
Name | Wert |
---|---|
Umfang | Rand |
Version | 4.6.1 |
Typ | Laufzeit |
Betroffene APIs
Kann nicht über API-Analyse erkannt werden.