Anwendungskompatibilität in .NET Framework 4.5

.NET Framework 4.5

In diesem Thema werden Anwendungskompatibilitätsprobleme zwischen .NET Framework 4 und 4.5 beschrieben, einschließlich der Fixes und Änderungen auf Grundlage von Kundenfeedback. Für die meisten dieser Änderungen sind keine Programmieränderungen in den Anwendungen erforderlich. In den Fällen, in denen Änderungen erforderlich sind, finden Sie Informationen in der Spalte "Auswirkungen" der Tabellen.

Wichtiger Hinweis Wichtig

Beachten Sie, dass .NET Framework 4.5 von Windows XP nicht unterstützt wird.

Weitere Informationen zu Kompatibilitätsproblemen zwischen .NET Framework 4.5 und 4.5.1 finden Sie unter Anwendungskompatibilität in .NET Framework 4.5.1.

In diesem Thema werden wichtige Änderungen in den folgenden Bereichen beschrieben:

Dieses Thema umfasst keine Typen und Member, die in .NET Framework 4.5 als veraltet deklariert wurden. Eine Liste dieser veralteten Typen und Member finden Sie unter Veraltete Elemente in der .NET Framework-Klassenbibliothek. Informationen über neue Funktionen finden Sie unter Neues in .NET Framework 4.5.

Funktion

Änderung

Auswirkungen

Die Methoden BlockingCollection<T>.TryTakeFromAny(BlockingCollection<T>[], T) und BlockingCollection<T>.TakeFromAny

Die BlockingCollection<T>.TryTakeFromAny(BlockingCollection<T>[], T)-Methode gibt nicht mehr – 1 zurück oder löst keine Ausnahme mehr aus. Die BlockingCollection<T>.TakeFromAny-Methode löst keine Ausnahme mehr aus, wenn eine der Auflistungen als abgeschlossen gekennzeichnet ist.

Diese Änderung ermöglicht das Verwenden von Auflistungen, wenn eine der Auflistungen entweder leer oder abgeschlossen ist, die andere Auflistung aber weiterhin abrufbare Elemente enthält.

Serialisierung und Deserialisierung mit der System.Runtime.Serialization.Formatters.Soap.SoapFormatter-Klasse

Hashtable und ähnliche Objekte der sortierten Auflistung, die unter .NET Framework 4.5 serialisiert werden, können unter .NET Framework 4 nicht deserialisiert werden.

Die SoapFormatter-Klasse verspricht keine versionsübergreifende Kompatibilität. Verwenden Sie stattdessen die Klassen System.Runtime.Serialization.Formatters.Binary.BinaryFormatter und System.Runtime.Serialization.NetDataContractSerializer.

System.Threading.Tasks.Task -Freigabe

Mit Ausnahme von Task.IAsyncResult.AsyncWaitHandle lösen System.Threading.Tasks.Task-Methoden keine ObjectDisposedException-Ausnahme mehr aus, nachdem das Objekt freigegeben wurde.

Diese Änderung unterstützt die Verwendung von zwischengespeicherten Aufgaben. Beispielsweise kann eine Methode eine zwischengespeicherte Aufgabe zurückgeben, um einen bereits abgeschlossenen Vorgang darzustellen, anstatt eine neue Aufgabe zuzuordnen. Dies war in früheren .NET Framework-Versionen nicht möglich, da jeder Consumer der Aufgabe diese freigeben konnte und somit unbrauchbar machte.

Nicht überwachte Ausnahmen in System.Threading.Tasks.Task-Vorgängen

Da die System.Threading.Tasks.Task-Klasse einen asynchronen Vorgang darstellt, fängt sie alle nicht schwerwiegenden Ausnahmen ab, die während einer asynchronen Verarbeitung auftreten. Wenn eine Ausnahme in .NET Framework 4.5 nicht überwacht wird und der Code nie auf die Aufgabe wartet, wird die Ausnahme nicht mehr im Finalizer-Thread weitergegeben und führt dazu, dass der Prozess während der Garbage Collection abstürzt.

Diese Änderung erhöht die Zuverlässigkeit von Anwendungen, die mithilfe der Task-Klasse nicht überwachte asynchrone Verarbeitungen ausführen. Das frühere Verhalten kann mit einem entsprechenden Handler für das TaskScheduler.UnobservedTaskException-Ereignis wiederhergestellt werden.

Task.WaitAll -Methoden mit Timeout-Argumenten

