.NET Framework 4.6 (.NET 4.6)
Eintrag zuletzt aktualisiert am: 12.03.2020
Das .NET Framework 4.6 ist der direkte Nachfolger des aktuellen .NET Frameworks 4.5.2. Microsoft hatte im Rahmen der
CTP-Versionen von dem nächsten Visual Studio, das auch die Jahreszahl 2015 tragen wird, noch die Versionsnummer 4.5.3 verwendet.
4.6 drückt aber wesentlich besser die Unterschiede zum Vorgänger aus. Neben der
.NET Compiler Platform und RyuJit bietet
.NET 4.5 einige kleinere Erweiterungen in der
.NET Framework Class Library (
FCL), u.a. auch für
Windows Forms und WPF. Positiv von vielen Entwicklern wurden die unter dem Namen „The Roadmap for WPF“ [
http://blogs.msdn.com/b/dotnet/archive/2014/11/12/the-roadmap-for-wpf.aspx] angekündigten Neuerungen für das in den letzten Jahren eher vernachlässigte WPF aufgenommen. Die WPF-Roadmap enthält auch ein klares Bekenntnis von Microsoft zur Bedeutung des Desktop-UI-Frameworks im Ma
rkt sowie die Ankündigung neuer Features für das
Debugging und die Leistungsoptimierung von WPF-Anwendungen in
Visual Studio 2015.
Erscheinungstermin
erschienen am 20.7.2015
Installation
Versionsnummern
Bei der
Versionierung hat Microsoft sich wieder einmal etwas Neues überlegt: Vor
.NET 4.5 bekamen die einzelnen
DLLs eine Versionsnummer entsprechend der .NET Framework-Version, also z.B. 4.0.x. In
.NET 4.5, 4.5.1 und 4.5.2 hat Microsoft aber diese
DLL-Versionsnummern nur noch an der dritten Stelle geändert. So hatte
.NET 4.5.1 also
DLLs mit der Versionsnummer 4.0.30319.18408. Nun, in .NET 4.6, kehrt Microsoft zurück zu dem vernünftigen Weg, dass die
DLL-Versionsnummer auch die .NET Framework-Version widerspiegelt: Die
DLLs haben in .NET 4.6 die Versionsnummer 4.6.79.0. Allerdings liefert die statische Eigenschaft System.Environment.Version in .NET 4.6 weiterhin die unlogische Versionsnummer 4.0.30319.42000. Auch das Installationsverzeichnis (C:\Windows\Microsoft.NET\Framework64\v4.0.30319) enthält immer noch die Nummer 4.0. Microsoft dokumentiert, dass die Entwickler sich bei der Versionsfeststellung seit
.NET 4.5 nur auf den Registry-Schlüssel HKEY
LOCALMACHINE\SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Full\Release verlassen sollen [
https://msdn.microsoft.com/en-us/library/hh925568(v=vs.110).aspx].
Neuerungen in .NET Framework 4.6 gegenüber .NET Framework 4.5.2 im Bereich CLR
RyuJIT: Neuer 64-Bit-Just in Time-Compiler (bisher nicht für 32-Bit-Anwendungen!)
Assembly Loader: IL-Assemblies werden nun entladen aus RAM, wenn eine passende NGEN-Assembly geladen wird
Garbage Collector:
NoGCRegion
Neuerungen in .NET Framework 4.6 gegenüber .NET Framework 4.5.2 im Bereich Sprachsyntax
Modulare
.NET Compiler Platform "Rosyln" für
C# 6.0 (
CSharp 6.0) und
Visual Basic 2015
Neuerungen in der Sprachsyntax
C# 6.0
Neuerungen in der Sprachsyntax
Visual Basic 2015 (Visual Basic 14)
Neuerungen in .NET Framework 4.6 gegenüber .NET Framework 4.5.2 im Bereich ASP.NET:
- HTTP2
- Async Model Binding
- Roslyn CodeDOM Compilers
- Entity Framework 6-Unterstützung in Dynamic Data Framework, Entity Data Source Control + Universal Providers (Add-On seit 28.4.2014)
- Verbesserungen für High DPI (bei DomainUpDown, NumericUpDown, DataGridViewComboBoxColumn, DataGridViewColumn und ToolStripSplitButton)
Neuerungen in .NET Framework 4.6 gegenüber .NET Framework 4.5.2 im Bereich WPF:
- Nicht-rechteckige transparente Kind-Fenster sind möglich ab Windows 8.1
- Multi-DPI Cursors
- Verbesserungen für High DPI
- Verbesserte Touch Events
Neuerungen in .NET Framework 4.6 gegenüber .NET Framework 4.5.2 im Bereich Klassenbibliothek (Auswahl):
- Neue Klasse System.AppContext
- Neue Klasse System.Threading.AsyncLocal<T>
- CultureInfo und Task-Based Asynchronous Pattern (TAP): Neue Tasks bekommen die Kultur des Aufrufers
- Netzwerk: TCP Port Reuse in Windows 10
- CodePagesEncodingProvider
- WCF unterstützt nun SSL-Versionen TLS 1.1 + TLS 1.2 (zusätzlich zu SSL 3.0 + TLS 1.0)
- ADO.NET 4.6: Unterstützung für Always Encrypted in SQL Server 2016
- Verschlüsselung: Aktualisierung der RSA-Versclüsselung
Details zur .NET Klassenbibliothek 4.6
Die .NET-Klassenbibliothek bietet eine Reihe von Neuerungen an vielen Stellen.
ASP.NET für die
Webserverprogrammierung unterstützt asynchrones
Model Binding und – in Verbindung mit
Windows 10 und
Windows Server 2016 – auch die Version 2 von HTTP (
RFC 7540 vom Mai 2015). Zudem wurden jetzt einige bisher einzeln verfügbare Aktualisierungen von
ASP.NET zur Nutzung von Entity Framework Version 6.x in das .NET Framework integriert. Die bei .NET 4.6 mitgelieferte Entity Framework-Version ist aber weiterhin 4.0. Alle seitdem verfügbaren Aktualisierungen (aktuell ist Version 6.1.3) muss der Softwareentwickler separat auf
https://www.nuget.org/packages/EntityFramework beziehen. Die Datenzugriffsbasiskomponente
ADO.NET unterstützt nun die Ende-zu-Ende-Verschlüsselung von
Microsoft SQL Server 2016.
.NET 4.6 kann für ausgehende
TCP-Verbindungen das Port-Reuse-Feature von
Windows 10 nutzen. Die
Windows Communication Foundation (
WCF) unterstützt nun zusätzlich zu
Secure Socket Layer 3.0 und Transport Layer Security (
TLS) 1.0 auch
TLS 1.1 und 1.2. in Windows. Auch das RSA-Kryptosystem in .NET 4.6 wurde aktualisiert (siehe
http://blogs.msdn.com/b/dotnet/archive/2015/07/20/announcing-net-framework-4-6.aspx).
Hochauflösende Displays bereiten bislang in vielen .NET-Anwendungen Probleme. Microsoft hat dafür in .NET 4.6 sowohl für
Windows Forms als auch für die
Windows Presentation Foundation (WPF) einige Darstellungsfehler behoben. Die Klasse System.Windows.Input.Cursor unterstützt nun auch Cursor-Dateien mit mehreren Auflösungsvarianten. Auch darüber hinaus bietet die von manchen schon totgesagte WPF neue Funktionen, wie die Unterstützung transparenter nicht-rechteckiger Kind-Fenster (ab
Windows 8.1) sowie eine bessere Touch-Unterstützung. Microsoft hat zudem auch bereits weitere Pläne für die Zukunft von WPF verkündet [
http://blogs.msdn.com/b/dotnet/archive/2014/11/12/the-roadmap-for-wpf.aspx].
Einige der Neuerungen in der .NET-Klassenbibliothek 4.6 sind Vorbereitungen für die Plattformunabhängigkeit von
.NET Core 5.0. So bietet die Klasse System.DateTimeOffset nun Konvertierungsfunktionen zwischen Zeitangaben in Unix und Windows. Da es in .NET Core keine
Application Domains mehr gibt, existiert dort auch die Klasse System.
AppDomain nicht mehr. Als Ersatz für System.
AppDomain.CurrentDomain.BaseDirectory hat Microsoft System.AppContext.BaseDirectory eingeführt und die Klasse System.AppContext nun auch in .NET 4.6 verfügbar gemacht [
https://msdn.microsoft.com/en-us/library/system.appcontext(v=vs.110).aspx]. Außerdem kann man in dieser Klasse globale, Assembly- und Thread-übergreifende Einstellungen mit SetSwitch() und TryGetSwitch() ablegen, die jedoch stets nur vom Typ Boolean sein dürfen.
Das .NET Framework 4.6 enthält auch ein paar „Breaking Changes“, die dazu führen können, dass sich bestehende .NET-Anwendungen anders verhalten [
https://msdn.microsoft.com/en-us/library/dn833127(v=vs.110).aspx]. So verwenden neue Tasks beim Task-Based Asynchronous Pattern (
TAP) nicht mehr wie bisher die Kultureinstellungen der Windows-Systemeinstellungen, sondern die Kultur des Aufrufers [
https://msdn.microsoft.com/de-de/library/system.globalization.cultureinfo(v=vs.110).aspx].