.NET-ModernisierungJeder Stack auf dieser Liste, produktiv ausgeliefert
Legacy-.NET ist nicht ein Problem. Eine WebForms-App, eine WCF-Serviceschicht und ein WinForms-Client geraten aus völlig unterschiedlichen Gründen ins Stocken, und eine Schätzung ist nur so gut wie die Person, die in diesem Stack tatsächlich gearbeitet hat. Wir haben in allen davon Produktivcode geschrieben – auch in den VB.NET-Projekten, die niemand öffnen will –, die Bewertung ist also Erfahrung statt einer Recherchephase, die Sie bezahlen.
2002–2012ASP.NET WebForms↳ASP.NET Core mit Razor Pages oder Blazor
Seitenlebenszyklus, ViewState und Server-Controls haben kein Gegenstück, das Markup wird also tatsächlich neu geschrieben. Die Geschäftslogik darunter meist nicht – und die beiden zu trennen, ist der Großteil der Arbeit.
2003–2010ASMX- und WCF-Dienste↳ASP.NET-Core-APIs, gRPC oder CoreWCF
Bindings, Behaviors und SOAP-Verträge lassen sich nicht portieren. Wo die Aufrufer Dritte sind, die Sie nicht ändern können, hält CoreWCF den Vertrag am Leben, während alles dahinter umzieht.
2007–2015Silverlight- und Browser-Plugin-Clients↳Ein Web-Frontend oder eine mobile App
Hier gibt es nichts, wohin man migrieren könnte – die Runtime ist aus allen Browsern verschwunden. Solche Projekte beginnen mit einem Gespräch darüber, was die Anwendung eigentlich leisten musste.
2008–2019DataSets, EF6 und handgeschriebenes ADO.NET↳EF Core, oder Dapper, wo es sich lohnt
In der Datenschicht wird eine einfache Portierung teuer. Query-Übersetzung, Transaktionen und Lazy Loading verhalten sich anders, und das zeigt sich in der Produktion statt beim Kompilieren.
2009–2016ASP.NET MVC 5 und Web API 2↳ASP.NET Core MVC
Das, was auf dieser Liste einer mechanischen Portierung am nächsten kommt. Die eigentliche Arbeit sind Hosting, Konfiguration, Dependency Injection und die Middleware-Pipeline – nicht Ihre Controller.
2002–heuteWinForms und WPF↳Aktuelles .NET für den Desktop, oder MAUI, wenn es aufs Smartphone gehört
Beide laufen noch auf modernem .NET, eine Neuentwicklung ist also selten nötig. Was blockiert, sind verwaiste Control-Suiten von Drittanbietern und COM-Interop – danach suchen wir als Erstes.
Jede Version.NET-Framework-Klassenbibliotheken↳Aktuelles .NET, während des Umzugs mit Multi-Targeting
Gemeinsame Bibliotheken ermöglichen es, altes und neues System parallel zu betreiben. Sie zuerst auf Multi-Targeting umzustellen, ist meist der Schlüssel für alles andere auf dieser Liste.
Laufendpackages.config, alte csproj-Dateien, IIS auf Windows Server↳SDK-Projekte, Container, CI, die von selbst läuft
Unspektakulär – und genau das macht den Rest wiederholbar. Es zahlt sich außerdem lange vor dem Ende der Migration aus, weshalb es oft der richtige erste Schritt ist.
Keine Big-Bang-Neuentwicklung
Nichts auf dieser Liste wird in einem einzigen Schritt ersetzt. Was funktioniert, ist das Strangler-Muster: Den neuen Stack neben dem alten aufbauen, Stück für Stück hinter denselben URLs umziehen und beide betreiben, bis auf der alten Seite nichts mehr übrig ist. Auf dem Papier sieht das langsamer aus – und es ist die einzige Variante, die wir je bis zum Ende haben laufen sehen.