In .NET Framework 4 war das Verhalten dieser Methoden inkonsistent. Wenn vor dem abgelaufenen Timeoutintervall eine oder mehrere Aufgaben vor dem Methodenaufruf abgeschlossen oder abgebrochen wurden, löste die Methode eine AggregateException-Ausnahme aus. Wenn vor dem abgelaufenen Timeoutintervall keine Aufgaben vor dem Methodenaufruf abgeschlossen oder abgebrochen wurden, aber eine oder mehrere Aufgaben nach dem Methodenaufruf in diesen Zustand eingetreten waren, gab die Methode false zurück.

In .NET Framework 4.5 geben diese Methodenüberladungen jetzt false zurück, wenn nicht alle Aufgaben vor dem abgelaufenen Timeoutintervall abgeschlossen sind, und sie lösen nur dann eine AggregateException-Ausnahme aus, wenn alle Eingabeaufgaben abgeschlossen wurden.

Durch diese Änderung ist das Verhalten der Methode jetzt konsistent. Es ist jedoch möglich (wenn auch unwahrscheinlich), dass Anwendungscode davon abhängig ist, dass Task.WaitAll-Überladungen mit aktiviertem Timeout eine Ausnahme auslösen, wenn mindestens eine Aufgabe bereits vor Ablauf des Timeoutintervalls fehlerhaft war oder abgebrochen wurde.

Unterstützung für Typweiterleitung bei Festlegung von Zielversionen

Durch eine neue CodeDOM-Funktion kann ein Compiler anhand der Zielversion von mscorlib.dll anstelle der .NET Framework 4.5-Version von mscorlib.dll kompilieren.

Diese Änderung verhindert Compilerwarnungen (und Kompilierungsfehler, wenn Warnungen als Fehler behandelt werden), wenn CodeDOM zwei Definitionen für Typen findet, bei denen eine Typweiterleitung ausgeführt wurde. Diese Änderung hat möglicherweise nur dann unbeabsichtigte Nebeneffekte, wenn verschiedene Versionen von Verweisassemblys an einem einzigen Speicherort kombiniert werden.

List<T>.ForEach

Der Enumerator löst eine InvalidOperationException-Ausnahme aus, wenn ein Element in der Auflistung geändert wird.

Diese Änderung gilt nur für Anwendungen, die auf .NET Framework 4.5 ausgerichtet sind, und sollte keine negativen Auswirkungen haben. Sie gewährleistet die Datenintegrität und erhöht die Wahrscheinlichkeit, dass Racebedingungen identifiziert werden.

System.Uri

In Anwendungen, die auf .NET Framework 4.5 ausgerichtet sind, haben zwei Änderungen der IRI (International Resource Identifier)-Analysen eine Auswirkung auf URIs:

  • <iriParsing> ist standardmäßig aktiviert und kann nicht deaktiviert werden. Zuvor war es standardmäßig deaktiviert.

  • Unicode Normalization Form C (NFC) wird für Nichthost-Teile von URIs nicht mehr ausgeführt. Zuvor wurde NFC für den gesamten URI ausgeführt, wenn <iriParsing> aktiviert war.

URIs, deren Dateinamen nicht nach NFC (Normalization Form C) normalisiert sind, werden nicht nach Format C normalisiert. Verwendet die IRI-Analyse beim Zugreifen auf Dateien mit normalisierten Dateinamen nicht normalisierte Zeichenfolgen, treten möglicherweise Anwendungsfehler auf. Dies betrifft nur Anwendungen, die auf .NET Framework 4.5 abzielen.

System.Uri

Eine ungültige mailto:-URL löst eine Ausnahme im Uri-Klassenkonstruktor aus.

Dies betrifft nur Anwendungen, die neu kompiliert wurden und auf .NET Framework 4.5 abzielen.

System.Uri

