Stichtag
.NET 8 und 9 sind ohne Support. .NET 10 und 11 enden am selben Tag.
Seit dem 10. November 2026 liefert Microsoft für .NET 8 und .NET 9 keine Sicherheitsupdates mehr. Jede neue Schwachstelle in der Runtime oder in ASP.NET Core bleibt in diesen Anwendungen offen. Für Systeme mit Kundendaten ist das ebenso eine Compliance-Frage wie eine technische.
Microsoft unterstützt STS-Versionen inzwischen zwei Jahre lang. Damit enden .NET 10 (LTS) und .NET 11 (STS) beide am 14. November 2028. Die alte Regel «in Produktion nur LTS» bringt diesmal keine zusätzliche Zeit. .NET 11 hat ein Jahr mehr Verbesserungen, .NET 10 ein Jahr mehr Patch-Historie. Das nächste LTS, .NET 12, wird für November 2027 erwartet.
| Version | Typ | Supportende |
|---|---|---|
| .NET 8 | LTS | Ohne Support seit 10. Nov. 2026 |
| .NET 9 | STS | Ohne Support seit 10. Nov. 2026 |
| .NET 10 | LTS | Support bis 14. Nov. 2028 |
| .NET 11 | STS | Support bis 14. Nov. 2028 |
Gewinn
Schneller, meist ohne den Code anzufassen
Der grösste Teil des Gewinns kommt allein durch das Kompilieren gegen .NET 11. Der JIT entfernt mehr Bounds Checks, devirtualisiert mehr Aufrufe und faltet mehr Konstanten. Microsofts Benchmarks und unsere eigenen Messungen zeigen, wo sich das summiert:
- schnellere async-Aufrufketten, die synchron abschliessen, mit Runtime Async (Microsoft-Benchmark). In .NET 11 noch eine Opt-in-Preview.
- 3x
- schneller im Split-Query-Benchmark von Microsoft, weil EF Core 11 unnötige Joins weglässt. In unserem eigenen Szenario waren es 9%.
- 29%
- weniger Zeit für
DateTime.Nowmit lokaler Zeitzone, von 34.5 ns auf 17.9 ns (unsere Messung). - 48%
- schnelleres Parsen von
GuidmitParse,TryParseund dem Konstruktor (unsere Messung). - 20%
Micro-Benchmarks sind nicht Ihre Anwendung. Vor und nach einem Upgrade messen wir die kritischen Pfade Ihres Systems mit BenchmarkDotNet und einem realistischen Lasttest. So steht am Ende eine Zahl und kein Versprechen.
Ausserdem dabei
- Kestrel verarbeitet fehlerhafte HTTP/1.1-Requests ohne Exceptions. Microsoft nennt bis zu 20 bis 40% mehr Durchsatz bei solchem Traffic, wie ihn Bots und Scanner erzeugen.
-
Zstandard ist Teil von
System.IO.Compression, und die Response Compression von ASP.NET Core unterstützt es direkt. - ASP.NET Core liefert OpenTelemetry-HTTP-Traces nativ, ohne zusätzliches Instrumentierungspaket.
- C# 15 bringt Union Types und geschlossene Hierarchien. Ein Domänenmodell kann «genau einer dieser Fälle» ausdrücken, und der Compiler prüft, dass jeder Fall behandelt wird.
Blazor & SignalR
Blazor und SignalR: weniger Workarounds
ASP.NET Core 11 schliesst mehrere Lücken, die wir in Kundenprojekten bisher mit eigenem Code überbrückt haben.
Statisches Rendering behält Zustand
[SupplyParameterFromTempData] und [SupplyParameterFromSession] bringen Flash-Meldungen und POST-Redirect-GET ins statische Server-Rendering. Seiten bleiben schnell und indexierbar, ohne in den interaktiven Modus zu wechseln.
Formulare validieren im Browser
Statisch gerenderte Formulare validieren jetzt standardmässig im Client, und EditForm wartet auf asynchrone Validatoren, etwa um zu prüfen, ob eine Kundennummer existiert.
Inaktive Circuits pausieren
Interactive-Server-Apps können die Circuits inaktiver Tabs pausieren (AddAutoPause) und Clients vor einem Deployment zum Pausieren auffordern (RequestCircuitPauseAsync). Das spart Arbeitsspeicher auf dem Server und macht Releases für Benutzer ruhiger.
Sitzungen überstehen Token-Erneuerungen
Blazor-Server-Circuits und SignalR-Hubs erhalten erneuerte Anmeldedaten ohne Reconnect (EnableAuthenticationRefresh). Dashboards, die den ganzen Tag offen sind, brechen nicht mehr ab, wenn ein Access Token abläuft.
SignalR-Aufrufe lassen sich abbrechen
Wer den CancellationToken von InvokeAsync abbricht, bricht jetzt auch die Hub-Methode auf dem Server ab. Bisher ging das nur bei Streaming-Aufrufen.
Lange Listen und Tabellen
Virtualize kommt mit unterschiedlich hohen Einträgen zurecht und springt gezielt zu einem Eintrag. QuickGrid hält Seite und Sortierung in der URL, so lässt sich eine gefilterte Ansicht als Lesezeichen speichern und teilen.
Risiken
Was brechen kann und wie man es vor der Produktion bemerkt
Microsofts Liste der Breaking Changes für .NET 11 ist lang, die meisten Einträge betreffen Nischen-APIs. Diese prüfen wir in typischen Geschäftsanwendungen zuerst:
Microsoft.Extensions.Hosting
Ein fehlerhafter Background Service beendet jetzt den Prozess
Wirft ein BackgroundService eine Exception, schlägt IHost.RunAsync jetzt fehl und der Prozess endet mit einem Exit Code ungleich 0. Das Monitoring sieht den Fehler endlich, aber Container können in Neustart-Schleifen geraten und Job-Scheduler melden Fehler, die bisher unsichtbar blieben.
EF Core 11
EF Core setzt SQL Server 2022 voraus
UseSqlServer verwendet jetzt standardmässig Kompatibilitätsgrad 160. Auf SQL Server 2019 oder älter wird manches generierte SQL wie LEAST und GREATEST nicht mehr unterstützt. Abhilfe schafft ein expliziter Grad mit UseCompatibilityLevel(150).
Microsoft.Data.SqlClient 7
Entra-ID-Logins auf SQL brauchen ein Zusatzpaket
EF Core 11 nutzt Microsoft.Data.SqlClient 7, das die Entra-ID-Authentifizierung in Microsoft.Data.SqlClient.Extensions.Azure ausgelagert hat. Apps, die sich mit einer Managed Identity an Azure SQL anmelden, brauchen diese Paketreferenz.
Microsoft.Extensions.Configuration
Leere Konfigurationswerte zählen jetzt
In mit AddConfiguration verketteter Konfiguration überschreibt ein leerer String jetzt Werte früherer Provider, und das Binden an eine Zahl wirft eine Exception. Einen Schalter für das alte Verhalten gibt es nicht.
Runtime / JIT
Sehr alte CPUs starten nicht mehr
.NET 11 setzt auf x86 und x64 den Befehlssatz x86-64-v2 (SSE4.2, POPCNT) voraus. Prozessoren, deren Herstellersupport um 2013 endete, scheitern beim Start. Prüfen Sie alte On-Premises-Server und virtuelle Maschinen mit generischem CPU-Modell.
Kestrel
Kestrel nimmt HTTP genauer
Kestrel lehnt in HTTP/2 und HTTP/3 verbindungsspezifische Header ab und schliesst HTTP/1.1-Verbindungen nach Requests, die Content-Length und Transfer-Encoding gleichzeitig senden. Ältere Proxies und Embedded-Geräte können neue Fehler sehen.
OpenAPI
OpenAPI-Dokumente wechseln auf 3.2
Generierte API-Beschreibungen zielen jetzt auf OpenAPI 3.2. Client-Generatoren, die das noch nicht unterstützen, scheitern. OpenApiVersion = OpenApiSpecVersion.OpenApi3_1 behält das bisherige Format.
Blazor
Blazor-Details
Veraltete Blazor-APIs sind entfernt, die Antiforgery-Prüfung wandert in die Middleware, QuickGrid rendert Links statt Buttons (CSS-Selektoren prüfen) und Virtualize rendert standardmässig 15 statt 3 zusätzliche Einträge.
// SQL Server 2019: keep EF Core on compatibility level 150
builder.Services.AddDbContext<ShopContext>(options =>
options.UseSqlServer(connectionString, sql => sql.UseCompatibilityLevel(150)));
// API clients generated from OpenAPI 3.1 documents
builder.Services.AddOpenApi(options =>
options.OpenApiVersion = OpenApiSpecVersion.OpenApi3_1);
var app = builder.Build();
try
{
await app.RunAsync();
}
catch (Exception ex)
{
// .NET 11 surfaces a failed BackgroundService here instead of exiting with code 0
app.Logger.LogCritical(ex, "Host stopped because a background service failed");
throw;
}Die drei Anpassungen, die wir am häufigsten machen. Das try/catch protokolliert den neuen Fehler deutlich, statt ihn zu verstecken.
Vorgehen
So bringen wir ein produktives System auf .NET 11
-
Bestandsaufnahme
Target Frameworks, NuGet-Pakete, Hosting-Images, SQL-Server-Versionen und die CPUs der On-Premises-Server. Ein einzelnes Paket ohne .NET 11 Support bestimmt den Zeitplan oft stärker als der eigene Code.
-
Umstellen
SDK in
global.jsonfestlegen, aufnet11.0umstellen und die Pakete aktualisieren. Das neue SDK allein zu installieren, ändert nichts. Für den mechanischen Teil hilft GitHub Copilot App Modernization, der .NET Upgrade Assistant wird nicht mehr weiterentwickelt. -
Breaking Changes prüfen
Die Liste oben gegen Code und Konfiguration abgleichen: Exit Codes, SQL-Kompatibilitätsgrad, Paketreferenzen, API-Clients. Wer von .NET 8 kommt, nimmt die Änderungen von .NET 9 und 10 dazu.
-
Testen und messen
Zuerst die automatisierten Tests, dann derselbe Lasttest vorher und nachher. Benchmarks auf den kritischen Pfaden zeigen, was das Upgrade wirklich bringt.
-
Gestaffelt ausrollen
Zuerst Staging, dann Produktion mit dem vorherigen Image als Rollback. In den ersten Tagen beobachten wir Exit Codes, Health Probes und Fehlerraten.
Ein jährlicher Termin statt eines Projekts
Jeden November erscheint eine neue .NET Version. Teams, die jährlich upgraden, haben jeweils eine Handvoll Änderungen. Teams, die drei Jahre warten, bekommen alle auf einmal, meist unter Termindruck. Wir planen das Upgrade als festen Teil des Jahres, abgestimmt auf Microsofts Release-Zyklus.
Häufige Fragen zum Upgrade auf .NET 11
Wird .NET 8 noch unterstützt?
Nein. Der Support für .NET 8 (LTS) und .NET 9 (STS) endete am 10. November 2026. Seitdem veröffentlicht Microsoft für beide Versionen keine Sicherheitsupdates mehr.
Sollen wir auf .NET 10 oder .NET 11 wechseln?
Beide werden bis 14. November 2028 unterstützt. .NET 11 hat ein Jahr mehr Verbesserungen, .NET 10 ein Jahr mehr Patch-Historie. Unterstützen alle Abhängigkeiten .NET 11, empfehlen wir meist .NET 11. Das nächste LTS, .NET 12, wird für November 2027 erwartet.
Können wir direkt von .NET 8 auf .NET 11 wechseln?
Ja. .NET 9 oder 10 dazwischen braucht es nicht. Die Breaking Changes aller drei Versionen müssen aber gemeinsam geprüft werden.
Ist Runtime Async automatisch aktiv?
Nein. In .NET 11 ist es eine Opt-in-Preview, die pro Projekt mit runtime-async=on in der Features-Eigenschaft aktiviert wird. Wir warten, bis es Standard wird, bevor wir es produktiv einsetzen.
Müssen Blazor-Apps angepasst werden?
Meist nur wenig: Veraltete APIs sind entfernt, QuickGrid rendert Links und die Antiforgery-Prüfung wandert in die Middleware. Neue Funktionen wie Circuit-Pause oder Session-Parameter sind opt-in.
Was bestimmt den Aufwand eines Upgrades?
Vor allem Abhängigkeiten und Testabdeckung, deutlich weniger die Grösse der Codebasis. Eine kurze Bestandsaufnahme von Paketen, Hosting und Datenbankversionen ergibt eine verlässliche Schätzung, bevor Code angefasst wird.
Quellen
Quellen und weiterführende Links
- Announcing .NET 11 (.NET Blog)
- .NET and .NET Core support policy
- Performance Improvements in .NET 11 (.NET Blog)
- What's new in ASP.NET Core in .NET 11
- What's new in EF Core 11
- Breaking changes in .NET 11
- Breaking changes in ASP.NET Core 11
- Breaking changes in EF Core 11
- .NET 11 Performance Edition (Steven Giesel)
- BackgroundService exceptions now propagate in .NET 11 (Steven Giesel)
- EF Core 11 makes your split queries faster (Steven Giesel)
Ihre Software
Noch auf .NET 8 oder 9?
Wir prüfen Abhängigkeiten, Hosting und die relevanten Breaking Changes und sagen Ihnen, was das Upgrade umfasst, bevor etwas geändert wird. Umgesetzt wird es danach vom selben Senior-Team.
Das .NET 11 Upgrade mit uns planenWeitere Leistungen rund um .NET
Der Migrationsleitfaden
Von .NET Framework 4.8 auf modernes .NET: die Begriffe, eine Roadmap in sechs Schritten und die Stolperfallen aus echten Projekten.
Zum .NET MigrationsleitfadenEntwicklung
ASP.NET Core, Blazor, Angular und React. Von der ersten Zeile bis zur Anwendung im Betrieb.
Mehr zur ASP.NET Core EntwicklungKontakt
Erzählen Sie uns, was Sie vorhaben.
Sie sprechen direkt mit den Leuten, die später auch Ihren Code schreiben.
- Sie melden sich: Wir geben unser Bestes, innert 24 Stunden zu antworten.
- Wir lernen uns kennen: 30 Minuten. Sie erzählen, wir fragen nach. Kein Pitch.
- Wir entscheiden gemeinsam: Wie es weitergeht, oder ehrlich, dass wir nicht passen.