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 Migrationsprobleme zwischen .NET Framework, Version 3.5 Service Pack 1 und .NET Framework, Version 4, beschrieben, einschließlich Korrekturen, Änderungen für Die Einhaltung von Standards und Sicherheit sowie Änderungen basierend auf Kundenfeedback. Die meisten dieser Änderungen erfordern keine Programmieränderungen in Ihren Anwendungen. Informationen zu Änderungen finden Sie in der Spalte " Empfohlene Änderungen " der Tabelle. Wichtige Änderungen werden nach Bereich aufgeschlüsselt, z. B. ASP.NET und Windows Presentation Foundation (WPF).
Eine allgemeine Übersicht über die Probleme in diesem Artikel finden Sie im Migrationshandbuch zu .NET Framework 4.
Informationen zu neuen Features finden Sie unter What's New in .NET Framework 4.
ASP.NET und Web
Namespaces: System.Web, System.Web.Mobile, System.Web.SecuritySystem.Web.UI.WebControls
Assembly: System.Web (in „System.Web.dll“)
Merkmal | Unterschiede von 3.5 SP1 | Empfohlene Änderungen |
---|---|---|
Browserdefinitionsdateien | Die Browserdefinitionsdateien wurden aktualisiert, um Informationen zu neuen und aktualisierten Browsern und Geräten einzuschließen. Ältere Browser und Geräte wie Netscape Navigator wurden entfernt, und neuere Browser und Geräte wie Google Chrome und Apple iPhone wurden hinzugefügt. Wenn Ihre Anwendung benutzerdefinierte Browserdefinitionen enthält, die von einer der entfernten Browserdefinitionen erben, wird ein Fehler angezeigt. Das HttpBrowserCapabilities Objekt (das durch die Eigenschaft der Seite verfügbar gemacht wird) wird durch die Browserdefinitionsdateien Request.Browse gesteuert. Daher unterscheiden sich die Informationen, die durch den Zugriff auf eine Eigenschaft dieses Objekts in ASP.NET 4 zurückgegeben werden, möglicherweise von den Informationen, die in einer früheren Version von ASP.NET zurückgegeben wurden. |
Wenn Ihre Anwendung auf die alten Browserdefinitionsdateien angewiesen ist, können Sie sie aus dem folgenden Ordner kopieren: Windows\Microsoft.NET\Framework\v2.0.50727\CONFIG\Browsers Kopieren Sie die Dateien in den entsprechenden Ordner \CONFIG\Browsers für ASP.NET 4. Nachdem Sie die Dateien kopiert haben, führen Sie das Aspnet_regbrowsers.exe Befehlszeilentool aus. Weitere Informationen finden Sie auf der https://www.asp.net/mobile Website. |
Untergeordnete Anwendungen, die unter gemischten Versionen von ASP.NET ausgeführt werden | ASP.NET 4-Anwendungen, die als untergeordnete Anwendungen konfiguriert sind, die frühere Versionen von ASP.NET ausführen, können möglicherweise aufgrund von Kompilierungs- oder Konfigurationsfehlern nicht starten. Der spezifische Fehler, der auftritt, hängt davon ab, ob die Anwendung unter IIS 6.0 oder unter IIS 7 oder IIS 7.5 ausgeführt wird. | Sie können Änderungen an den Konfigurationsdateien der betroffenen Anwendungen vornehmen, damit das Konfigurationssystem die ASP.NET 4-Anwendung richtig erkennt. Informationen zu den Änderungen, die Sie vornehmen müssen, finden Sie auf der ASP.NET-Website im Dokument ASP.NET 4 Breaking Changes (Grundlegende Änderungen in ASP.NET 4 ) im Abschnitt „ASP.NET 4 Child Applications Fail to Start When Under ASP.NET 2.0 or ASP.NET 3.5 Applications“ (Untergeordnete ASP.NET 4-Anwendungen können unter ASP.NET 2.0 oder ASP.NET 3.5-Anwendungen nicht gestartet werden). |
ClientID-Änderungen | Mit der neuen clientIDMode Einstellung in ASP.NET 4 können Sie angeben, wie ASP.NET das id Attribut für HTML-Elemente generiert. In früheren Versionen von ASP.NET entspricht das Standardverhalten der AutoID Einstellung von clientIDMode . Die Standardeinstellung ist jetzt Predictable . Weitere Informationen finden Sie unter ASP.NET Web Server Control Identification. |
Wenn Sie Visual Studio zum Upgrade Ihrer Anwendung von ASP.NET 2.0 oder ASP.NET 3.5 verwenden, fügt das Tool automatisch eine Einstellung zur Web.config Datei hinzu, die das Verhalten früherer Versionen von .NET Framework behält. Wenn Sie jedoch ein Upgrade einer Anwendung durchführen, indem Sie den Anwendungspool in IIS auf .NET Framework 4 ändern, verwendet ASP.NET standardmäßig den neuen Modus. Um den neuen Client-ID-Modus zu deaktivieren, fügen Sie der datei Web.config die folgende Einstellung hinzu:<pages clientIDMode="AutoID" /> |
Codezugriffssicherheit (Code Access Security, CAS) | ASP.NET 2.0 NET-Features, die in ASP.NET 3.5 hinzugefügt wurden, verwenden das .NET Framework 1.1- und .NET Framework 2.0-Codezugriffssicherheitsmodell (CAS). Die Umsetzung der CAS in ASP.NET 4 wurde jedoch erheblich überarbeitet. Daher können teilweise vertrauenswürdige ASP.NET-Anwendungen, die vertrauenswürdigen Code verwenden, der im globalen Assemblycache ausgeführt wird, mit verschiedenen Sicherheitsausnahmen Fehler auslösen. Teilweise vertrauenswürdige Anwendungen, die umfangreiche Änderungen an den CAS-Richtlinien des Computers verwenden, lösen möglicherweise auch Fehler und Sicherheitsausnahmen aus. | Sie können teilweise vertrauenswürdige ASP.NET 4 Anwendungen auf das Verhalten von ASP.NET 1.1 und 2.0 zurücksetzen, indem Sie das neue legacyCasModel Attribut im trust Konfigurationselement verwenden, wie im folgenden Beispiel gezeigt:<trust level= "Medium" legacyCasModel="true" /> Wichtig: Das Zurücksetzen auf das ältere CAS-Modell kann eine reduzierte Sicherheit darstellen. Weitere Informationen zum neuen ASP.NET 4 Codezugriffssicherheitsmodell finden Sie unter Code Access Security in ASP.NET 4 Applications. |
Konfigurationsdateien | Die Stammkonfigurationsdateien (die machine.config-Datei und die Web.config-Stammdatei) für .NET Framework und ASP.NET 4 wurden aktualisiert, um die meisten Konfigurationsinformationen zu enthalten, die in der Anwendung Web.config Dateien in ASP.NET 3.5 gefunden wurden. Aufgrund der Komplexität der verwalteten IIS 7- und IIS 7.5-Konfigurationssysteme kann das Ausführen von ASP.NET 3.5-Anwendungen unter ASP.NET 4 und unter IIS 7 und IIS 7.5 zu ASP.NET Fehlern oder IIS-Fehlern führen. | Aktualisieren Sie ASP.NET 3.5-Anwendungen mithilfe der Projektupgradetools in Visual Studio auf ASP.NET 4. Visual Studio 2010 ändert die Web.config-Datei der ASP.NET 3.5-Anwendung automatisch so, dass sie die entsprechenden Einstellungen für ASP.NET 4 enthält. Sie können jedoch ASP.NET 3.5-Anwendungen mit .NET Framework 4 ohne erneute Kompilierung ausführen. In diesem Fall müssen Sie die Web.config Datei der Anwendung möglicherweise manuell ändern, bevor Sie die Anwendung unter .NET Framework 4 und unter IIS 7 oder IIS 7.5 ausführen. Die spezifische Änderung, die Sie vornehmen müssen, hängt von der Kombination von Software ab, mit der Sie arbeiten, einschließlich Service Pack (SP)-Versionen. Informationen zu den möglichen Softwarekombinationen, die von dieser Änderung betroffen sind und wie Sie Probleme mit bestimmten Kombinationen beheben können, finden Sie im Dokument "Konfigurationsfehler im Zusammenhang mit der neuen ASP.NET 4-Stammkonfiguration" im Dokument ASP.NET 4 Breaking Changes on the ASP.NET Website. |
Steuerung des Renderings | In früheren Versionen von ASP.NET haben einige Steuerelemente Markup ausgegeben, das Sie nicht deaktivieren konnten. Standardmäßig wird dieser Markuptyp in ASP.NET 4 nicht mehr generiert. Die Renderingänderungen wirken sich auf die folgenden Steuerelemente aus: * Die Steuerelemente Image und ImageButton rendern kein border="0" -Attribut mehr.* Die BaseValidator -Klasse und die Validierungssteuerelemente, die sich davon ableiten, rendern standardmäßig keinen rot formatierten Text mehr.* Das HtmlForm Steuerelement zeigt kein name -Attribut.* Das Table Steuerelement rendert kein border="0" Attribut mehr.Steuerelemente, die nicht für die Benutzereingabe vorgesehen sind (z. B. das Label Steuerelement), rendern das disabled="disabled" Attribut nicht mehr, wenn ihre Enabled Eigenschaft auf festgelegt false ist (oder wenn sie diese Einstellung von einem Containersteuerelement erben). |
Wenn Sie Visual Studio verwenden, um die Anwendung von ASP.NET 2.0 oder ASP.NET 3.5 zu aktualisieren, fügt das Tool automatisch eine Einstellung zur Web.config Datei hinzu, die das ältere Rendering bewahrt. Wenn Sie jedoch ein Upgrade einer Anwendung durchführen, indem Sie den Anwendungspool in IIS auf .NET Framework 4 ändern, verwendet ASP.NET standardmäßig den neuen Renderingmodus. Um den neuen Renderingmodus zu deaktivieren, fügen Sie der datei Web.config die folgende Einstellung hinzu:<pages controlRenderingCompatibilityVersion="3.5" /> |
Ereignishandler in Standarddokumenten | ASP.NET 4 rendert den Attributwert des form HTML-Elements action als leere Zeichenfolge, wenn eine Anforderung an eine erweiterungslose URL gestellt wird, die einem Standarddokument zugeordnet ist. In früheren Versionen von ASP.NET würde eine Anforderung an http://contoso.com zu Default.aspx führen. In diesem Dokument wurde das öffnende form -Tag wie im folgenden Beispiel gerendert:<form action="Default.aspx" /> In ASP.NET 4 führt eine Anforderung an http://contoso.com auch zu einer Anforderung an Default.aspx, aber ASP.NET rendert jetzt das HTML-Starttag form , wie im folgenden Beispiel:<form action="" /> Wenn das action Attribut eine leere Zeichenfolge ist, erstellt das IIS-Objekt DefaultDocumentModule eine untergeordnete Anforderung zum Default.aspx. In den meisten Situationen ist diese untergeordnete Anforderung für Anwendungscode transparent, und die Seite „Default.aspx“ wird normal ausgeführt. Allerdings kann eine mögliche Interaktion zwischen verwaltetem Code und IIS 7 oder IIS 7.5 im integrierten Modus dazu führen, dass verwaltete ASPX-Seiten während der untergeordnete Anforderung nicht mehr ordnungsgemäß ausgeführt werden. Wenn die folgenden Bedingungen auftreten, führt die untergeordnete Anforderung an ein Standarddokument im Format .aspx zu einem Fehler oder zu unerwartetem Verhalten:* Eine .aspx Seite wird an den Browser gesendet, wobei das form Attribut des action Elements auf "" festgelegt ist.* Das Formular wird zurück zu ASP.NET gepostet. * Ein verwaltetes HTTP-Modul liest einen Teil des Entitätstexts, wie Request.Form oder Request.Params . Dies führt dazu, dass der Entitätstext der POST-Anforderung in einen verwalteten Speicher eingelesen wird. Daher ist der Entitätstext nicht mehr für systemeigene Codemodule verfügbar, die im integrierten IIS 7- oder IIS 7.5-Modus ausgeführt werden.* Das IIS-Objekt DefaultDocumentModule wird schließlich ausgeführt und erstellt eine untergeordnete Anforderung an das Default.aspx Dokument. Da der Einheitstextkörper bereits von verwaltetem Code gelesen wurde, kann kein Einheitstextkörper an die untergeordnete Anforderung gesendet werden.* Wenn die HTTP-Pipeline für die untergeordnete Anforderung ausgeführt wird, wird der Handler für ASPX-Dateien während der Handlerausführungsphase ausgeführt. Da kein Entitätskörper vorhanden ist, gibt es keine Formularvariablen und keinen Ansichtszustand. Daher sind keine Informationen für den .aspx Seitenhandler verfügbar, um zu bestimmen, welches Ereignis (falls vorhanden) ausgelöst werden soll. Daher werden keine Postback-Ereignishandler für die betroffene ASPX-Seite ausgeführt. |
Informationen zur Umgehung von Problemen, die aufgrund der Änderung auftreten können, finden Sie auf der ASP.NET-Website im Dokument ASP.NET 4 Breaking Changes unter „Event Handlers Might Not Be Not Raised in a Default Document in IIS 7 or IIS 7.5 Integrated Mode“ (Ereignishandler wird in einem Standarddokument im integrierten Modus in IIS 7 oder IIS 7.5 möglicherweise nicht ausgelöst). |
Hashingalgorithmus | ASP.NET verwendet Verschlüsselungs- und Hashingalgorithmen, um Daten wie Formularauthentifizierungscookies und Ansichtszustand zu sichern. Standardmäßig verwendet ASP.NET 4 den HMACSHA256 Algorithmus für Hashvorgänge für Cookies und ansichtszustand. In früheren Versionen von ASP.NET wurde der ältere HMACSHA1 Algorithmus verwendet. | Wenn Sie Anwendungen ausführen, die ASP.NET 2.0 und ASP.NET 4 kombinieren, wobei Daten wie Formularauthentifizierungscookies in .NET Framework-Versionen funktionieren müssen, konfigurieren Sie eine ASP.NET 4-Webanwendung, um den älteren HMACSHA1 Algorithmus zu verwenden, indem Sie die folgende Einstellung in der datei Web.config hinzufügen:<machineKey validation="SHA1" /> |
Hosten von Steuerelementen in Internet Explorer | Sie können Windows Forms-Steuerelemente nicht mehr im Internet Explorer hosten, da es bessere Lösungen für das Hosten von Steuerelementen im Web gibt. Daher wurden die assemblys IEHost.dll und IEExec.exe aus .NET Framework entfernt. | Sie können die folgenden Technologien für die entwicklung von benutzerdefinierten Steuerelementen in Webanwendungen verwenden: * Sie können eine Silverlight-Anwendung erstellen und so konfigurieren, dass sie außerhalb des Browsers ausgeführt wird. Weitere Informationen finden Sie unter Out-of-Browser-Support. * Sie können eine XAML-Browseranwendung (XBAP) erstellen, um WPF-Funktionen zu nutzen (erfordert .NET Framework auf Clientcomputern). Weitere Informationen finden Sie in der Übersicht über WPF-XAML-Browseranwendungen. |
HtmlEncode- und UrlEncode-Methoden | Die HtmlEncode und UrlEncode Methoden der Klassen HttpUtility und HttpServerUtility wurden aktualisiert, um das einfache Anführungszeichen (') wie folgt zu codieren:* Die HtmlEncode Methode codiert Instanzen des einzelnen Anführungszeichens als ' * Die UrlEncode Methode codiert Instanzen des einzelnen Anführungszeichens als %27 |
Überprüfen Sie Ihren Code auf Stellen, an denen Sie die HtmlEncode Methoden UrlEncode verwenden, und stellen Sie sicher, dass die Änderung der Codierung nicht zu einer Änderung führt, die sich auf Ihre Anwendung auswirken würde. |
HttpException-Fehler in ASP.NET 2.0-Anwendungen | Nachdem ASP.NET 4 auf IIS 6 aktiviert wurde, können ASP.NET 2.0-Anwendungen, die auf IIS 6 ausgeführt werden (entweder unter Windows Server 2003 oder Windows Server 2003 R2) Fehler wie die folgenden generieren: System.Web.HttpException: Path '/[yourApplicationRoot]/eurl.axd/[Value]' was not found. |
* Wenn ASP.NET 4 nicht erforderlich ist, um die Website auszuführen, ordnen Sie die Website ASP.NET 2.0 neu zu. -oder- * Wenn ASP.NET 4 erforderlich ist, um die Website auszuführen, verschieben Sie alle untergeordneten ASP.NET 2.0 virtuellen Verzeichnisse auf eine andere Website, die ASP.NET 2.0 zugeordnet ist. -oder- * Deaktivieren Sie erweiterungslose URLs. Weitere Informationen finden Sie im Dokument ASP.NET 4 Breaking Changes auf der ASP.NET-Website unter "ASP.NET 2.0-Anwendungen können HttpException-Fehler erzeugen, die auf eurl.axd verweisen". |
Mitgliedschaftstypen | Einige Typen (z. B. MembershipProvider), die in der ASP.NET-Mitgliedschaft verwendet werden, wurden von der System.Web.dll- in die System.Web.ApplicationServices.dll-Assembly verschoben. Die Typen wurden verschoben, um Architekturschichtabhängigkeiten zwischen Typen im Client und in erweiterten .NET Framework-SKUs aufzulösen. | Klassenbibliotheken, die von früheren Versionen von ASP.NET aktualisiert wurden und mitgliedschaftstypen verwenden, die verschoben wurden, können möglicherweise nicht kompiliert werden, wenn sie in einem ASP.NET 4-Projekt verwendet werden. Wenn ja, fügen Sie im Klassenbibliotheksprojekt einen Verweis auf System.Web.ApplicationServices.dllhinzu. |
Menüsteuerelementänderungen | Änderungen am Menu Steuerelement führen zu folgendem Verhalten: * Wenn MenuRenderingMode auf List gesetzt ist, oder wenn MenuRenderingMode auf Default gesetzt ist und ControlRenderingCompatibilityVersion auf 4.0 oder später gesetzt ist, hat die PopOutImageUrl-Eigenschaft keine Auswirkung.* Wenn der Pfad, der in den Eigenschaften StaticPopOutImageUrl und DynamicPopOutImageUrl festgelegt ist, einen umgekehrten Schrägstrich (\) enthält, werden die Bilder nicht gerendert. (In früheren Versionen von ASP.NET konnte der Pfad einen Backslash enthalten.) |
* Legen Sie anstelle der PopOutImageUrl-Eigenschaft für einzelne Menüelemente die StaticPopOutImageUrl- oder DynamicPopOutImageUrl-Eigenschaft des übergeordneten Menu-Steuerelements fest. -oder- Setzen Sie MenuRenderingMode auf Table , oder setzen Sie MenuRenderingMode auf Default und ControlRenderingCompatibilityVersion auf 3.5 . Diese Einstellungen führen dazu, dass das Menu Steuerelement das tabellenbasierte HTML-Layout verwendet, das es in früheren Versionen von ASP.NET verwendet.* Wenn der Pfad in den Eigenschaften StaticPopOutImageUrl oder DynamicPopOutImageUrl einen umgekehrten Schrägstrich (\) enthält, ersetzen Sie ihn durch einen Schrägstrich (/). |
Mobile Assembly in der Datei „Web.config“ | In früheren Versionen von ASP.NET wurde ein Verweis auf die System.Web.Mobile.dll-Assembly in der Stammdatei Web.config im assemblies Abschnitt unter system.web /compilation enthalten. Um die Leistung zu verbessern, wurde der Verweis auf diese Assembly entfernt.Hinweis: Die System.Web.Mobile.dll-Assembly und die ASP.NET mobilen Steuerelemente sind in ASP.NET 4 enthalten, sind jedoch veraltet. |
Wenn Sie Typen aus dieser Assembly verwenden möchten, fügen Sie in der Stammdatei Web.config Datei oder in einer Anwendung Web.config Datei einen Verweis auf die Assembly hinzu. |
Ausgabezwischenspeicherung | In ASP.NET 1.0 führte ein Fehler dazu, dass zwischengespeicherte Seiten, die Location="ServerAndClient" als Ausgabecacheeinstellung angegeben hatten, einen Vary:* HTTP-Header in der Antwort erzeugten. Dies hatte zur Folge, dass Client-Browser die Seite nie lokal zwischenspeichern. In ASP.NET 1.1 wurde die SetOmitVaryStar Methode hinzugefügt, die aufgerufen werden konnte, um die Vary:* Kopfzeile zu unterdrücken. Fehlerberichte deuten jedoch darauf hin, dass Entwickler das vorhandene SetOmitVaryStar Verhalten nicht kennen.In ASP.NET 4 wird der Vary:* HTTP-Header nicht mehr von Antworten ausgegeben, die die folgende Direktive angeben:<%@ OutputCache Location="ServerAndClient" %> Daher ist die SetOmitVaryStar Methode nicht mehr erforderlich, um die Vary:* Kopfzeile zu unterdrücken. In Anwendungen, die "ServerAndClient" für das Location Attribut angeben, können Seiten im Browser zwischengespeichert werden, ohne dass Sie aufrufen SetOmitVaryStarmüssen. |
Wenn Seiten in der Anwendung Vary:* ausgeben müssen, rufen Sie die Methode AppendHeader wie im folgenden Beispiel dargestellt auf:System.Web.HttpResponse.AppendHeader("Vary","*"); Alternativ können Sie den Wert des Ausgabezwischenspeicherungsattributs Location in "Server" ändern. |
Seitenanalyse | Der Seitenparser für ASP.NET Webseiten (.aspx Dateien) und Benutzersteuerelemente (ASCX-Dateien) ist in ASP.NET 4 strenger als in früheren Versionen von ASP.NET und kennzeichnet mehr Markup als ungültig als in früheren Versionen. | Überprüfen Sie Fehlermeldungen, die beim Ausführen einer Seite erzeugt werden, und beheben Sie Fehler, die aus ungültigem Markup resultieren. |
Passport-Typen | Die in ASP.NET 2.0 integrierte Passport-Unterstützung ist veraltet und wird aufgrund von Änderungen in Passport (jetzt Live ID SDK) nicht unterstützt. Daher werden die Typen im Zusammenhang mit Passport in System.Web.Security jetzt mit dem ObsoleteAttribute Attribut gekennzeichnet. |
Ändern Sie jeglichen Code, der Passport-Typen im System.Web.Security-Namespace verwendet (z. B. PassportIdentity), um das Windows Live ID SDK zu nutzen. |
PathInfo-Informationen in der FilePath-Eigenschaft | ASP.NET 4 enthält nicht mehr den PathInfo Wert in den Rückgabewerten von Eigenschaften wie FilePath, und AppRelativeCurrentExecutionFilePathCurrentExecutionFilePath. Stattdessen ist die PathInfo Information in PathInfo verfügbar. Stellen Sie sich beispielsweise das folgende URL-Fragment vor:/testapp/Action.mvc/SomeAction In früheren Versionen von ASP.NET HttpRequest weisen Eigenschaften die folgenden Werte auf: * FilePath: /testapp/Action.mvc/SomeAction * PathInfo: (leer) In ASP.NET 4 HttpRequest weisen Eigenschaften stattdessen die folgenden Werte auf: * FilePath: /testapp/Action.mvc * PathInfo: SomeAction |
Überprüfen Sie den Code auf Stellen, an denen Sie auf Eigenschaften der HttpRequest-Klasse angewiesen sind, um Pfadinformationen zurückzugeben. Ändern Sie den Code, um die neue Art der Rückgabe von Pfadinformationen widerzuspiegeln. |
Anforderungsüberprüfung | Um die Anforderungsüberprüfung zu verbessern, wird die ASP.NET Anforderungsüberprüfung weiter oben im Anforderungslebenszyklus aufgerufen. Daher wird die Anforderungsüberprüfung für Anforderungen ausgeführt, die nicht für .aspx Dateien gelten, z. B. für Webdienstaufrufe und für benutzerdefinierte Handler. Die Anforderungsüberprüfung ist auch aktiv, wenn benutzerdefinierte HTTP-Module in der Anforderungsverarbeitungspipeline ausgeführt werden. Aufgrund dieser Änderung können Anforderungen für andere Ressourcen als .aspx Dateien anforderungsüberprüfungsfehler auslösen. Benutzerdefinierter Code, der in der Anforderungspipeline ausgeführt wird (z. B. benutzerdefinierte HTTP-Module), löst möglicherweise auch Anforderungsüberprüfungsfehler aus. |
Bei Bedarf können Sie das alte Verhalten wiederherstellen, dass nur .aspx Seiten die Anforderungsüberprüfung auslösen, indem Sie die folgende Einstellung in der Webkonfigurationsdatei verwenden:<httpRuntime requestValidationMode="2.0" /> Warnung: Wenn Sie auf das alte Verhalten zurücksetzen, stellen Sie sicher, dass der gesamte Code in vorhandenen Handlern, Modulen und anderen benutzerdefinierten Code Überprüfungen auf potenziell unsichere HTTP-Eingaben durchführt, die XSS-Angriffsvektoren sein könnten. |
Routing | Wenn Sie eine Dateisystemwebsite in Visual Studio 2010 erstellen und sich die Website in einem Ordner befindet, der einen Punkt (.) im Ordnernamen enthält, funktioniert das URL-Routing nicht zuverlässig. Ein HTTP 404-Fehler wird von einigen virtuellen Pfaden zurückgegeben. Dies tritt auf, da Visual Studio 2010 den Visual Studio Development Server unter Verwendung eines falschen Pfads für das virtuelle Stammverzeichnis startet. | * Ändern Sie auf der Seite Eigenschaften für die dateibasierte Website das Attribut Virtueller Pfad in "/". -oder- * Erstellen Sie ein Webanwendungsprojekt anstelle eines Websiteprojekts. Webanwendungsprojekte haben dieses Problem nicht, und das URL-Routing funktioniert auch dann, wenn der Projektordner einen Punkt im Namen hat. -oder- * Erstellen Sie eine HTTP-basierte Website, die in IIS gehostet wird. Von IIS gehostete Websites können Punkte im virtuellen Pfad sowie im Projektdateiordner enthalten. |
SharePoint-Websites | Wenn Sie versuchen, eine ASP.NET 4-Website auszuführen, die als untergeordnetes Element einer SharePoint-Website bereitgestellt wird, die eine benutzerdefinierte teilweise vertrauenswürdige Ebene mit dem Namen WSS_Minimal enthält, wird der folgende Fehler angezeigt:Could not find permission set named 'ASP.Net'. |
Derzeit sind keine Versionen von SharePoint mit ASP.NET kompatibel. Daher sollten Sie nicht versuchen, eine ASP.NET 4-Website als untergeordnetes Element einer SharePoint-Website auszuführen. |
XHTML 1.1-Standards | Um die XHTML 1.1-Compliance für neue Websites zu aktivieren, generieren die ASP.NET-Steuerelemente in .NET Framework 4 XHTML 1.1-kompatible HTML. Dieses Rendering wird mithilfe der folgenden Option in der Web.config Datei innerhalb des <system.Web> Elements aktiviert:<pages controlRenderingCompatibilityVersion="4.0"/> Diese Option ist standardmäßig auf 4.0 festgelegt. Webprojekte, die von Visual Studio 2008 aktualisiert werden, haben die Einstellung 3.5 für Kompatibilität aktiviert. |
Keiner. |
Kern
Allgemeine Funktionen
Merkmal | Unterschiede von 3.5 SP1 | Empfohlene Änderungen |
---|---|---|
CardSpace | Windows CardSpace ist nicht mehr in .NET Framework enthalten; sie wird separat bereitgestellt. | Laden Sie Windows CardSpace aus dem Microsoft Download Center herunter. |
Konfigurationsdateien | Korrekturen wurden vorgenommen, wie .NET Framework auf Anwendungskonfigurationsdateien zugreift. | Wenn Ihre Anwendungskonfigurationsdatei application-name.configbenannt ist, benennen Sie sie in application-name.exe.configum. Benennen Sie z. B. MyApp.config in MyApp.exe.configum. |
C#-Codecompiler | Die Klassen Compiler , CompilerError und ErrorLevel , die sich im Microsoft.CSharp-Namespace befanden, sind nicht mehr verfügbar, und ihre Assembly (cscompmgd.dll) ist nicht mehr im .NET-Framework enthalten. |
Verwenden Sie die CodeDomProvider Klasse und andere Klassen im System.CodeDom.Compiler Namespace. Weitere Informationen finden Sie unter Verwenden des CodeDOM. |
Hosting (nicht verwaltete API) | Zur Verbesserung der Hostingfunktionen sind einige der Hostaktivierungs-APIs veraltet. In-Prozess-Side-by-Side-Ausführungseigenschaften ermöglichen es einer Anwendung, mehrere Versionen des .NET Frameworks im gleichen Prozess zu laden und zu starten. Sie können beispielsweise Anwendungen ausführen, die Add-Ins (oder Komponenten) laden, die auf .NET Framework 2.0 SP1 und Add-Ins basieren, die auf .NET Framework 4 im selben Prozess basieren. Ältere Komponenten verwenden weiterhin die ältere .NET Framework-Version, und neue Komponenten verwenden die neue .NET Framework-Version. | Verwenden Sie die in In-Process Parallele Ausführung beschriebenen Konfigurationen. |
Neues Sicherheitsmodell | Die Codezugriffssicherheitsrichtlinie (Code Access Security, CAS) wurde deaktiviert und durch ein vereinfachtes Modell ersetzt, wie in Sicherheitsänderungen in .NET Framework 4 beschrieben. | Änderungen können erforderlich sein, wenn Sie von CAS in Ihren Anwendungen abhängig sind. Weitere Informationen finden Sie unter Kompatibilität und Migration von Codezugriffsrichtlinien. |
Datum und Uhrzeit
Namespace: System
Assembly: mscorlib (in „mscorlib.dll“)
Merkmal | Unterschiede von 3.5 SP1 | Empfohlene Änderungen |
---|---|---|
Sommerersparnis | Um mit der Systemuhr übereinzustimmen, verwenden Zeiteigenschaften (wie z. B. Local und Now) jetzt Betriebssystemregeln anstelle anderer .NET Framework-Daten für Sommerzeitvorgänge. | Keiner. |
Formatieren von Zeichenfolgen | Um kultursensitive Formatierungen zu unterstützen, umfasst die TimeSpan Struktur neue Überladungen der ToString , Parse und TryParse Methoden sowie neue ParseExact und TryParseExact Methoden. |
Keiner. |
Globalisierung
Eine Liste der neuen neutralen und spezifischen Kulturen finden Sie unter What's New in Globalization and Localization.
Namespace: System.Globalization
Assembly: mscorlib (in „mscorlib.dll“)
Merkmal | Unterschiede von 3.5 SP1 | Empfohlene Änderungen |
---|---|---|
Kulturnamen | Die folgenden Namensänderungen wirken sich auf die deutschen, Divehi- und afrikanischen Kulturen aus: * CurrencyEnglishName: Der Währungsname für die deutsche (Schweiz) (de-CH) Kultur hat sich von "sFr." in "Fr." geändert. * LongDatePattern: Das lange Datumsmuster für die Divehi (Malediven) (dv-MV) Kultur hat sich von "dd/MMMM/yyyy" in "tt/MM/yyyy" geändert. * PMDesignator: Der PM-Kennzeichner des Gebietsschemas „Afrikaans (Südafrika)“ wurde von „nm“ in „PM“ geändert. |
Beachten Sie die Namensänderungen für Kulturen. |
LCID-Parameter | Damit das erwartete Verhalten in den Einstellungen des Automatisierungsserver auftritt, übergibt die CLR die aktuelle Kultur für den LCID -Parameter nicht mehr an nicht verwaltete COM-basierte Anwendungen. Stattdessen wird 1033 (en-US) für die Kultur übergeben. |
Es sind keine Änderungen erforderlich, außer für systemeigene Anwendungen, die eine bestimmte Kultur erfordern. |
Veraltete Kulturtypen | Die Kulturtypen CultureTypes und CultureTypes sind jetzt veraltet. Aus Gründen der Abwärtskompatibilität werden jetzt neutrale und bestimmte Kulturen, die im vorherigen .NET Framework enthalten waren, zurückgegeben, und CultureTypes gibt nun eine leere Liste zurück. |
Verwenden Sie andere Werte der CultureTypes Enumeration. |
Abrufen eines Gebietsschemas | Ab Windows 7 ruft .NET Framework 4 Kulturinformationen aus dem Betriebssystem ab, anstatt die Daten selbst zu speichern. Darüber hinaus synchronisiert .NET Framework die Sortierung und Groß-/Kleinschreibung von Daten mit Windows. | Keiner. |
Unicode 5.1-Standards | .NET Framework unterstützt jetzt alle Unicode 5.1-Zeichen – eine Ergänzung von ca. 1400 Zeichen. Zu den zusätzlichen Zeichen gehören neue Symbole, Pfeile, diakritische Zeichen, Satzzeichen, mathematische Symbole, CJK-Striche und Ideographen, zusätzliche Malayalam- und Telugu-Numerische Zeichen sowie verschiedene Myanmar-, Latein-, Arabisch-, Griechisch-, Mongolische und kyrillische Zeichen. Die folgenden neuen Skripts werden mit Unicode 5.1 unterstützt: Sundanese, Lepcha, Ol Chiki, Vai, Saurashtra, Kayah Li, Rejang, Gurmukhi, Odia, Tamil, Telugu und Malayalam Zeichen und Cham. | Keiner. |
Ausnahmen
Namespaces: System, System.Runtime.ExceptionServices
Assembly: mscorlib (in „mscorlib.dll“)
Merkmal | Unterschiede von 3.5 SP1 | Empfohlene Änderungen |
---|---|---|
Ausnahmen für beschädigten Prozessstatus | Die CLR liefert keine Ausnahmen mehr für beschädigten Prozessstatus an Ausnahmehandler in verwaltetem Code. | Diese Ausnahmen deuten darauf hin, dass der Status eines Prozesses beeinträchtigt wurde. Wir empfehlen Ihnen nicht, Ihre Anwendung in diesem Zustand auszuführen. Weitere Informationen finden Sie unter HandleProcessCorruptedStateExceptionsAttribute und im Eintrag Handling Corrupted State Exceptions (Behandeln beschädigter Statusausnahmen) im MSDN-Magazin. |
Ausnahmen der Ausführungs-Engine | ExecutionEngineException ist jetzt veraltet, da der Prozess aufgrund einer abfangbaren Ausnahme weiterhin ausgeführt wird. Diese Änderung verbessert die Vorhersagbarkeit und Zuverlässigkeit in der Laufzeit. | Verwenden Sie eine InvalidOperationException , um die Bedingung zu signalisieren. |
Spiegelung
Namespace: System.Reflection
Assembly: mscorlib (in „mscorlib.dll“)
Merkmal | Unterschiede von 3.5 SP1 | Empfohlene Änderungen |
---|---|---|
Assembly-Hashalgorithmen | Die HashAlgorithm Eigenschaft gibt jetzt zurück AssemblyHashAlgorithm, da die Laufzeit den Hashalgorithmus der Assembly, auf die verwiesen wird, nicht kennt, wenn die Assembly nicht geladen wird. (Dies bezieht sich auf die Verwendung der Eigenschaft für eine Assembly, auf die verwiesen wird, z.B. die von der GetReferencedAssemblies-Methode zurückgegebene.) | Keiner. |
Laden von Assemblys | Um das redundante Laden von Assemblys zu verhindern und virtuellen Adressraum zu sparen, lädt die CLR jetzt Assemblys nur mit der Win32-Funktion MapViewOfFile . Sie ruft die LoadLibrary Funktion nicht mehr auf.Diese Änderung wirkt sich auf folgende Arten auf Diagnoseanwendungen aus: * A ProcessModuleCollection enthält keine Module mehr aus einer Klassenbibliothek (.dll Datei), die durch einen Aufruf von Process.GetCurrentProcess().Modules erhalten wurden.* Win32-Anwendungen, die die EnumProcessModules -Funktion verwenden, werden nicht alle verwalteten Module sehen. |
Keiner. |
Deklarieren des Typs | Die DeclaringType Eigenschaft gibt jetzt ordnungsgemäß NULL zurück, wenn der Typ keinen deklarierenden Typ aufweist. | Keiner. |
Delegierte | Jetzt löst ein Delegat ein ArgumentNullException aus, anstatt ein NullReferenceException, wenn ein Nullwert an den Konstruktor des Delegaten übergeben wird. | Stellen Sie sicher, dass jede Ausnahmebehandlung ArgumentNullException abfängt. |
Standortänderung des globalen Assemblycaches | Für .NET Framework 4-Assemblys wurde der globale Assemblycache aus dem Windows-Verzeichnis (%WINDIR%) in das Unterverzeichnis Microsoft.Net (%WINDIR%\Microsoft.Net) verschoben. Assemblys aus früheren Versionen bleiben im älteren Verzeichnis. Die nicht verwaltete ASM_CACHE_FLAGS-Enumeration enthält das neue ASM_CACHE_ROOT_EX -Flag. Dieses Flag ruft den Cachespeicherort für .NET Framework 4-Assemblys ab, die von der GetCachePath-Funktion abgerufen werden können. |
Keine, vorausgesetzt, dass Anwendungen keine expliziten Pfade zu Assemblys verwenden, was keine empfohlene Vorgehensweise ist. |
Tool für den globalen Assemblycache | Das Gacutil.exe (Global Assembly Cache Tool) unterstützt den Shell-Plug-In-Viewer nicht mehr. | Keiner. |
Interoperabilität
Namespace: System.Runtime.InteropServices
Assembly: mscorlib (in „mscorlib.dll“)
Merkmal | Unterschiede von 3.5 SP1 | Empfohlene Änderungen |
---|---|---|
Pufferlänge (nicht verwaltete API) | Um Speicher zu sparen, wurde die Funktionalität für den pBufferLengthOffset Parameter der ICorProfilerInfo2::GetStringLayout-Methode geändert, um an den pStringLengthOffset Parameter anzupassen. Beide Parameter zeigen jetzt auf die Offsetposition der Länge der Zeichenfolge. Die Pufferlänge wurde aus der Darstellung der Zeichenfolgenklasse entfernt. |
Entfernen Sie alle Abhängigkeiten von der Pufferlänge. |
JIT-Debugging | Um die Registrierung für das Just-in-Time-Debugging (JIT) zu vereinfachen, verwendet der .NET Framework-Debugger jetzt nur den AeDebug-Registrierungsschlüssel, der das JIT-Debuggingverhalten für systemeigenen Code steuert. Diese Änderung führt zu folgenden Ergebnissen: * Sie können nicht mehr zwei verschiedene Debugger für verwalteten und systemeigenen Code registrieren. * Sie können den Debugger nicht mehr automatisch für einen nicht interaktiven Prozess starten, aber Sie können den Benutzer zur Eingabe eines interaktiven Prozesses auffordern. * Sie werden nicht mehr benachrichtigt, wenn der Debugger nicht gestartet werden kann oder wenn kein registrierter Debugger gestartet werden soll. * Richtlinien für das automatische Starten, die von der Interaktivität der Anwendung abhängen, werden nicht mehr unterstützt. |
Passen Sie Debuggingvorgänge nach Bedarf an. |
Plattformaufruf | Um die Leistung in der Interoperabilität mit nicht verwaltetem Code zu verbessern, führen falsche Aufrufkonventionen in einer Plattformaufruf jetzt dazu, dass die Anwendung fehlschlägt. In früheren Versionen behoben hat die Marshalling-Ebene diese Fehler im Stapel gelöst. | Wenn Sie Ihre Anwendungen in Microsoft Visual Studio debuggen, werden Sie auf diese Fehler aufmerksam, damit Sie sie beheben können. Wenn Sie Binärdateien haben, die nicht aktualisiert werden können, können Sie das <NetFx40_PInvokeStackResilience-Element> in die Konfigurationsdatei Ihrer Anwendung aufnehmen, um Aufruf-Fehler wie in früheren Versionen zu beheben. Dies kann sich jedoch auf die Leistung Ihrer Anwendung auswirken. |
Entfernte Schnittstellen (nicht verwaltete API) | Um Entwicklerverwechslungen zu vermeiden, wurden die folgenden Schnittstellen entfernt, da sie keine nützlichen Laufzeitszenarien bereitstellten und die CLR keine Implementierungen bereitstellt oder akzeptierte: * INativeImageINativeImageDependency * INativeImageInstallInfo * INativeImageEvaluate * INativeImageConverter * ICorModule * IMetaDataConverter |
Keiner. |
Daten
In diesem Abschnitt werden Migrationsprobleme bei der Verwendung von Datasets und SQL-Clients, entity Framework, LINQ to SQL und WCF Data Servers (früher als ADO.NET Data Services bezeichnet) beschrieben.
DataSet und SQL-Client
In der folgenden Tabelle werden Verbesserungen der Features beschrieben, die zuvor Einschränkungen oder andere Probleme hatten.
Namespaces: System.Data, System.Data.Objects.DataClassesSystem.Data.SqlClient
Assemblys: System.Data (in „System.Data.dll“), System.Data.Entity (in „System.Data.Entity.dll“)
Merkmal | Unterschiede von 3.5 SP1 |
---|---|
POCO-Szenarien | Die IRelatedEnd Schnittstelle verfügt über neue Methoden, um die Benutzerfreundlichkeit in PoCO-Szenarien (Plain Old CLR Object) zu verbessern. Diese neuen Methoden verwenden eine Object Anstelle einer IEntityWithRelationships Entität als Parameter. |
Bearbeiten von Zeilen | Die IndexOf Methode, wie von der DataView Klasse implementiert, gibt nun korrekt den Wert einer Zeile zurück, die bearbeitet wird, anstatt -1 zurückzugeben. |
Ereignisse | Das PropertyChanged Ereignis wird jetzt ausgelöst, wenn sich eine Zeile in einem geänderten Zustand befindet und die RejectChanges Methode aufgerufen wird. Diese Änderung erleichtert das Erstellen von UI-Steuerelementen, die den Inhalt eines DataSet Objekts verfügbar machen. |
Ausnahmen | Die Prepare-Methode wirft nun ein InvalidOperationException, wenn eine Verbindung nicht festgelegt oder nicht geöffnet ist, anstatt ein NullReferenceException. |
Zuordnen von Ansichten | Zuordnungsfehler in der Abfrageansicht werden jetzt zur Entwurfszeit abgefangen, statt zur Laufzeit eine NullReferenceException auszulösen. Die Zuordnungsüberprüfung erfasst nun den Fehler, bei dem zwei Zuordnungssätze im konzeptionellen Schema (CSDL) derselben Spalte zugeordnet werden. |
Transaktionen | Wenn eine Anwendung versucht, eine Anweisung für eine Verbindung auszuführen, nachdem eine Transaktion abgeschlossen wurde (einschließlich Abbruch oder Rollback zurück), wird jetzt eine InvalidOperationException ausgelöst. In früheren Versionen wurde keine Ausnahme ausgelöst, und Sie können zusätzliche Befehle auch dann ausführen, wenn eine Transaktion abgebrochen wurde. |
Entity Framework
In der folgenden Tabelle werden Verbesserungen der Features beschrieben, die zuvor Einschränkungen oder andere Probleme hatten.
Namespaces: System.Data, System.Data.ObjectsSystem.Data.Objects.DataClasses
Assemblys: System.Data.Entity (in „System.Data.Entity.dll“)
Merkmal | Unterschiede von 3.5 SP1 |
---|---|
Entitätsobjekte | Es gibt nun die Parität zwischen der Detach Methode und dem Status des Entitätsobjekts, wenn die SaveChanges Methode aufgerufen wird. Diese verbesserte Konsistenz verhindert, dass unerwartete Ausnahmen ausgelöst werden. |
Entität SQL | Regeln wurden für Bezeichnerauflösungen in Entity SQL verbessert. Der Entity SQL-Parser hat die Logik zum Auflösen von mehrteiligen Bezeichnern verbessert. |
Strukturanmerkungen | Das Entity Framework erkennt jetzt strukturelle Anmerkungen. |
Fragen | Die folgenden Verbesserungen wurden in Abfragen vorgenommen: * Eine GroupBy Abfrage, die einen NULL-Schlüssel über eine leere Auflistung verwendet, gibt keine Zeilen zurück, unabhängig davon, ob in der Abfrage zusätzliche Auswahlen vorhanden sind.* Generierte SQL in LINQ- und Entity-SQL Abfragen behandeln Zeichenfolgenparameter standardmäßig als Nicht-Unicode-Werte. |
LINQ to SQL
In der folgenden Tabelle werden Verbesserungen der Features beschrieben, die zuvor Einschränkungen oder andere Probleme hatten.
Namespace: System.Data.Linq
Assembly: System.Data.Linq (in „System.Data.Linq.dll“)
Merkmal | Unterschiede von 3.5 SP1 |
---|---|
Ereignisse | Eine EntitySet<TEntity>-Sammlung löst jetzt das Ereignis ListChanged für die Vorgänge „Hinzufügen“ und „Entfernen“ aus, wenn EntitySet<TEntity> entladen und die Sammlung geladen wird. |
Fragen |
Skip(0) wird in LINQ to SQL-Abfragen nicht mehr ignoriert. Daher verhalten sich Abfragen, die diese Methode aufweisen, möglicherweise anders. In einigen Fällen ist eine OrderBy Klausel erforderlich, beispielsweise mit Skip(0) , und die Abfrage löst jetzt eine NotSupportedException Ausnahme aus, wenn die OrderBy Klausel nicht enthalten war. |
WCF Data Services
In der folgenden Tabelle werden Verbesserungen der Features beschrieben, die zuvor Einschränkungen oder andere Probleme hatten.
Namespaces: System.Data.Services, System.Data.Services.Client, System.Data.Services.CommonSystem.Data.Services.Providers
Assemblys: System.Data.Services (in „System.Data.Services.dll“), System.Data.Services.Client (in „System.Data.Services.Client.dll“)
Merkmal | Unterschiede von 3.5 SP1 |
---|---|
Gebündelter Binärinhalt | WCF Data Services unterstützt jetzt Batch-Binärinhalte in Anforderungen und Antworten. |
Change-Interceptors | Change-Interceptors werden nun für eine DELETE-Anforderung ausgeführt. Ein Änderungs-Interceptor ist eine Methode, die jedes Mal ausgeführt wird, wenn eine Anforderung vom Server empfangen wird, um eine Entität im Entitätssatz zu ändern. Sie wird ausgeführt, bevor die eingehende Anforderung ausgeführt wird. Der Änderungs-Interceptor bietet Zugriff auf die Entität, die geändert wird, und den Vorgang, der für sie ausgeführt wird. |
Ausnahmen | Die folgenden Bedingungen lösen nun nützlichere Ausnahmen statt einer NullReferenceException aus: * Eine TimeoutException, wenn beim Aufruf eines Datendiensts ein Timeout eintritt. * Eine DataServiceRequestException, wenn eine ungültige Anforderung an einen Datendienst erfolgt. In Ihren Anwendungen sollten Sie die Ausnahmebehandlung ändern, um die neuen Ausnahmen abzufangen. |
Kopfzeilen | Die folgenden Verbesserungen wurden an Kopfzeilen vorgenommen: * WCF Data Services lehnt jetzt ordnungsgemäß einen eTag Header ab, der einen nicht angegebenen Wert aufweist.* WCF Data Services gibt jetzt einen Fehler zurück und führt die Anforderung für eine Löschanforderung an einen Link nicht aus, wenn sich ein if-* Header in der Anforderung befindet.* WCF Data Services gibt jetzt einen Fehler an den Client im Format (Atom, JSON) zurück, den der Client im Accept-Header angegeben hat. |
JSON-Reader | Der JavaScript Object Notation-Reader (JSON) gibt jetzt beim Lesen ordnungsgemäß einen Fehler zurück, wenn beim Verarbeiten von JSON-Nutzlasten, die an einen WCF Data Service gesendet wurden, ein einzelnes Escapezeichen, d. h. der umgekehrter Schrägstrich („\“) gelesen wird. |
Führt | Die folgenden Verbesserungen wurden an der MergeOption Enumeration vorgenommen: * Die Mergeoption MergeOption ändert als Ergebnis einer nachfolgenden Antwort von einem Datendienst nicht mehr die Entität auf dem Client. * Die MergeOption Option ist jetzt konsistent zwischen dynamischen SQL- und gespeicherten prozedurbasierten Updates. |
Anforderungen | Die OnStartProcessingRequest Methode wird nun aufgerufen, bevor eine Anforderung an Datendienste verarbeitet wird. Dadurch kann die Anforderung ordnungsgemäß für ServiceOperation Dienste funktionieren. |
Datenströme | WCF Data Services schließt den zugrunde liegenden Datenstrom nicht mehr für Lese- und Schreibvorgänge. |
Uris | Escapevorgänge des WCF Data Services-Clients für URIs wurde korrigiert. |
Windows Communication Foundation (WCF)
In der folgenden Tabelle werden Verbesserungen der Features beschrieben, die zuvor Einschränkungen oder andere Probleme hatten.
Merkmal | Unterschiede von 3.5 SP1 |
---|---|
Konfigurationsdateien | Um die Vererbung von Verhaltensweisen über die Konfigurationsdateihierarchie zu ermöglichen, unterstützt WCF jetzt das Zusammenführen über Konfigurationsdateien hinweg. Das Konfigurationsvererbungsmodell wurde jetzt erweitert, damit Benutzer Verhaltensweisen definieren können, die auf alle Dienste angewendet werden, die auf dem Computer ausgeführt werden. Verhaltensänderungen können auftreten, wenn Verhaltensweisen mit demselben Namen auf unterschiedlichen Ebenen der Hierarchie vorhanden sind. |
Diensthosting | Sie können das <serviceHostingEnvironment> Konfigurationselement nicht mehr auf Dienstebene angeben, indem Sie das Attribut allowDefinition="MachineToApplication" zur Elementdefinition hinzufügen.Die Angabe des <serviceHostingEnvironment> Elements auf Dienstebene ist technisch falsch und verursacht ein inkonsistentes Verhalten. |
Windows Presentation Foundation (WPF)
Anträge
Namespaces: System.Windows, System.Windows.Controls
Assemblys: PresentationFramework (in „PresentationFramework.dll“)
Merkmal | Unterschiede von 3.5 SP1 | Empfohlene Änderungen |
---|---|---|
Ausnahmenbehandlung | Damit Fehler früher erkannt werden können, löst WPF eine TargetInvocationException und legt die InnerException-Eigenschaft so fest, dass sie auf kritische Ausnahmen wie NullReferenceException, OutOfMemoryException, StackOverflowException und SecurityException verweist, anstatt die ursprüngliche Ausnahme abzufangen. | Keiner. |
Verknüpfte Ressourcen | Um die Verknüpfung zu vereinfachen, verwenden Ressourcendateien (z. B. Bilder), die sich an einem anderen Speicherort als der Ordnerstruktur des Projekts befinden, den vollständigen Pfad der Ressourcendatei anstelle des Dateinamens als Ressourcen-ID, wenn die Anwendung erstellt wird. So kann die Anwendung die Dateien zur Laufzeit finden. | Keiner. |
Teilweise vertrauenswürdige Anwendungen | Aus Sicherheitsgründen werfen Windows-basierte Anwendungen, die mit eingeschränktem Vertrauen ausgeführt werden und ein WebBrowser-Steuerelement oder ein Frame-Steuerelement enthalten, das HTML umfasst, einen SecurityException, wenn das Steuerelement erstellt wird. Browseranwendungen lösen eine Ausnahme aus und zeigen eine Meldung an, wenn alle folgenden Bedingungen erfüllt sind: * Die Anwendung wird in Firefox ausgeführt. * Die teilweise vertrauenswürdige Anwendung wird in der Internetzone von nicht vertrauenswürdigen Standorten ausgeführt. * Die Anwendung enthält ein WebBrowser Steuerelement oder ein Frame Steuerelement, das HTML enthält. Anwendungen, die von vertrauenswürdigen Websites oder aus der Intranetzone ausgeführt werden, sind nicht betroffen. |
In Ihren Browseranwendungen können Sie diese Änderung vereinfachen, indem Sie eine der folgenden Aktionen ausführen: * Führen Sie die Browseranwendung im vollen Vertrauensmodus aus. * Lassen Sie Kunden die Website der Anwendung zur Zone vertrauenswürdiger Websites hinzufügen. |
Ressourcenwörterbücher | Um Ressourcenwörterbücher auf Themenebene zu verbessern und zu verhindern, dass sie sich ändern, werden einfrierbare Ressourcen, die in einem Ressourcenwörterbuch definiert und in ein Wörterbuch auf Themenebene zusammengeführt werden, jetzt immer als eingefroren markiert und sind unveränderlich. Dies ist das erwartete Verhalten für einfrierbare Ressourcen. | Anwendungen, die eine Ressource ändern, die in einem auf Themenebene zusammengeführten Wörterbuch definiert ist, sollten die Ressource klonen und dann die Kopie ändern. Alternativ haben Sie die Möglichkeit, die Ressource als x:Shared="false" zu kennzeichnen, damit ResourceDictionary bei jeder Abfrage der Ressource eine neue Kopie erstellt. |
Windows 7 | Damit WPF-Anwendungen unter Windows 7 besser funktionieren, wurden die folgenden Verbesserungen vorgenommen, um das Verhalten eines Fensters zu korrigieren: * Dock- und Gestikzustände funktionieren nun basierend auf Benutzerinteraktionen erwartungsgemäß. * Die Taskleistenbefehle "Überlappende Fenster anzeigen", "Fenster gestapelt anzeigen" und " Fenster nebeneinander anzeigen " weisen nun das richtige Verhalten auf und aktualisieren die entsprechenden Eigenschaften. * Die Eigenschaften Top , Left , Width und Height für ein maximiertes oder minimiertes Fenster enthalten nun die richtige Wiederherstellungsposition des Fensters anstelle anderer Werte, je nach Monitor. |
Keiner. |
Windows-Stil und Transparenz | Ein InvalidOperationException wird ausgelöst, wenn Sie versuchen, WindowStyle auf einen anderen Wert als WindowStyle festzulegen, während AllowsTransparencytrue und WindowStateWindowState ist. |
Wenn Sie WindowStyle ändern müssen, wenn AllowsTransparencytrue ist, können Sie die Win32-Funktion SetWindowLongPtr aufrufen. |
XPS-Viewer | WPF enthält nicht das Microsoft XML Paper Specification Essentials Pack (XPSEP). XPSEP ist in Windows 7 und Windows Vista enthalten. Auf einem Computer, auf dem Windows XP ohne .NET Framework 3.5 SP1 installiert ist, basiert das Drucken mit einer anderen WPF-API, als mit denen in PrintDialog, auf WINSPOOL. Einige Druckerfunktionen werden nicht gemeldet, und einige Druckereinstellungen werden beim Drucken nicht angewendet. |
Installieren Sie bei Bedarf das Microsoft XML Paper Specification Essentials Pack. |
Bedienelemente
Namespaces: System.Windows, System.Windows.Controls, System.Windows.DataSystem.Windows.Input
Assemblys: PresentationFramework (in „PresentationFramework.dll“), PresentationCore (in „PresentationCore.dll“), WindowsBase (in „WindowsBase.dll“)
Merkmal | Unterschiede von 3.5 SP1 | Empfohlene Änderungen |
---|---|---|
Dialogfelder | Um die Zuverlässigkeit zu verbessern, wird die ShowDialog Methode für denselben Thread aufgerufen, der das FileDialog Steuerelement erstellt hat. | Achten Sie darauf, ein FileDialog Steuerelement zu erstellen und die ShowDialog Methode im selben Thread aufzurufen. |
Schwebende Fenster | Um die Logik für die Fokuswiederherstellung zu beheben, die fälschlicherweise kontinuierlich ein unverankertes Fenster reaktiviert (und es wie ein modales Dialogfeld anzeigt), wird sie jetzt an der Wiederherstellung gehindert, wenn der Kandidat kein untergeordnetes Element des Fensters ist. | Keiner. |
Elemente in Sammlungen | Wenn ein Element zu einer zugrunde liegenden Auflistung verschoben oder hinzugefügt wird, wird es in der CollectionView an derselben relativen Position angezeigt, wenn die CollectionView nicht sortiert ist. Dies ermöglicht die Konsistenz zwischen der Position des Elements in der Auflistung und in der zugeordneten CollectionView. | Verwenden Sie die ContainerFromItem- oder IndexOf-Methode, um den Speicherort eines Elements in einem CollectionView zu finden, anstatt sich auf eine feste Position eines Elements zu verlassen. |
Layouts | Um unnötige Neulayouts zu vermeiden, führt die Änderung von ShowsNavigationUI nicht mehr zur Ungültigkeit des Layouts oder zu einem zusätzlichen Layoutdurchlauf. | Wenn Sie davon ausgehen, dass Änderungen an ShowsNavigationUI zu einem weiteren Layoutdurchlauf führen, rufen Sie nach dem Festlegen der Eigenschaft InvalidateVisual auf. |
Menüs | Um ClearType-Text in Menü-Popups zu aktivieren, wurden Änderungen an der ControlTemplate Klasse und an dem MenuItem Steuerelement und anderen Steuerelementen vorgenommen. | Anwendungen sollten sich nicht auf die visuelle Struktur von Steuerelementvorlagen verlassen. Nur benannte Teile eines ControlTemplate Vertrags sind Teil des öffentlichen Vertrags. Wenn eine Anwendung ein bestimmtes Objekt in einem ControlTemplate finden muss, durchsuchen Sie den visuellen Baum nach einem bestimmten Typ, anstatt sich auf eine feste Position eines Objekts im Baum zu verlassen. |
Anleitung | Wenn ein Frame direkt zu einem Speicherort navigiert, entspricht die Eigenschaft IsNavigationInitiator nach der ursprünglichen Navigation true . Diese Änderung verhindert, dass während startszenarien zusätzliche Ereignisse ausgelöst werden. |
Keiner. |
Popups | Der CustomPopupPlacementCallback Delegat kann jetzt während eines Layoutdurchlaufs mehrmals aufgerufen werden, statt nur einmal. | Wenn Ihr CustomPopupPlacementCallback Delegat die Position eines Popup basierend auf ihrer vorherigen Position berechnet, berechnen Sie die Position nur dann neu, wenn sich die Werte der popupSize , targetSize oder offset Parameter ändern. |
Eigenschaftswerte | Mit der SetCurrentValue Methode können Sie nun eine Eigenschaft auf einen effektiven Wert festlegen, obwohl sie weiterhin bindungs-, stil- oder trigger-Werte berücksichtigt, die sich auf die Eigenschaft auswirken. | Steuerelementautoren sollten SetCurrentValue verwenden, wann immer sich der Eigenschaftswert als Nebeneffekt einer anderen Aktion, einschließlich der Benutzermanipulation, ändert. |
Textfelder | Aus Sicherheitsgründen schlagen die Copy und Cut Methoden stillschweigend fehl, wenn sie im teilweisen Vertrauensmodus aufgerufen werden. Darüber hinaus wird die programmgesteuerte Ausführung der Eigenschaften Copy oder Cut für ein Steuerelement, das von TextBoxBase erbt, bei partieller Vertrauenswürdigkeit blockiert. Benutzerinitiierte Befehle zum Kopieren und Ausschneiden, z. B. das Klicken auf eine Schaltfläche, deren Command Eigenschaft an einen dieser Befehle gebunden ist, funktionieren jedoch. Die Ausführung standardmäßiger Kopier- und Ausschneidebefehle über Tastenkombinationen und das Kontextmenü funktioniert weiterhin bei partieller Vertrauenswürdigkeit wie zuvor. |
Binden Sie den Copy oder Cut Befehl an eine vom Benutzer initiierte Aktion, z. B. das Klicken auf eine Schaltfläche. |
Graphik
Namespaces: System.Windows, , System.Windows.DataSystem.Windows.Controls, , System.Windows.InputSystem.Windows.Media.Effects
Assemblys: PresentationFramework (in „PresentationFramework.dll“), PresentationCore (in „PresentationCore.dll“), WindowsBase (in „WindowsBase.dll“)
Merkmal | Unterschiede von 3.5 SP1 | Empfohlene Änderungen |
---|---|---|
Bitmapeffekte | Um die Leistung zu verbessern, sind die BitmapEffect Klassen und die Klassen, die von der BitmapEffect Klasse erben, obwohl sie noch vorhanden sind, deaktiviert. Der Effekt wird mithilfe der hardwarebeschleunigten Renderingpipeline gerendert, wenn die folgenden Bedingungen erfüllt sind: * Die Anwendung verwendet entweder ein DropShadowBitmapEffect oder ein BlurBitmapEffect, dessen Radius-Eigenschaft auf unter 100 DIU eingestellt ist. * Die Grafikkarte auf dem Computer, auf dem die Anwendung ausgeführt wird, unterstützt den Pixelshader 2.0. Wenn diese Bedingungen nicht erfüllt sind, hat ein BitmapEffect Objekt keine Auswirkung. Außerdem erzeugt Visual Studio eine Compilerwarnung, wenn das BitmapEffect Objekt oder eine Unterklasse auftritt. Die PushEffect Methode ist als veraltet markiert. |
Beenden Sie die Verwendung der älteren Klassen BitmapEffect und der davon abgeleiteten Klassen, und verwenden Sie stattdessen die neuen Klassen, die von Effect abgeleitet sind: BlurEffect, DropShadowEffect und ShaderEffect. Sie können auch eigene Effekte erstellen, indem Sie von der ShaderEffect Klasse erben. |
Bitmap-Rahmen | Die geklonten BitmapFrame Objekte empfangen jetzt die DownloadProgress, DownloadCompleted und DownloadFailed Ereignisse. Dadurch funktionieren Images, die aus dem Web heruntergeladen und auf das Image-Steuerelement angewendet werden, über einen Style ordnungsgemäß. Eine Verhaltensänderung tritt nur ein, wenn alle folgenden Aussagen zutreffen: * Sie abonnieren das DownloadProgress, DownloadCompleted oder DownloadFailed Ereignis. * Die Quelle von BitmapFrame stammt aus dem Web. * Der BitmapFrame wird geklont, während der Download noch läuft. |
Überprüfen Sie den Absender im Ereignishandler, und ergreifen Sie nur Maßnahmen, wenn der Absender das Original BitmapFrameist. |
Decodieren von Bildern | Um zu verhindern, dass ein IOException Bild nicht behandelt wird, wenn Bilder möglicherweise nicht decodiert werden, löst die BitmapSource Klasse das DecodeFailed Ereignis aus, wenn es kein Bild decodiert. | Entfernen Sie alle Ausnahmebehandlungen für IOException, und verwenden Sie das DecodeFailed Ereignis, um auf Decodierungsfehler zu überprüfen. |
Eingabe
Namespaces: System.Windows, System.Windows.Controls, System.Windows.DataSystem.Windows.Input
Assemblys: PresentationFramework (in „PresentationFramework.dll“), PresentationCore (in „PresentationCore.dll“), WindowsBase (in „WindowsBase.dll“)
Merkmal | Unterschiede von 3.5 SP1 | Empfohlene Änderungen |
---|---|---|
Binden von Befehlsinstanzen | Um einen Mechanismus zum Binden von View-Model-basierten Befehlsinstanzen an Ansichtsbasierte Eingabegesten bereitzustellen, erbt die InputBinding Klasse jetzt von Freezable statt von DependencyObject. Die folgenden Eigenschaften sind jetzt Abhängigkeitseigenschaften: * Command * CommandParameter * CommandTarget Diese Änderung führt zu folgenden Ergebnissen: * Ein InputBinding-Objekt wird jetzt eingefroren, wenn es registriert wird, anstatt veränderbar zu bleiben. * Sie können aufgrund der Einschränkungen der InputBinding Klasse nicht auf Objekte auf Instanzebene DependencyObject von mehreren Threads zugreifen. * Sie können Eingabebindungen auf Klassenebene nach ihrer Registrierung aufgrund der Einschränkungen der Freezable Klasse nicht ändern. * Sie können keine Eingabebindungen für Befehlsinstanzen angeben, die in einem Ansichtsmodell erstellt werden. |
Erstellen Sie separate Instanzen einer InputBinding Klasse in separaten Threads, wenn Bindungen änderbar sein sollen, oder frieren Sie sie andernfalls ein. Mutieren Sie kein statisches InputBinding auf Klassenebene, nachdem es registriert wurde. |
Browseranwendungen | WPF-Browseranwendungen (. XBAP) verarbeiten jetzt wichtige Ereignisse wie eigenständige WPF-Anwendungen, sodass Objekte Routingschlüsselereignisse in der richtigen Reihenfolge empfangen. | Keiner. |
Tote Tastenkombinationen | WPF verschleiert tote Tasten, die kein sichtbares Zeichen erzeugen, sondern stattdessen angibt, dass der Schlüssel mit dem nächsten Buchstabenschlüssel kombiniert werden soll, um ein Zeichen zu erzeugen. Die Schlüsseleingabeereignisse, z. B. das KeyDownEvent Ereignis, melden, wenn ein Schlüssel ein inaktiver Schlüssel ist, indem sie die Key Eigenschaft auf den Key Wert festlegen. Dies wird in der Regel erwartet, da Anwendungen normalerweise nicht auf Tastatureingaben reagieren möchten, die ein kombiniertes Zeichen erstellen. | Anwendungen, die erwarten, dass Schlüssel gelesen werden, die Teil kombinierter Zeichen waren, können den jetzt verschleierten Schlüssel mithilfe der DeadCharProcessedKey Eigenschaft abrufen. |
Focus-Manager | Wenn die Methode FocusManager.GetFocusedElement(DependencyObject) an ein Element übergeben wird, dessen angefügte IsFocusScope-Eigenschaft auf true festgelegt wurde, gibt die Methode ein Element zurück, das das letzte von der Tastatur fokussierte Element innerhalb des Fokusbereichs darstellt, und nur, wenn das zurückgegebene Element zu dem gleichen PresentationSource-Objekt gehört wie das Element, das an die Methode übergeben wird. |
Keiner. |
Benutzeroberflächenautomatisierung
Namespace: System.Windows, , System.Windows.Automation.Peers, System.Windows.ControlsSystem.Windows.Automation.Provider, , System.Windows.DataSystem.Windows.Input
Assemblys: PresentationFramework (in PresentationFramework.dll), PresentationCore (in PresentationCore.dll), UIAutomationProvider (in UIAutomationProvider.dll), WindowsBase (in WindowsBase.dll)
Merkmal | Unterschiede von 3.5 SP1 | Empfohlene Änderungen |
---|---|---|
Klassenhierarchie von Ansichten | Die TreeViewAutomationPeer Und TreeViewItemAutomationPeer Klassen erben von ItemsControlAutomationPeer anstelle von FrameworkElementAutomationPeer. | Wenn Sie von den TreeViewItemAutomationPeer Klassen erben und die GetChildrenCore Methode außer Kraft setzen, sollten Sie ein Objekt zurückgeben, das von der neuen TreeViewDataItemAutomationPeer Klasse erbt. |
Container außerhalb des Bildschirms | Um einen falschen Rückgabewert zu beheben, gibt die Methode IsOffscreenCore jetzt ordnungsgemäß false für Elementcontainer zurück, die aus der Ansicht gescrollt werden. Außerdem wird der Wert der Methode nicht von der Okklusion durch andere Fenster oder davon beeinflusst, ob das Element auf einem bestimmten Monitor sichtbar ist. |
Keiner. |
Menüs und untergeordnete Objekte | Um die Benutzeroberflächenautomatisierung von Menüs zu aktivieren, die andere untergeordnete Elemente als MenuItem Objekte enthalten, gibt die GetChildrenCore Methode jetzt das AutomationPeer Objekt eines untergeordneten UIElement Objekts anstelle eines MenuItemAutomationPeer Objekts zurück. | Keiner. |
Neue Schnittstellen und Assembly | Um neue Features für die Benutzeroberflächenautomatisierung zu aktivieren, wurden die folgenden Schnittstellen hinzugefügt: * IItemContainerProvider * ISynchronizedInputProvider * IVirtualizedItemProvider |
Jedes Projekt, das WPF-Automatisierungspeers erstellt, muss einen expliziten Verweis auf UIAutomationProvider.dllhinzufügen. |
Ziehpunkte | Die GetClassNameCore Methode gibt einen Wert anstelle von NULL zurück. Daher melden Steuerelemente wie GridSplitter, die von der Thumb-Klasse erben, einen Namen an die Benutzeroberflächenautomatisierung. | Keiner. |
Virtualisierte Elemente | Zur Verbesserung der Leistung gibt die GetChildrenCore-Methode nur die untergeordneten Objekte zurück, die tatsächlich in der visuellen Struktur enthalten sind, statt aller untergeordneten Objekte unabhängig vom Virtualisierungsort. | Verwenden Sie ItemContainerPattern, um über alle Elemente eines ItemsControlAutomationPeer zu iterieren. |
XAML
Namespaces: System.Windows, , System.Windows.DataSystem.Windows.Controls, , System.Windows.InputSystem.Windows.Markup
Assemblys: PresentationFramework (in „PresentationFramework.dll“), PresentationCore (in „PresentationCore.dll“), WindowsBase (in „WindowsBase.dll“)
Merkmal | Unterschiede von 3.5 SP1 | Empfohlene Änderungen |
---|---|---|
Markuperweiterung | WPF verwendet nun immer den Wert aus der ProvideValue Methode, anstatt das MarkupExtension Objekt in bestimmten Fällen zurückzugeben, wenn eine Markuperweiterung zum Festlegen einer Eigenschaft oder zum Erstellen eines Elements in einer Auflistung verwendet wird. Eine Markuperweiterung kann sich in einigen Fällen selbst zurückgeben. | Wenn Ihre Anwendung auf eine Ressource zugreift, die in früheren Versionen ein MarkupExtension Objekt zurückgegeben hat, sollten Sie auf das Objekt verweisen, das von ProvideValue zurückgegeben wird, anstatt auf das MarkupExtension Objekt. |
Analyseattribute | Attribute dürfen in XAML jetzt nur einen Punkt haben. Beispielsweise sind die folgenden gültig:<Button Background="Red"/> (keine Zeiträume)<Button Button.Background = "Red"/> (ein Punkt)Folgendes ist nicht mehr gültig: <Button Control.Button.Background = "Red"/> (mehr als eine Periode) |
Richtige XAML-Attribute mit mehr als einem Punkt |
XML
In den Zeilen in dieser Tabelle werden Verbesserungen der Features beschrieben, die zuvor Einschränkungen oder andere Probleme hatten.
Schemas und Transformationen
Namespaces: System.Xml.Linq, System.Xml.Schema, System.Xml.XPath
Assemblys: System.xml (in „System.Xml.dll“), System.Xml.Linq (in „System.Xml.Linq.dll“)
Merkmal | Unterschiede von 3.5 SP1 |
---|---|
Chameleon-Schemas | Um Datenbeschädigungen zu verhindern, werden Chamäleonschemas jetzt ordnungsgemäß geklont, wenn sie in mehreren Schemas enthalten sind. Chameleon-Schemas sind Schemas, die keinen Zielnamespace aufweisen und wenn sie in einem anderen XSD enthalten sind, übernehmen sie den Zielnamespace des Importschemas. Sie werden häufig verwendet, um allgemeine Typen in ein Schema einzuschließen. |
ID-Funktionen | Die XSLT-ID-Funktion gibt jetzt den richtigen Wert anstelle von NULL zurück, wenn ein XmlReader Objekt an einen XLST übergeben wird. Wenn der Benutzer ein XmlReader Objekt aus einer LINQ to XML-Klasse mithilfe der CreateReader Methode erstellt hat, und dieses XmlReader Objekt an eine XSLT übergeben wurde, lieferten alle Instanzen der id Funktion in der XSLT früher null zurück. Dies ist kein zulässiger Rückgabewert für die id Funktion. |
Namespace-Attribut | Um Datenbeschädigungen zu verhindern, gibt ein XPathNavigator Objekt jetzt den lokalen Namen des x:xmlns Attributs richtig zurück. |
Namespacedeklarationen | Ein XmlReader Objekt in einer Unterstruktur erstellt keine doppelten Namespacedeklarationen mehr innerhalb eines XML-Elements. |
Schemaüberprüfung | Um eine fehlerhafte Schemaüberprüfung zu verhindern, ermöglicht die XmlSchemaSet Klasse, dass XSD-Schemas ordnungsgemäß und konsistent kompiliert werden. Diese Schemas können andere Schemas enthalten; so kann A.xsd zum Beispiel B.xsd enthalten, das C.xsd enthalten kann. Das Kompilieren dieser Schemas führt dazu, dass der Graph mit den Abhängigkeiten durchsucht wird. |
Skriptfunktionen | Die funktionsverwendige Funktion gibt nicht mehr fälschlicherweise zurück false , wenn die Funktion tatsächlich verfügbar ist. |
Uris | Die Load Methode gibt nun den richtigen BaseURI in LINQ-Abfragen zurück. |
Validierung
Namespaces: System.Xml.Linq, System.Xml.Schema, System.Xml.XPath
Assemblys: System.xml (in „System.Xml.dll“), System.Xml.Linq (in „System.Xml.Linq.dll“)
Merkmal | Unterschiede von 3.5 SP1 |
---|---|
Namespace-Resolver | Die ReadContentAs Methode ignoriert den IXmlNamespaceResolver an ihn übergebenen Resolver nicht mehr. In früheren Versionen wurde der angegebene Namespace-Resolver ignoriert und XmlReader stattdessen verwendet. |
Leerraum | Um beim Erstellen eines Readers Datenverluste zu vermeiden, verwirft die Create-Methode keinen signifikanten Leerraum mehr. Die XML-Überprüfung erkennt den Modus für gemischte Inhalte, in dem Text mit XML-Markup kombiniert werden kann. Im gemischten Modus sind jeder Leerraum wichtig und muss gemeldet werden. |
Schreiben
Namespaces: System.Xml.Linq, System.Xml.Schema, System.Xml.XPath
Assemblys: System.xml (in „System.Xml.dll“), System.Xml.Linq (in „System.Xml.Linq.dll“)
Merkmal | Unterschiede von 3.5 SP1 |
---|---|
Entitätsreferenzen | Um Datenbeschädigungen zu verhindern, werden Entitätsverweise nicht mehr zweimal in XML-Attributen entitiert. Wenn der Benutzer versucht hat, eine Entität in ein xmlns Attribut oder in ein xml:lang oder xml:space Attribut mithilfe der WriteEntityRef Methode zu schreiben, wurde die Entität zweimal in der Ausgabe entitisiert, wodurch die Daten verfälscht wurden. |
Neue Zeilenbehandlung | Um Datenbeschädigung zu verhindern, berücksichtigen XmlWriter-Objekte nun die Option NewLineHandling. |