Migration von VB-6-Applikationen auf Visual Basic .NET
Veröffentlicht: 07. Mrz 2002 | Aktualisiert: 16. Jun 2004
Von Uwe Baumann
Ich weiß nicht, ob es besser wird, wenn es anders wird. Aber es muß anders werden, wenn es besser werden soll.
GEORG CHRISTOPH LICHTENBERG, PHYSIKER UND SCHRIFTSTELLER
1.7.1742 bis 24.2.1799
Visual Basic hat einen erfolgreichen Werdegang hinter sich. In zehn Jahren schaffte es das Entwicklungswerkzeug zum Marktführer beim Rapid Application Development (RAD): Etwa 50 Prozent der professionellen Programmierer weltweit arbeiten mit Visual Basic. Das sind über drei Millionen. Jetzt steht mit Visual Basic .NET die nächste Generation bereit, und die ist weit mehr als "Visual Basic 6 + 1".
Dieser Artikel soll einen Überblick geben, was Sie erwartet, wenn Sie bestehende Applikationen in die .NET-Welt migrieren wollen. Zusätzlich zeigt er, welche Informationsquellen dafür zur Verfügung stehen.
Auf dieser Seite
Basic für das 21. Jahrhundert
Migration ohne Frustration
Die Frage nach dem Warum
Die Wahl der richtigen Migrationsstrategie
Der Upgrade Wizard - ein Migrations-Zauberer?
Den Quellcode vorbereiten
Where no Basic has gone before
Basic für das 21. Jahrhundert
Die Veränderungen von Visual Basic .NET gegenüber dem Vorgänger sind grundlegend. Die Sprache Basic wurde aufgeräumt und um moderne, objektorientierte Sprachkonstrukte ergänzt. Die wirkliche Revolution aber steckt in der Klassenbibliothek, der Base Class Library (BCL) des.NET Framework. Zwei neue Bibliotheken stehen beispielsweise innerhalb des Frameworks allein für die Entwicklung des Benutzerinterfaces zur Verfügung: Windows Forms für klassische Windows-basierte Oberflächen und Web Forms für die Entwicklung von Webseiten (Visual Basic für das Web).
Eine umfangreiche, gemeinsam mit anderen Sprachen nutzbare Klassenbibliothek auf Basis eines einheitlichen Typsystems (Common Type System) bedeutet aber auch das Ende der so genannten "glass ceiling": der "unsichtbaren Mauer" von ärgerlichen Limitationen, gegen die man in den bisherigen Visual-Basic-Versionen öfter prallte: Bestimmte Aufgaben, wie beispielsweise das Entwickeln von Systemservices oder das Arbeiten mit Threads konnten in Basic nicht umgesetzt werden. Das Ausweichen auf DLLs, die in C++ geschrieben wurden, war oftmals die einzige Möglichkeit, diese Hürde zu überschreiten. Auch die Interoperabilität mit anderen Sprachen war bisher problematisch. All diese Beschränkungen gehören nun der Vergangenheit an.
Gleichzeitig bietet das .NET Framework eine immense Fülle von Funktionalität an. VB .NET nutzt jetzt eine Bibliothek, die fast alle Aspekte der Softwareentwicklung abdeckt, dem Programmierer Routinearbeit abnimmt und ihn so wesentlich produktiver macht.
Eine kompakte Einführung in Visual Basic .NET finden Sie unter:
Microsoft Visual Basic Developer Center
Für die Neuentwicklung von Applikationen sind dies sehr gute Neuigkeiten. Herr Lichtenberg (siehe Eingangszitat) wäre beruhigt gewesen: Es wird anders, und es wird viel besser!
Migration ohne Frustration
So weit, so gut! Aber nur die wenigsten Applikationen werden "von Null" komplett neu entwickelt. Viele haben eine fast so lange und erfolgreiche Geschichte wie Visual Basic selbst. Bei der Migration von bestehenden Anwendungen stellt sich deshalb die Frage: "Wie hältst Du's mit der Kompatibilität, Visual Basic .NET?".
Hier ist die ungeschminkte Wahrheit: Visual Basic .NET ist nicht 100% kompatibel zu den vorherigen Versionen.
Bei der Entwicklung von Visual Basic .NET hatte das Microsoft-Projektteam eine gewichtige Entscheidung zu treffen: Sollte die Kompatibilität zu altem Programmcode weitgehend beibehalten werden? Dies war lange Zeit der Plan.
Doch bei der Entwicklung stellten sich unangenehme Konsequenzen heraus: Die bestehende "Ruby"-Formularbibliothek aus VB 6 konnte nicht vollständig integriert werden, und die neue Version von Visual Basic hätte nicht alle Vorteile der .NET-Plattform nutzen können. Zu verschieden sind die beiden Welten des COM-basierten Visual Basic 6 und der .NET-Sprache Visual Basic .NET. Der Spagat wäre nicht geglückt. Das Entwicklerteam entschied sich deshalb dafür, die Kompatibilität in einigen Bereichen zu brechen.
Der Plan war nun, ein durch und durch modernes Basic zu schaffen, das alle Möglichkeiten der .NET-Welt nutzen kann. Gleichzeitig war klar, dass die Programmierer sehr gute Tools und detaillierte Informationen erhalten sollten, um die Migration von bestehenden Applikationen in die neue Welt erfolgreich bewältigen zu können.
Dies scheint ein vehementer Einschnitt zu sein. Aber keine Angst: Sie haben Zeit. Ein Upgrade Ihrer bestehenden Applikation ist nicht zwingend erforderlich. Sie können entscheiden: Wollen Sie Ihren Programmcode, beziehungsweise Teile davon, weiter in VB 6 entwickeln? Kein Problem: Microsoft hat zugesichert, die Version 6 weiterhin für lange Zeit zu unterstützen.
Bei Bedarf können Sie VB-6-Komponenten aus beliebigen .NET-Sprachen aufrufen und umgekehrt .NET-Code aus VB 6 ansprechen. So übertragen Sie erst Teilbereiche Ihrer Applikation in VB .NET oder eine der anderen .NET-Sprachen. Erst nach und nach portieren Sie die verbliebenen Teile in Richtung .NET.
Entscheiden Sie sich für ein Upgrade Ihres bestehenden Codes nach .NET, steht Ihnen im Upgrade Wizard ein leistungsfähiges Tool zur Verfügung. Die Dokumentation über den Upgradeprozess ist vollständig und von sehr guter Qualität. Zahlreiche Whitepapers, "How To"-Anleitungen und audiovisuelle Präsentationen stehen bereit.
Welche Entscheidung Sie treffen, hängt in großem Maße von Ihrer bestehenden Codebasis ab. Wollen Sie ein bestimmtes Projekt nur noch warten, planen jedoch keine Weiterentwicklung? Hier wäre unter Umständen eine Migration nicht angeraten. Soll die Applikation von neuen .NET-Features profitieren, aber Sie können nicht den gesamten Code sofort migrieren? Kein Problem, nutzen Sie .NET-Komponenten, um beispielsweise eine Webanbindung Ihrer Applikation zu realisieren - wenn Sie bisher Ihre Applikation komponentenbasiert aufgebaut haben, können die neuen .NET-Komponenten und die bestehenden VB-6-Komponenten problemlos zusammenarbeiten.
Die Entwicklungsumgebungen von VB 6 und VB .NET üben sich konsequenterweise in friedlicher Koexistenz: Das alte und das neue Basic können problemlos und ohne Nebenwirkungen auf demselben Entwicklungsrechner installiert werden. Dies wird sogar ausdrücklich empfohlen; nur so sind Sie in der Lage, Ihre bestehende Applikation weiter unter VB 6 zu bearbeiten, neue Komponenten in VB .NET zu entwickeln und Tools wie den Update Wizard effektiv zu nutzen.
Gute Planung ist alles:
Überlegen Sie sich, welche Aspekte Ihrer Applikation durch die .NET-Technologie "added value" gewinnen. Die oben erwähnte Webintegration ist ein gutes Beispiel: .NET bietet mit den Web Forms eine leistungsfähige Möglichkeit, schnell und einfach Web-Frontends für bestehende Applikationen zu entwickeln.
Lernen Sie VB .NET und das .NET Framework kennen. Es gibt viel Neues, aber durch den logischen Aufbau des Frameworks lernen Sie den Umgang schnell. Außerdem macht es Spaß!
Machen Sie einen Upgrade-Plan, in welchem Sie Ihr Vorgehen bei der Migration festlegen: Was wird wann migriert? Welche Vorbereitungen müssen getroffen werden?
Die Frage nach dem Warum
Migration und Einarbeitung in die neue Welt von .NET erfordern Investitionen in Zeit und Ausbildung. Sie werden aber sehr schnell feststellen: Es lohnt sich. Ein kurzer und deshalb unvollständiger Rundgang durch VB .NET soll zeigen, wo die Vorteile liegen.
Es fängt mit der integrierten Entwicklungsumgebung von Visual Studio an: Die Tasklist bietet schnellen Zugriff auf zu erledigenden Aufgaben, fehlerhafte und unfertige Codestellen. Die Kontexthilfe zeigt "online" Informationen zu den Befehlen, die Sie momentan im Code bearbeiten. Der Server Explorer integriert viele Funktionen, für die Sie bisher externe Tools verwenden mussten. Beispielsweise können Sie unter anderem SQL-Server-Datenbanken warten, Tabellen anlegen und Stored Procedures schreiben.
Visual Basic .NET bietet nun volle Objektorientierung. Dies umfasst Codevererbung, strukturierte Fehlerbehandlung mit Try-Catch-Blöcken und vieles mehr. Visual Basic .NET bietet damit alle Sprachfeatures, die Sie von einer modernen Programmiersprache erwarten können.
Für die Entwicklung von klassischen Windows-Oberflächen bieten sich Ihnen dank der schon erwähnten Windows Forms neue Möglichkeiten. Dank visueller Vererbung können Sie von bestehenden Benutzerdialogen erben, diese anpassen und so vorhandene visuelle Komponenten wiederverwenden.
Anchoring und Docking sorgen für die korrekte Platzierung von Oberflächenelementen, wenn sich die Größe des Dialogs ändert. Die Windows Forms Controls bieten komfortable Datenbindung an eine Vielzahl von Datenquellen. Integrierte Funktionen zur Lokalisation sorgen dafür, dass es extrem einfach wird, Programme für einen globalen Markt zu entwickeln.
Schließlich bietet das .NET Framework eine erhebliche Vereinfachung von Setup und Deployment. Im Normalfall können Sie Ihre Applikation einfach auf die Zielmaschine kopieren, wenn dort die.NET-Runtime installiert ist ("XCopy-Deployment"). Der Projekttyp "Setup Project" innerhalb von Visual Studio erlaubt zudem das einfache und flexible Erzeugen von Windows Installer (MSI)-Paketen für Ihre Anwendung.
Die Wahl der richtigen Migrationsstrategie
Wie können Sie nun den Umstieg auf VB .NET konkret angehen, wenn Sie eine bestehende VB-6-Codebasis haben? Das Visual Basic Upgrade Lab der Microsoft Corporation hat dazu drei grundsätzliche Strategien entwickelt:
Komplette Neuimplementierung in .NET Hier handelt es sich um eine sehr kompromisslose Vorgehensweise:
Sie entwickeln Ihre Applikation komplett neu, ohne den bestehenden Code mit einzubeziehen.
Komplette Portierung der bestehenden Codebasis
Mit Hilfe von Migrationstools und manuellen Anpassungen migrieren Sie Ihre bestehende Codebasis halbautomatisch auf .NET. Dabei lassen Sie Ihre bestehende Applikationsarchitektur in großen Teilen intakt.
Mischlösung
Sie implementieren bestimmte Funktionalitäten in neuen Komponenten mit VB .NET oder einer anderen .NET-Sprache. Aus dem bestehenden VB-6-Code erzeugen Sie, soweit noch nicht geschehen, COM-Komponenten. Über die COM Interop Technologie können die bestehenden VB-Komponenten mit den neuen .NET-Komponenten interagieren.
Wo liegen die Vor- und Nachteile der einzelnen Vorgehensweisen?
Entscheiden Sie sich für eine komplette Neuimplementierung, können Sie die Vorteile der .NET-Plattform ohne Einschränkungen nutzen und erreichen damit optimale Skalierbarkeit und Performance. Setup und Deployment werden sehr einfach. Kurz: Sie genießen .NET ohne Kompromisse. Leider ist diese Kompromisslosigkeit aus wirtschaftlichen und logistischen Gründen oft nicht möglich, weil sie einen erheblichen Arbeits- und Schulungsaufwand innerhalb eines kurzen Zeitraums mit sich bringt.
Portieren Sie jedoch Ihren bestehenden Code mit Hilfe eines Migrationstools, reduziert sich der Arbeitsaufwand in den meisten Fällen bedeutend. Sie können bei Bedarf Teile Ihrer Applikation umschreiben und selektiv von den erweiterten Möglichkeiten des .NET Frameworks Gebrauch machen.
Ein Beispiel: Wenn Ihr Programm sehr viele Strings verarbeitet, können Sie durch Einsatz der .NET-Klasse StringBuilder Performancegewinne bis zu einem Faktor 30 erreichen. Abhängig von Ihrem bestehenden Sourcecode kann die Codemigration jedoch mehr oder weniger aufwändig sein. Im besten Fall müssen Sie nach einer automatischen Migration nur wenige Anpassungen vornehmen, im schlechtesten Fall ist der Arbeitsaufwand beträchtlich.
In den meisten Fällen wird der goldene Mittelweg zum Erfolg führen. Bereiten Sie Ihre bestehende Applikation optimal vor, indem Sie deren Funktionalität in COM-Komponenten aufteilen. Stellen Sie dann fest, welche Komponenten am meisten von .NET profitieren können und konvertieren Sie diese mit Hilfe des Migrationstools. Lassen Sie die schwierig zu portierenden Komponenten unangetastet und pflegen Sie diese weiterhin in VB 6.
Die Kommunikation zwischen COM- und .NET-Komponenten ist problemlos und völlig transparent, leider aber kostet sie mehr Zeit als zwischen Komponenten der gleichen Welt. In den meisten Fällen spielt dies aber für die Gesamtperformance der Anwendung eine untergeordnete Rolle.
So müssen Sie zwar auf einige Nice-to-have-Features einer reinrassigen .NET-Applikation, wie etwa das sehr einfache Deployment, verzichten, minimieren aber den Aufwand und die Kosten.
Der Upgrade Wizard - ein Migrations-Zauberer?
Visual Basic bietet Ihnen ein leistungsfähiges Tool zur Codemigration - den Upgrade Wizard. Er tritt in Aktion, wenn Sie aus Visual Basic .NET ein bestehendes VB-6-Projekt öffnen. Der Wizard legt ein neues VB-.NET-Projekt an und konvertiert den VB-6- Sourcecode in .NET-Code. Ihr VB-6-Projekt bleibt dabei unangetastet.
Das Resultat sind das übersetzte Projekt und ein Upgrade-Report, der den Verlauf der Konvertierung in übersichtlicher Form darstellt. Der Wizard gibt Ihnen in diesem Report wertvolle Informationen in Form von ToDo-Kommentaren.
Dabei gibt es verschiedene Klassen von Kommentaren:
Errors sind Codestellen, die der Wizard nicht automatisch übersetzen konnte und die in VB .NET zu einem Compilerfehler führen. Hier müssen Sie von Hand eingreifen.
Mit Warnings weist der Wizard Sie auf Stellen im Code hin, bei denen VB .NET für die entsprechenden Befehle eine geänderte Semantik besitzt: Abhängig davon, wie Ihr Programm den jeweiligen Befehl einsetzt, sollten Sie im Einzelfall überprüfen, ob Sie eventuell Änderungen vornehmen müssen.
ToDo-Kommentare schließlich weisen auf Codefragmente hin, die der Wizard teilweise übersetzen konnte, bei denen aber noch manuelle Anpassungen nötig sind.
Die im Upgrade-Report aufgelisteten Kommentare fügt der Wizard zusätzlich noch direkt an den betreffenden Stellen in den Sourcecode ein. Diese Kommentare enthalten ebenfalls Hyperlinks in die Hilfe, wo Sie detaillierte Information zum jeweiligen Kommentar finden. Weiterhin füllt der Wizard die Kommentare auch in die Tasklist der Visual-Studio-IDE. Sie können durch Klicken auf diese Upgrade Tasks zu den betreffenden Codestellen gelangen und so nacheinander alle Kommentare abarbeiten.
Der Upgrade Wizard kann nicht zaubern, auch wenn der Name dies nahelegt. Er ist jedoch ein wertvolles Tool, um Ihnen lästige Routinearbeit abzunehmen. Bewährt hat sich in diesem Zusammenhang ein Two-Pass Upgrade: Ein erster Durchlauf durch den Wizard dient einzig und allein dazu, potentielle Probleme zu identifizieren. Der Code des VB-6-Quellprojekts kann dann mit den so gewonnenen Informationen manuell angepasst werden, bevor der Wizard in einem zweiten Durchlauf das Projekt tatsächlich übersetzt. Schließlich bereinigen Sie in VB .NET die verbleibenden Upgrade-Kommentare.
Welche Änderungen nimmt der Upgrade Wizard am Code vor? Bei einem großen Teil Ihres VB-6-Codes lautet die Antwort: Keine. Denn VB ist immer noch VB und an vielen Stellen ist schlicht keine Änderung nötig. Sprachunterschiede wie beispielsweise die geänderte Syntax von Get/Set-Methoden für Objekteigenschaften werden vom Wizard problemlos in die neue Sprachsyntax konvertiert.
Bestimmte Klassen und Sprachelemente, wie beispielsweise Strings fester Länge, existieren in VB .NET nicht mehr. Hier greift der Wizard auf Kompatibilitätsklassen zurück. Er benutzt dabei eine Bibliothek von Visual Basic .NET, welche im .NET Framework nicht mehr vorhandene VB-Funktionen unter .NET implementiert. Der erwähnte String fester Länge wird beispielsweise durch die .NET-Klasse VB6FixedLengthString ersetzt.
Bestehende VB-6-Forms übersetzt der Wizard in Windows-Forms-Klassen. Eingebettete ActiveX-Controls bleiben unverändert. Dies gilt ebenfalls für UserControls. VB-6-eigene Controls, beispielsweise das DriveListbox-Control, werden durch in .NET-Kompatibilitätsklassen ersetzt.
ADO-Datenbindung (ActiveX Data Object) per Data-Control ersetzt der Wizard durch ein spezielles .NET-kompatibles ADO Data-Control. DAO- oder RDO-Datenbindung (Data Access Objects, Remote Data Objects) an Windows-Forms-Controls wird leider nicht mehr unterstützt - der Zugriff über konventionelle COM-Objekte ist für diese Datenzugriffstechnologien jedoch nach wie vor möglich.
Den Quellcode vorbereiten
Durch Anpassungen Ihres VB-6-Codes können Sie erreichen, dass der Upgradeprozess wesentlich erleichtert wird. Hier sind einige Tipps, die unabhängig von der Migrationsthematik in vielen "Best Practice"-Sammlungen für VB zu finden sind:
Verwenden Sie Early Binding für Ihre Objektreferenzen. Der Wizard erhält so bedeutend mehr Informationen über die Objekte, die er übersetzen soll und kann beispielsweise Default-Eigenschaften besser auflösen.
Vermeiden Sie Variant-Variablen und ersetzen Sie diese durch typisierte Variablen.
Vermeiden Sie das Speichern von Datumswerten in Double-Variablen. Verwenden Sie stattdessen den Datentyp Date.
Verwenden Sie null-basierte Arrays, nur diese werden vom .NET Framework unterstützt.
Verwenden Sie vordefinierte Konstanten. Besser als Form1.WindowStyle=2 ist Form1.WindowsStyle=vbMaximized. Sie geben dem Wizard wertvolle Hinweise zur Konvertierung und erhöhen gleichzeitig die Lesbarkeit Ihres Codes.
Vermeiden Sie überholte Syntax: Def, On x Goto .., GoSub.Return, StrPtr, VarPtr, ObjPtr und Option Base 0|1 wurden ersatzlos gestrichen und dürfen sich in den verdienten Ruhestand für altgediente Befehle begeben.
Mehr Tips zur Vorbereitung Ihres VB 6-Codes erhalten Sie unter:
Preparing Your Visual Basic 6.0 Applications for the Upgrade to Visual Basic .NET
Manche Technologien aus dem VB-6-Umfeld gib es unter .NET nicht mehr. Für alle diese Technologien existieren inzwischen bessere Alternativen. Hier einige Beispiele:
AddIns für die VB-Entwicklungsumgebung: Hier existiert ein neues Objektmodell für die Visual-Studio-.NET-IDE. Der Nachteil: Sie müssen Ihr bestehendes AddIn neu schreiben. Der große Vorteil: Das neue AddIn funktioniert dann für alle .NET-Sprachen, die sich in Visual Studio .NET integrieren. Als Alternative können Sie in Visual Studio .NET Makros programmieren und so Abläufe innerhalb der Entwicklungsumgebung automatisieren.
LSet-Methode - Implementieren Sie eine eigene Methode, um benutzerdefinierte Typen zu kopieren.
DAO- und RDO-Datenbindung: Sie können die RDO- und DAO-Objekte weiter verwenden; wie oben bereits erwähnt, funktioniert die Datenbindung an Windows Forms-Controls für diese Technologien nicht mehr. Versuchen Sie soweit möglich ADO-Datenbindung zu verwenden.
OLE Control: Ersetzen Sie dieses Control durch das WebBrowser-Control (ActiveX!), welches ebenfalls OLE-Objekte einbetten kann.
GoSub/Return: Verwenden Sie stattdessen Prozeduraufrufe.
ActiveX-Dokumente und DHTML-Seiten - belassen Sie diese in VB 6.
Where no Basic has gone before
Visual Basic .NET bringt viel Neues für den Entwickler. Um mit den Worten der Serie "Raumschiff Enterprise" zu sprechen, entführt Visual Basic .NET in Welten, die noch nie ein Basic zuvor gesehen hat. Beispielsweise sind nun endlich Multithread-Applikationen und Windows Services möglich.
Der Artikel zeigt aber auch, dass vorhandene Programme nicht verloren sind. Vielmehr haben Sie die Wahl, wie Sie die Projekte umsetzen: ob in einem Rutsch komplett, in Schritten oder nur teilweise. Alles ist möglich. Und Sie erhalten bestmögliche Unterstützung. So hilft der Upgrade Wizard in Visual Basic .NET bei der Übersetzung des Codes und weist auf Fehler oder Probleme hin. Visual Basic .NET wird einigen Lernaufwand kosten, aber dann werden Sie wie Commander Spock sicher auch sagen: "Faszinierend!".
Der Visual Basic .NET Upgrade Guide bietet eine unverzichtbare Informationsquelle mit einer Fülle von Whitepapers, audiovisuellen Präsentationen und Democode zu allen Aspekten der Visual Basic Migration:
The Visual Basic .NET Upgrade Guide
Weitere Informationen
MSDN® Website:
• | https://msdn.microsoft.com/ |
Bücher:
Ed Robinson, Michael Bond, Ian Oliver:
"Upgrading Microsoft Visual Basic 6.0 to Microsoft Visual Basic .NET"
Microsoft Press; ISBN 073561587X (Englische Version)
"Von Microsoft Visual Basic 6.0 nach Microsoft Visual Basic.NET"
Microsoft Press; ISBN 3860636669 (Deutsche Version)
Dan Appleman: "Moving to VB .NET"
Apress; ISBN: 1893115976
Ralph Westphal: ".NET kompakt"
Spektrum; ISBN 3827411858