Luca Morelli
Softwareanalytiker und -entwickler
Teamleiter

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

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

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

  3. Funktion für Funktion

    Ein Schritt-für-Schritt-Plan mit Regressionstests in jeder Phase.

  4. Frühzeitige Einbindung der Stakeholder

    Die Nutzer des Systems beginnen mit dem Testen der migrierten Teile, sobald diese bereit sind.

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

Wie ich Coding Agents bei Migrationen einsetze

Coding Agents bei Legacy-Anwendungen

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.

Haben Sie eine Anwendung, die auf aktuelle .NET- oder Angular-Versionen migriert werden soll?

Ausführlicher Lebenslauf und Referenzen auf Anfrage verfügbar.