In Anwendungen, die auf .NET Framework 4.5 ausgerichtet sind, werden nachgestellte Punkte am Ende eines Pfadsegments in einer ursprünglichen URI-Zeichenfolge (beispielsweise http://www.proseware.com/LLC./About.aspx) beibehalten. (Beachten Sie, dass Pfadsegmente aus genau ein oder zwei Punkten, wie beispielsweise http://www.proseware.com/.. oder http://www.proseware.com/./default.htm, entfernt werden, Pfadsegmente mit mehr als zwei aufeinander folgenden Punkten (z. B. http://localhost/dir1/.../dir2) jedoch beibehalten werden.

Diese Änderung betrifft nur Anwendungen, die auf .NET Framework 4.5 abzielen. Bei Anwendungen, die darauf basieren, dass die nachgestellten Punkte entfernt werden, treten möglicherweise Fehler auf.

System.Uri

In Anwendungen, die .NET Framework 4.5 als Ziel haben, sind Abfragen in einem file://-URI zulässig. Das Zeichen "?" wird nicht mit Escapezeichen versehen, da es als Teil des Pfads interpretiert wird.

Diese Änderung betrifft nur Anwendungen, die auf .NET Framework 4.5 abzielen. Bei Anwendungen, die erfordern, dass das Zeichen "?" mit Escapezeichen versehen wird, treten möglicherweise Fehler auf.

System.Uri

In Anwendungen, die auf .NET Framework 4.5 ausgerichtet sind, werden Unicode-Steuerzeichen von U+0080 bis U+009F falsch codiert.

Normalerweise werden Unicode-Steuerzeichen in URIs nicht verwendet.

Uri.EscapeDataString , Uri.EscapeUriString und Uri.UnescapeDataString

Die Liste reservierter und nicht reservierter Zeichen unterstützt nun RFC 3986.

Spezielle Änderungen:

  • Bei nicht reservierten Zeichen mit Escapezeichen werden letztere entfernt.

  • EscapeDataString versieht reservierte Zeichen basierend auf RFC 3986 mit Escapezeichen.

  • EscapeUriString versieht reservierte Zeichen nicht mit Escapezeichen.

  • UnescapeDataString löst keine Ausnahme aus, wenn eine ungültige Escapesequenz gefunden wird.

TaskFactory.FromAsync

Die Implementierung der IAsyncResult.CompletedSynchronously-Eigenschaft muss korrekt sein, damit die resultierende Aufgabe abgeschlossen wird. Das heißt, die Eigenschaft muss für den Fall, und ausschließlich für den Fall, dass die Implementierung synchron abgeschlossen wurde, true zurückgeben. Zuvor wurde die Eigenschaft nicht überprüft.

Die resultierende Aufgabe wird nicht abgeschlossen, wenn die Implementierung der IAsyncResult.CompletedSynchronously-Eigenschaft fälschlicherweise true zurückgibt.

Hh367887.collapse_all(de-de,VS.110).gifSQLClient

Funktion

Änderung

Auswirkungen

Herstellen einer Verbindung mit einer SQL Server-Datenbank aus verwaltetem Code, der unter .NET Framework 4.5 ausgeführt wird.

Der vorhandene synchrone API-Codepfad wurde geändert, um eine asynchrone Unterstützung hinzuzufügen.

Sind Non-IFS-Winsock-Basisdienstanbieter (BSPs) oder Mehrschicht-Dienstanbieter (LSPs) installiert, kann möglicherweise keine Verbindung mit SQL Server hergestellt werden. Weitere Informationen finden Sie unter SetFileCompletionNotificationModes-API verursacht Probleme bei EA-Abschlussport mit installiertem Non-IFS-LSP auf der Microsoft Support-Website.

System.Data.SqlClient.SqlConnection -Typ

Verbindungen mit Datenbanken von SQL Server 1997 werden nicht mehr unterstützt.

Anwendungen, die unter .NET Framework 4.5 ausgeführt werden, können mit Datenbanken von SQL Server 1997 keine Verbindung herstellen.

System.Data.SqlClient.SqlConnection -Typ

Verbindungen mit SQL Server-Datenbanken mit VIA (Virtual Interface Adapter)-Protokoll werden nicht mehr unterstützt.

Anwendungen, die unter .NET Framework 4.5 ausgeführt werden, können mit SQL Server-Datenbanken, die VIA verwenden, keine Verbindung herstellen.

System.Data.SqlClient.SqlBulkCopy -Typ

Beim Einfügen von Daten in eine Spalte verwendet SqlBulkCopy die Codierung der Zielspalte, und nicht die Standardcodierung für VARCHAR- und CHAR-Typen.

Diese Änderung schließt die Gefahr einer möglichen Datenbeschädigung aus, die bei Verwenden der Standardcodierung verursacht wird, wenn diese nicht von der Zielspalte verwendet wird. In seltenen Fällen kann eine vorhandene Anwendung eine SqlException-Ausnahme auslösen, wenn die Änderung der Codierung Daten erzeugt, die zu groß für die Zielspalte sind.

System.Data.SqlClient -Sortierreihenfolge

sql_variant -Daten verwenden sql_variant-Sortierreihenfolgen anstatt Datenbanksortierreihenfolgen.

Diese Änderung behandelt potenzielle Datenbeschädigungen, die verursacht werden, wenn sich die Datenbanksortierreihenfolge von der sql_variant-Sortierreihenfolge unterscheidet. Bei Anwendungen, die auf den beschädigten Daten basieren, treten möglicherweise Fehler auf.

Hh367887.collapse_all(de-de,VS.110).gifEntity Framework

Funktion

Änderung

Auswirkungen

Mit der ObjectContext.CreateDatabase-Methode erstellte Protokolldateien

Wenn die CreateDatabase-Methode entweder direkt oder durch Code First mit dem SqlClient-Anbieter und einem AttachDBFilename-Wert in der Verbindungszeichenfolge aufgerufen wird, erstellt sie eine Protokolldatei namens filename_log.ldf anstelle von filename.ldf (wobei filename der vom AttachDBFilename-Wert angegebene Name der Datei ist).

Diese Änderung verbessert das Debuggen, indem eine Protokolldatei bereitgestellt wird, die nach den SQL Server-Spezifikationen benannt wird. Dies sollte keine unerwarteten Nebeneffekte aufweisen.

Datendefinitionssprachen (Data Definition Language, DDL)-APIs

Das Verhalten von DDL-APIs beim Angeben von AttachDBFilename hat sich wie folgt geändert:

  • Verbindungszeichenfolgen müssen keinen Initial Catalog-Wert angeben. Bislang waren AttatchDBFilename und Initial Catalog gleichermaßen erforderlich.

  • Wenn sowohl AttatchDBFilename als auch Initial Catalog angegeben werden und die angegebene MDF-Datei vorhanden ist, gibt die ObjectContext.DatabaseExists-Methode true zurück. Bislang hat sie false zurückgegeben.

  • Wenn sowohl AttatchDBFilename als auch Initial Catalog angegeben werden und die angegebene MDF-Datei vorhanden ist, werden mit dem Aufrufen der ObjectContext.DeleteDatabase-Methode die Dateien gelöscht.

  • Wird ObjectContext.DeleteDatabase aufgerufen, wenn die Verbindungszeichenfolge einen AttachDBFilename-Wert mit einer MDF angibt, die nicht vorhanden ist, und einen Initial Catalog, der nicht vorhanden ist, löst die Methode eine InvalidOperationException-Ausnahme aus. Zuvor hat sie eine SqlException-Ausnahme ausgelöst.

Diese Änderungen erleichtern das Erstellen von Tools und Anwendungen, die die DDL-APIs verwenden. Diese Änderungen können sich in den folgenden Szenarien auf die Anwendungskompatibilität auswirken:

Die Methoden ObjectContext.CreateDatabase und DbProviderServices.CreateDatabase

Tritt bei dem Erstellen von Datenbankobjekten ein Fehler auf, nachdem eine leere Datenbank erstellt wurde, versucht die Methode, die Datenbankerstellung abzulegen, und gibt die ursprüngliche SqlException Ausnahme weiter. Tritt bei dem Versuch, die Datenbank abzulegen, ein Fehler auf, löst die Methode eine InvalidOperationException-Ausnahme aus.

Diese Änderung verhindert die Erstellung einer leeren, unbrauchbaren Datenbank. Mit einer Ausnahmebehandlung lässt sich eine gewisse Änderung herbeiführen, da das erfolgreiche Entfernen der Datenbank jetzt die ursprüngliche SqlException Ausnahme weitergibt.

Die Methoden ObjectContext.Translate und ObjectContext.ExecuteStoreQuery

Wenn T ein Enumerationstyp ist, gibt die Methode ordnungsgemäß Daten aus der Datenbank zurück. Zuvor wurden Enumerationstypen nicht unterstützt, sodass das Ergebnis immer zu NULL umgewandelt oder in den Enumerationstyp konvertiert wurde. Zugrunde liegende Typen, die nicht von Entity Framework unterstützt werden, z. B. UInt16, UInt32 und UInt64; immer noch NULL zurückgeben oder mit einem zugrunde liegenden Wert NULL in den Enumerationstyp konvertiert werden.

Die Unterstützung von Enumerationen ist neu im Entity Framework in .NET Framework 4.5. Hängt Entwicklercode vom Ergebnis NULL ab, könnte je nach spezifischem Code ein Anwendungsfehler auftreten.

Hh367887.collapse_all(de-de,VS.110).gifLINQ

Funktion

Änderung

Auswirkungen

Enumerable.Empty<TResult> -Methode

Die Methode gibt eine zwischengespeicherte interne Instanz zurück, anstatt einen neuen IEnumerable<T>-Typ.

Diese Änderung verbessert die Leistung. Bei Code, der aus mehreren Aufrufen an Enumerable.Empty<TResult> zwei eindeutige leeren Typen abrufen muss, tritt jedoch ein Fehler auf.

Funktion

Änderung

Auswirkungen

Typen und Member vom System.Net.PeerToPeer.Collaboration-Namespace

Die Typen und Member werden von Windows 8 nicht unterstützt. Werden sie aufgerufen, wird eine PlatformNotSupportedException-Ausnahme ausgelöst.

Anwendungen können diese Typen und Member unter Windows 8 nicht mehr verwenden.

Funktion

Änderung

Auswirkungen

MSBuild

Wird MSBuild mit Eingabeaufforderung ausgeführt, werden die Projektmappenkonfigurationsdateien, die Builds bestimmter Projekte deaktivieren, berücksichtigt.

MSBuild zeigt bei Aufrufen durch Visual Studio und bei Ausführen mit Eingabeaufforderung ein identisches Verhalten. Es müssen keine separaten Projektmappen erstellt oder Projekte aus einer Projektmappe entfernt werden, um eine Teilmenge von Projekten in einer Projektmappe zu erstellen.

MSBuild

Die TreatAsLocalProperty-Eigenschaft in MSBuild-Projektdateien verhindert, dass bestimmte Eigenschaften, einschließlich der OutDir-Eigenschaft, auf globaler Ebene überschrieben werden.

Überschreibungen der OutDir-Eigenschaft führen möglicherweise zum Abbruch, wenn OutDir eine globale Eigenschaft ist, die nach dem Importieren der MS.Common.Targets-Datei überschrieben wird.

Windows-Fehlerbericht: Watson-Buckets

Verwaltete Abstürze werden auf Grundlage mehrerer Kriterien nach Kategorien gruppiert, wozu bisher die Assemblyversion gehörte. In .NET Framework 4.5 wird anstelle der Assemblyversion die Dateiversion verwendet.

Da sich die Assemblyversion nur in den Hauptversionen unterscheidet, lässt sich mit der Dateiversion anstelle der Assemblyversion als Kategorie die spezifische Version einer Assembly ermitteln, die in einem verwalteten Absturz involviert war.

Funktion

Änderung

Auswirkungen

ASP.NET IIS-Registrierungstool (Aspnet_regiis.exe)

Bei Windows 8 werden die Optionen –i und –u zum Installieren und Deinstallieren von ASP.NET nicht unterstützt.

Um ASP.NET 4.5 mit IIS 8 zu installieren oder zu deinstallieren, verwenden Sie das Dialogfeld Windows-Funktionen aktivieren oder deaktivieren, das Server-Verwaltungstool oder das dism.exe-Befehlszeilentool.

System.Web.UI.WebControls.EntityDataSource -Steuerelement

Das Page.LoadComplete-Ereignis führt nicht mehr dazu, dass das System.Web.UI.WebControls.EntityDataSource-Steuerelement Datenbindungen für Änderungen an Erstellungs-/Update-/Löschparametern aufruft.

Diese Änderung schließt unnötige Roundtrips zur Datenbank sowie ein Zurücksetzen der Werte von Steuerelementen aus und erzeugt Verhaltensweisen, die mit anderen Datensteuerelementen, z. B. SqlDataSource und ObjectDataSource konsistent sind. Diese Änderung erzeugt im unwahrscheinlichen Fall, dass Anwendungen im Page.LoadComplete-Ereignis auf Aufrufen der Datenbindung basieren, ein anderes Verhalten.

WebUtility.HtmlDecode -, WebUtility.UrlDecode- und Json.Decode-Methoden

Decodierungsmethoden decodieren nicht mehr standardmäßig ungültige Eingabesequenzen in ungültige UTF-16-Zeichenfolgen. Stattdessen geben sie die ursprüngliche Eingabe zurück.

Die Änderung der Decoderausgabe sollte nur von Bedeutung sein, wenn Sie Binärdaten statt der UTF-16-Daten in Zeichenfolgen speichern. Um dieses Verhalten explizit zu steuern, legen Sie das aspnet:AllowRelaxedUnicodeDecoding-Attribut des <appSettings>-Elements auf true fest, um Legacyverhalten zu aktivieren, oder auf false, um das aktuelle Verhalten zu aktivieren.

WebUtility.HtmlEncode -Methode

Bei Anwendungen, die auf .NET Framework 4.5 abzielen, durchlaufen Zeichen, die sich außerhalb des Basic Multilingual Plane (BMP) befinden, einen erfolgreichen Roundtrip, wenn sie an die WebUtility.HtmlDecode-Methode übergeben werden.

Diese Änderung sollte keine Auswirkungen auf aktuelle Anwendungen haben. Um das ursprüngliche Verhalten wiederherzustellen, legen Sie das targetFramework-Attribut des <httpRuntime>-Elements auf eine andere Zeichenfolge als "4.5" fest. Sie können die unicodeEncodingConformance- und unicodeDecodingConformance-Attribute des <webUtility>-Konfigurationselements auch festlegen, um dieses Verhalten unabhängig von der Zielversion von .NET Framework zu steuern.

HttpRequest.ContentEncoding -Eigenschaft

UTF-7-Codierung ist nicht zulässig.

Teilweise treten bei Daten für Anwendungen, die von eingehenden UTF-7-Daten abhängen, Decodierungsprobleme auf. Dies dürfte selten passieren, aber Sie können Legacyverhalten mithilfe des aspnet:AllowUtf7RequestContentEncoding-Attributs des <appSettings>-Elements wiederherstellen.

HttpUtility.JavaScriptStringEncode

Ab .NET Framework 4.5 wird das kaufmännische Und-Zeichen (&) von der Methode mit einem Escapezeichen versehen.

Wenn Ihre App vom vorherigen Verhalten dieser Methode abhängig ist, können Sie dem appSettings-Element von ASP.NET eine aspnet:JavaScriptDoNotEncodeAmpersand-Einstellung in der Konfigurationsdatei hinzufügen.

Die Methoden MachineKey.Encode und MachineKey.Decode

Diese Methoden sind jetzt veraltet.

Die Kompilierung von Code, der diese Methoden aufruft, erzeugt eine Compilerwarnung. Die empfohlenen Alternativen sind MachineKey.Protect und MachineKey.Unprotect.

Funktion

Änderung

Auswirkungen

System.ComponentModel.Composition.Primitives.ComposablePartCatalog und abgeleitete Klassen

Ab .NET Framework 4.5 implementieren MEF-Kataloge IEnumerable und können daher nicht mehr verwendet werden, um ein Serialisierungsprogramm (XmlSerializer-Objekt) zu erstellen.

Wenn Sie versuchen, einen MEF-Katalog zu serialisieren, wird eine Ausnahme ausgelöst.

Funktion

Änderung

Auswirkungen

Verwaltete Browserhostingsteuerelemente von .NET Framework 1.1 und 2.0

Das Hosting dieser Steuerelemente wird in Internet Explorer blockiert.

Internet Explorer kann eine Anwendung, die verwaltete Browserhostingsteuerelemente verwendet, nicht starten. Das vorherige Verhalten kann wiederhergestellt werden, indem der EnableIEHosting-Wert des Registrierungsunterschlüssels HKLM/SOFTWARE/MICROSOFT/.NETFramework für x86-Systeme und für 32-Bit-Prozesse auf x64-Systemen auf 1 festgelegt wird und der EnableIEHosting-Wert des Registrierungsunterschlüssels HKLM/SOFTWARE/Wow6432Node/Microsoft/.NETFramework für 64-Bit-Prozesse auf x64-Systemen auf 1 festgelegt wird.

Funktion

Änderung

Auswirkungen

Nachrichten in WCF-Webdiensten, die in IIS (Internetinformationsdienste) oder ASP.NET Development Server gehostet werden, die maxRequestLength (in ASP.NET) oder maxReceivedMessageSize (in WCF) überschreiten

Der HTTP-Statuscode wurde von 400 (Ungültige Anforderung) in 413 (Anforderungsentität zu groß) geändert, und Nachrichten, die entweder die festgelegte maxRequestLength oder maxReceivedMessageSize überschreiten, lösen eine ProtocolException-Ausnahme aus. Dies gilt auch für Fälle, in denen der Übergangsmodus Streamed ist.

Diese Änderung erleichtert das Debuggen, wenn die Nachrichtenlänge die von ASP.NET oder WCF zulässigen Begrenzungen überschreitet.

Sie müssen jeden Code ändern, der die Verarbeitung auf Grundlage eines HTTP 400-Statuscode ausführt.

Replace in OData-URLs

Die Replace-Methode in OData-URLs ist standardmäßig deaktiviert.

Wenn OData Replace deaktiviert ist (jetzt standardmäßig), löst die Benutzeranforderung eine Ausnahme aus, und die Anforderung schlägt fehl.

System.ServiceModel.Web.WebServiceHost

Das System.ServiceModel.Web.WebServiceHost-Objekt fügt keinen standardmäßigen Endpunkt mehr hinzu, wenn ein expliziter Endpunkt vom Anwendungscode hinzugefügt wurde.

Wenn eine Clientanwendung versucht, eine Verbindung mit einem Endpunkt herzustellen, der nicht mehr standardmäßig hinzugefügt wird, tritt ein HTTP-Fehler auf.

Funktion

Änderung

Auswirkungen

System.Drawing.dll

Die CheckForOverflowUnderflow-Eigenschaft für die Assembly wird auf true festgelegt.

Zuvor wurde das Ergebnis im Fall von Überläufen automatisch abgeschnitten. Nun wird eine OverflowException-Ausnahme ausgelöst.

EncoderParameter.EncoderParameter(Encoder, Int32, Int32, Int32) -Konstruktor

Der Konstruktor ist veraltet.

Der Konstruktor funktioniert nicht auf 64-Bit-Systemen. Verwenden Sie stattdessen den EncoderParameter.EncoderParameter(Encoder, Int32, EncoderParameterValueType, IntPtr)-Konstruktor.

Funktion

Änderung

Auswirkungen

TextBoxBase.UndoLimit -Eigenschaft

Die Standardgrenze der maximalen Anzahl von Rückgängig-Vorgängen für die TextBox- und RichTextBox-Klassen wurde von – 1 (keine Begrenzung) auf 100 geändert.

Diese Änderung sollte keine negativen Auswirkungen haben. Sie können jedoch explizit die UndoLimit-Eigenschaft festlegen, nachdem Sie das Steuerelement instanziiert haben.

System.Windows.Controls.PageRangeSelection -Enumeration

Die CurrentPage- und SelectedPages-Member wurden der Enumeration hinzugefügt.

Diese Änderung sollte keine Auswirkungen auf vorhandene Anwendungen haben. Für vorhandene Member, die diese Enumeration verwenden, ist der Standardwert PageRangeSelection.AllPages.

DataTemplate -Elemente

DataTemplate -Elemente werden jetzt in der Steuerelementansicht der Benutzeroberflächenautomatisierungs-Struktur (UIA) angezeigt.

Diese Änderung verbessert die Barrierefreiheit. Allerdings wirkt sie sich auf Testtools aus, deren Suche benachbarter Elemente auf der vorherigen Struktur der UIA-Struktur basiert.

Synchronisierung der TextBox.Text-Eigenschaft und der Eigenschaft, an die sie gebunden ist

In einigen Fällen stellt die TextBox.Text-Eigenschaft einen früheren Wert des datengebundenen Eigenschaftswerts dar, wenn die Eigenschaft während eines Datenbindungsschreibvorgangs geändert wird.

Dies sollte keine negativen Auswirkungen haben. Sie können jedoch das vorherige Verhalten wiederherstellen, indem Sie die FrameworkCompatibilityPreferences.KeepTextBoxDisplaySynchronizedWithTextProperty-Eigenschaft auf false festlegen.

System.Windows.Controls.TextBox -Eigenschaft

Wenn ein System.Windows.Controls.TextBox-Steuerelement inaktiv ist, wird markierter Text innerhalb des Felds in einer anderen Farbe angezeigt, als wenn das Textfeld aktiv ist.

Sie können das vorherige Verhalten wiederherstellen, indem Sie die FrameworkCompatibilityPreferences.AreInactiveSelectionHighlightBrushKeysSupported-Eigenschaft auf false festlegen.

DispatcherSynchronizationContext.CreateCopy

In .NET Framework 4 gibt die Methode einen Verweis auf die aktuelle Instanz zurück. In .NET Framework 4.5 gibt sie eine neue Instanz zurück.

Code, der davon ausgeht, dass gleiche Verweise angeben, dass sich der ausführende Thread im richtigen Kontext befindet, wird nun ordnungsgemäß ausgeführt. Aufgrund der Änderung sollte Code, der DispatcherSynchronizationContext.CreateCopy aufruft, jedoch getestet werden.

Funktion

Änderung

Auswirkungen

System.Activities.dll-Sicherheit

Die Assembly ist mit dem AllowPartiallyTrustedCallersAttribute-Attribut gekennzeichnet.

Abgeleitete Klassen können nicht mit SecurityCriticalAttribute gekennzeichnet werden. Zuvor mussten abgeleitete Typen mit SecurityCriticalAttribute gekennzeichnet werden. Diese Änderung sollte jedoch keine tatsächlichen Auswirkungen haben.

WF 3.0-Typen und -Member

Die Typen und Member von WF 3.0 sind jetzt als veraltet gekennzeichnet.

Der Versuch, Quellcode zu kompilieren, der WF 3.0-Typen oder -Member verwendet, generiert einen Compilerfehler. Sie sollten die WF 4-Typen und -Member in den System.Activities-Namespaces verwenden.

System.Activities.Presentation.DragDropHelper -Klasse

Die DragDropHelper-Klasse enthält neue Methoden, die Drag & Drop-Vorgänge mit mehreren Objekten unterstützen. Vorhandene Drag & Drop-Methoden, die das Ziehen eines einzelnen Objekts unterstützen, sind veraltet. (Weitere Informationen finden Sie unter Veraltete Elemente in der .NET Framework-Klassenbibliothek.)

Auch wenn die früheren Methoden veraltet sind, werden sie weiterhin vom Compiler und von Common Language Runtime unterstützt. Die neuen Methoden bieten jedoch eine höhere Funktionalität. Es wird empfohlen, einige der vorhandenen Methoden wie folgt zu ersetzen:

Überladungsauflösung von Aufrufen an die Dispatcher.Invoke-Methode

.NET Framework 4.5 fügt neue Überladungen hinzu, die einen Parameter des Typs System.Action enthalten. Wird der vorhandene Code neu kompiliert, lösen Compiler Aufrufe an Dispatcher.Invoke-Methoden mit einem Delegate-Parameter möglicherweise als Aufrufe an Dispatcher.Invoke-Methoden mit einem System.Action-Parameter auf.

Wird ein Aufruf an eine Dispatcher.Invoke-Überladung mit einem Delegate-Parameter als Aufruf an eine Dispatcher.Invoke-Überladung mit einem System.Action-Parameter aufgelöst, kann es zu folgenden unterschiedlichen Verhaltensweisen kommen:

System.Activities.Expressions.Literal<T> -Klasse

Das zugeordnete ValueSerializer-Objekt konvertiert ein DateTime- oder DateTimeOffset-Objekt, dessen Komponenten Second und Millisecond ungleich 0 (null) sind und (für einen DateTime-Wert) dessen DateTime.Kind-Eigenschaft nicht Unspecified ist, in eine Eigenschaftenelementsyntax anstatt in eine Zeichenfolge.

Durch diese Änderung kann bei DateTime- und DateTimeOffset-Werten ein Roundtrip ausgeführt werden. Benutzerdefinierte XAML-Parser, die davon ausgehen, dass sich Eingabe-XAML in der Attributsyntax befindet, funktionieren nicht ordnungsgemäß.

Funktion

Änderung

Auswirkungen

XDocument.Validate -Methode

Wenn der LoadOptions.SetLineInfo-Wert an die Load-Methode übergeben wird und ein Validierungsfehler auftritt, enthalten die XmlSchemaException.LineNumber- und XmlSchemaException.LinePosition-Eigenschaften jetzt Zeileninformationen.

Ausnahmebehandlungscode, der von den Werten der XmlSchemaException.LineNumber- und XmlSchemaException.LinePosition-Eigenschaften abhängt, funktioniert nicht mehr.

Laden von XML-Dateien mit System.Xml.XmlTextReader

Die DTD-Entitätserweiterung ist auf 10.000.000 Zeichen beschränkt.

Das Laden von XML-Dateien ohne DTD-Entitätserweiterung oder mit eingeschränkter DTD-Entitätserweiterung ist davon nicht betroffen. Dateien mit DTD-Entitäten, die auf mehr als 10.000.000 Zeichen erweitert werden, können nicht geladen werden und lösen nun eine Ausnahme aus.

Vorwärtskompatibilitätsmodus für die System.Xml.Xsl.XslCompiledTransform-Klasse

In .NET Framework 4 verursachte die XSLT 1.0-Vorwärtskompatibilität folgende Probleme:

  • Beim Laden eines Stylesheets trat ein Fehler auf, wenn die Version auf 2.0 festgelegt war und der Parser ein unbekanntes XSLT 1.0-Konstrukt feststellte.

  • Das xsl:sort-Konstrukt konnte keine Daten sortieren, wenn die Stylesheetversion auf 1.1 festgelegt war.

In .NET Framework 4.5 wurden diese Probleme behoben, und der XSLT 1.0-Vorwärtskompatibilitätsmodus funktioniert ordnungsgemäß.

Der XSLT 1.0-Vorwärtskompatibilitätsmodus funktioniert jetzt wie zuvor.

Ausnahmemeldungen, wenn eine XSLT-Datei zu komplex ist

In .NET Framework 4.5 lautet die Fehlermeldung bei einer zu komplexen XSLT-Datei wie folgt: "Das Stylesheet ist zu komplex." In früheren Versionen hieß die Fehlermeldung "XSLT-Compilerfehler."

Anwendungscode, der vom Text der Fehlermeldung abhängt, funktioniert nicht mehr. Die Ausnahmetypen sind jedoch nach wie vor identisch, daher sollte diese Änderung keine tatsächlichen Auswirkungen haben.

XML-Schemavalidierung für xsd:anyURI

In .NET Framework 4.5 ist die XML-Schemavalidierung strikter. Wenn Sie xsd:anyURI verwenden, um einen URI wie ein mailto-Protokoll zu überprüfen, tritt bei der Validierung ein Fehler auf, wenn der URI Leerzeichen enthält. In früheren Versionen von .NET Framework war die Validierung erfolgreich.

Die Änderung betrifft nur Anwendungen, die auf .NET Framework 4.5 abzielen.

Fanden Sie dies hilfreich?
(1500 verbleibende Zeichen)
Vielen Dank für Ihr Feedback.

Community-Beiträge

HINZUFÜGEN
Anzeigen:
© 2014 Microsoft