Migration zu aktuellen Technologie-Stacks: erst Risiken analysieren, dann überprüfbare Schritte.
Ich übernehme keine Wartung technisch veralteter Projekte mehr, aber ich migriere sie oft auf aktuelle Technologien. Dies erfordert besondere Sorgfalt: Eine Versionsänderung verbirgt oft Bibliotheken, die ersetzt werden müssen, Architekturen, die neu strukturiert werden müssen, und Konfigurationen, die neu überdacht werden müssen.
Analyse vor CodeAbhängigkeiten, Lizenzen und Risiken werden vor der Wahl des Weges bewertet.
Ein minimales Produkt, frühzeitigWenige Funktionen, aber lauffähig, um die neue Architektur zu validieren.
Warum jetzt
In Umgebungen mit strengen Sicherheitskontrollen wird eine Version, die keine Updates mehr erhält, schnell zu einem Problem.
Sobald der Support endet, stoppen Sicherheitsupdates. Wo Sicherheits- und Datenschutzanforderungen gelten, kann dies eine Veröffentlichung blockieren oder in einer Prüfung auftauchen.
.NET 8 und .NET 9: Ende des Supports am 10. November 2026. Microsoft empfiehlt die Migration zu .NET 10, das bis November 2028 unterstützt wird.
Angular 20: Ende des Langzeitsupports (LTS) am 28. November 2026. Angular-Major-Versionen werden typischerweise 24 Monate unterstützt.
AngularJS: nicht mehr unterstützt seit Ende 2021.
Was tatsächlich migriert wird
01
Die Version
Der einfachste Fall: dasselbe Produkt, in einer neueren Version.
Sogar hier kann der Sprung groß sein. Der Wechsel von AngularJS zu Angular bedeutet im Wesentlichen, die Benutzeroberfläche neu zu schreiben; zwischen den Angular-Versionen geht man schrittweise vor, wobei man die Breaking Changes bei jedem Schritt überprüft.
Typische Pfade
AngularJS → Angular
Älteres Angular → aktuelles Angular
.NET Framework → aktuelles .NET
Nicht unterstützte .NET-Versionen → .NET 10
02
Die Bibliotheken
Komponenten, die auf veralteten Bibliotheken basieren, müssen oft neu geschrieben werden, hauptsächlich auf der Client-Seite, aber auch auf dem Server.
Viele JavaScript-Bibliotheken verbergen eine umfangreiche Neuentwicklung hinter einer Versionsänderung. Auf dem Server haben einige die Lizenz geändert: Dies betrifft Anwendungen, die iTextSharp 4.1.6 verwenden, die letzte LGPL-Version. Spätere Versionen sind nur unter der AGPL oder einer kommerziellen Lizenz erhältlich, und für aktuelles .NET gibt es nur eine inoffizielle Portierung von 4.1.6.
Für jede Komponente
Wie sie in die restliche Architektur integriert wird
Lizenz der kompatiblen Version
Aktualisieren, ersetzen oder den Code, der sie verwendet, neu schreiben
03
Die Architektur
Die Übernahme aktueller Standards bedeutet eine Umstrukturierung, nicht nur ein Neukompilieren.
Viele .NET Framework-Anwendungen verwenden veraltete Muster wie statische Klassen und handgefertigte Abhängigkeiten, während aktuelles .NET auf Dependency Injection aufgebaut ist. Einige Technologien haben auch kein direktes Äquivalent.
Ich habe Web Forms-Anwendungen zu modernen Web-Apps migriert, den Code-behind in Web APIs umgewandelt und in einem Fall zu Blazor, um auf einem vollständigen Microsoft-Stack zu bleiben. Auf ähnliche Weise habe ich WCF-Dienste zu REST-APIs verschoben: Hier ist der heikle Teil oft das Datenformat, weil die Clients die WCF-Serialisierung für selbstverständlich hielten.
Aus meiner Erfahrung
Web Forms → Web-App mit Web APIs
Web Forms → Blazor
WCF → REST-APIs, kompatibel mit bestehenden Clients
Statischer Code → Dependency Injection
04
Der Umstieg in die Cloud
Von einem traditionellen Server zur Cloud ist die Migration nicht nur eine Frage der Anwendung.
Konfiguration, Architektur, Berechtigungen und Datenzugriff müssen geprüft und angepasst werden, damit die Lösung in der Cloud funktioniert. Mit diesen Themen habe ich mich bei Migrationen dieser Art befasst.
Was neu überdacht werden muss
Konfiguration und Geheimnisse, von lokalen Dateien zu dedizierten Diensten wie Key Vault
Berechtigungen, von Windows-Konten zu verwalteten Identitäten
Gespeicherte Prozeduren und Datenbankfunktionen, die im verwalteten Dienst nicht verfügbar sind, wie geplante Aufgaben, Queries über mehrere Datenbanken hinweg und CLR-Assemblies
Dateien auf der Festplatte, Sessions im Arbeitsspeicher und geplante Aufgaben, die in Speicher, einen verteilten Cache und Dienste wie Azure Functions verschoben wurden
Die Methode: zuerst Risiken prüfen, dann schrittweise vorgehen
01
Vorab-Analyse
Ein Inventar der Abhängigkeiten, Bibliotheken, Lizenzen und Integrationen. Für jede davon entscheiden Sie, ob sie aktualisiert, ersetzt oder neu geschrieben werden soll und welche Umstrukturierung erforderlich ist.
02
Minimales Produkt
Die Funktionen, die benötigt werden, um zu beweisen, dass die neue Architektur hält, werden so früh wie möglich ausgeführt.
03
Funktion für Funktion
Ein Schritt-für-Schritt-Plan mit Regressionstests in jeder Phase.
04
Frühzeitige Einbindung der Stakeholder
Die Nutzer des Systems beginnen mit dem Testen der migrierten Teile, sobald diese bereit sind.
05
Alt und neu nebeneinander
Wo möglich, laufen beide Anwendungen parallel. Bei der Migration von AngularJS zu Angular konnten die Nutzer sie vergleichen und für noch nicht migrierte Funktionen weiter die alte Anwendung verwenden.
Jede Migration ist ein einzigartiger Weg: Sie hängt davon ab, wo Sie starten, wohin Sie wollen und von all diesen Faktoren. Was sich nicht ändert, ist die Methode: Risiken werden zuerst analysiert, gefolgt von schrittweisen und überprüfbaren Schritten.
Die initiale Analyse kann auch ein eigenständiges Engagement sein. Häufiger, bei direkten Kunden, ist sie der erste Schritt eines Weges, der direkt zur migrierten Anwendung in Produktion führt, ohne dass Sie die Entwicklung intern übernehmen müssen.
Coding Agents und Migration
Bei Migrationen verwende ich Coding Agents mit der spec-driven Methode: Ausgehend vom bestehenden Code lege ich die Abfolge der Schritte fest und wechsle zwischen den vom Agenten durchgeführten Tests und manuellen Überprüfungen.
Bei Legacy-Code bewerte ich auch, wie sich eine Änderung überprüfen lässt: Datenbankabhängigkeiten, externe Dienste und Konfigurationen können wiederholbare Tests erschweren. Eine Testumgebung und Regressionsprüfungen vorzubereiten, ist Teil des Migrationsplans.
Microsoft selbst hat sein Upgrade-Tool, Upgrade Assistant, durch einen KI-basierten Agenten ersetzt.
C-03 — Öffentlicher Sektor: Portierung auf aktuelle .NET-Versionen und Umstellung auf eine REST-Mikroservices-Architektur mit testgetriebener Entwicklung.
Die veröffentlichten Projektbeispiele sind eine Auswahl: Die anderen auf dieser Seite beschriebenen Migrationen stammen aus Projekten, die nicht auf der Website vorgestellt werden.
Weiterführende Quellen
Die Quellen beschreiben Prüfung und Testbarkeit. Den Vorbereitungsaufwand in die Einführungskosten einzubeziehen, ist ein vorgeschlagenes Bewertungskriterium und kein allgemeines Maß für den Nutzen von Agenten.