.NET 11

Upgrade auf .NET 11: was Sie gewinnen und was brechen kann

.NET 8 und .NET 9 haben am 10. November 2026 den Support verloren, am selben Tag erschien .NET 11. Was das Upgrade für Performance, Blazor und SignalR bringt, welche Änderungen ein laufendes System brechen können und wie wir den Schritt planen.

.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

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.Now mit lokaler Zeitzone, von 34.5 ns auf 17.9 ns (unsere Messung).
48%
schnelleres Parsen von Guid mit Parse, TryParse und 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.

Program.cs
// 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

  1. 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.

  2. Umstellen

    SDK in global.json festlegen, auf net11.0 umstellen 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.

  3. 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.

  4. Testen und messen

    Zuerst die automatisierten Tests, dann derselbe Lasttest vorher und nachher. Benchmarks auf den kritischen Pfaden zeigen, was das Upgrade wirklich bringt.

  5. 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.

FAQ

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.

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 planen

Kontakt

Erzählen Sie uns, was Sie vorhaben.

Sie sprechen direkt mit den Leuten, die später auch Ihren Code schreiben.

  1. Sie melden sich: Wir geben unser Bestes, innert 24 Stunden zu antworten.
  2. Wir lernen uns kennen: 30 Minuten. Sie erzählen, wir fragen nach. Kein Pitch.
  3. Wir entscheiden gemeinsam: Wie es weitergeht, oder ehrlich, dass wir nicht passen.
0 / 2000

Ein paar Sätze reichen. Was hält Sie heute auf, gibt es einen Termin?

Wir nutzen Ihre Angaben nur, um Ihnen zu antworten.

Lieber direkt sprechen? 30 Minuten per Google Meet mit Steven Giesel.

Termin wählen
Oder per E-Mail an contact@bitspire.ch