16. Jul 2018
Lesedauer 6 Min.
Visual Basic versc#ärft
Codekonvertierung
Tools und Techniken, um Visual-Basic-Code in C# zu übersetzen

Grabenkämpfe um die „bessere“ Programmiersprache sind Geschichte – seit der Einführung von .NET liefern Visual Basic (VB) und C# gleichwertige Ergebnisse. Trotzdem kann es Gründe geben, um über eine Konvertierung von VB nach C# nachzudenken:
- die verfügbaren VB-Entwickler im Unternehmen und auf dem Arbeitsmarkt,
- der Wechsel des Sprachkontextes beim Entwickeln mehrerer Projekte,
- die Ähnlichkeiten von C# zu Java und JavaScript,
- das Angebot von Kursen und Codebeispielen.
Code Translator
Das Tool Code Translator von Carlos Aguilar Mares ist ein kostenloser Dolmetscher für Programmiersprachen im Internet [1]. Schon bei der Eingabe von Code erscheint darunter die Übersetzung inklusive Einfärbung von Schlüsselwörtern (Bild 1). Auch das Hochladen einzelner Dateien ist möglich. Code Translator spricht Visual Basic, C#, Java und TypeScript.
Einfacher VB-Code lässt sich gut in C# umwandeln. Auch generische Klassen werden unterstützt. Neuere Sprachkonstrukte wie LINQ oder Lambda-Ausdrücke kennt Code Translator zwar nicht, übersetzt diese aber trotzdem fröhlich – in offensichtlich falsches C#, ohne bedrohliche Fehlermeldungen anzuzeigen. Dieser Optimismus hat fast schon etwas Sympathisches.
VaryCode
VaryCode läuft ebenfalls im Browser und kennt Visual Basic, C#, Java, Ruby, Python und Boo [2]. Die zu übersetzende Programmiersprache erkennt der Dienst bei der Eingabe automatisch (Bild 2).
Anders als Code Translator beherrscht VaryCode alle aktuellen Sprachkonstrukte, übersetzt aber ausschließlich syntaktisch korrekten Code und vollständige Klassen. Vor allem Letzteres verleitet leicht zu dem falschen Eindruck, dass der Konverter nicht funktioniert; der Versuch, die schlichte Codezeile Dim i As Integer umzuwandeln, ruft im Ausgabebereich ein sehr einsilbiges error hervor.Ist man sich aber der Einschränkungen bewusst, erhält man gute Ergebnisse. Windows-Forms-Designer-Code und VB-spezifische Eigenheiten wie untypisierte Konstanten oder Eigenschaften mit Parametern übersetzt das Tool allerdings nicht korrekt.In der kostenlosen Variante begrenzt VaryCode die Anzahl der Konvertierungsvorgänge pro Tag und die Menge des übersetzten Codes. Darüber hinaus gibt es Angebote für 20 bis 180 US-Dollar pro Monat mit weniger oder ganz ohne Beschränkungen.
Instant C#
Instant C# [3] ist ein kommerzielles Desktop-Tool (Bild 3). Der Fokus liegt hier auf dem Konvertieren ganzer Projekte und Projektmappen von Visual Basic in C#.
Die Handhabung ist geradlinig und intuitiv: Projekt oder Projektordner auswählen, Zielordner angeben und auf Convert klicken, um die Umwandlung zu starten. Die Spalte Original Messages in der Conversion history-Tabelle zeigt mit der Anzahl von notes und ToDo, wie viel manuelle Arbeit wohl noch ansteht. Im Test schien der Hinweis auf „Formerly VB project-level imports“, der konsequenterweise in jeder konvertierten Klasse angemerkt wird, recht überflüssig. Erfreulicherweise lässt sich das Tool sehr weitgehend konfigurieren, und so kann der unerwünschte Hinweis über Options | Conversion Message Options ausgeschaltet werden (Bild 4).
Instant C# meistert Lambda-Ausdrücke, LINQ-Abfragen und konvertiert auch Windows-Forms-Code. Die VB-Fehlerbehandlung mit On Error Goto / On Error Resume Next hat es im Test erkannt und kommentiert, allerdings fehlerhaft oder in nicht kompilierbaren C#-Code übersetzt.Insgesamt wirkt der Konverter durchdacht und solide. Das Merkmal Compare Code Files(Bild 5), mit dem der misstrauische Entwickler komfortabel Datei für Datei Originalcode und konvertierten Code gegenüberstellen kann, hilft bei der abschließenden Qualitätsprüfung. Eine Einzellizenz von Instant C# kostet 159 US-Dollar.
VB.NET to C# Converter
Ein weiteres Tool, das Visual Basic in C# umwandelt, ist VB.NET to C# Converter [4] von VBConversions, mit knapp 500 US-Dollar je Einzellizenz das teuerste Werkzeug im Test. Es läuft wie Instant C# auf dem Desktop und kann mehrere Projekte gemeinsam konvertieren. Das Besondere bei diesem Tool sind der dreistufige Konvertierungsansatz und die Korrekturmöglichkeiten:Vor der eigentlichen Konvertierung werden VB-Eigenheiten oder Projekteigenschaften gesucht, die in C# Probleme machen könnten (Bild 6). Um die betreffenden Codestellen zu entschärfen, muss der Nutzer erfreulicherweise nicht zu Visual Studio wechseln, sondern öffnet per Klick auf den jeweiligen Hinweis die entsprechende Codedatei im internen Editor, der die entsprechende Stelle hervorhebt und es ermöglicht, sie direkt anzupassen. Mit der Schaltfläche Recheck Project lässt sich die Prüfung wiederholen.
Im zweiten Schritt stößt Convert to C# die eigentliche Konvertierung an und gibt gegebenenfalls Hinweise dazu auf der Registerkarte Conversion Notes (siehe Bild 7). Diese zeigt nach einer kurzen Erläuterung den VB-Code und den erzeugten C#-Code untereinander angeordnet an. Auch hier lässt sich der Code wieder direkt im Tool korrigieren; entweder in Visual Basic, um anschließend erneut zu konvertieren, oder im C#-Bereich. Letzteres ist nur bei einer Handvoll Korrekturen sinnvoll, denn diese Änderungen gehen bei einer erneuten Umwandlung verloren.
Der letzte Schritt ist die Kompilierung des generierten C#-Codes. Dadurch kommen Probleme ans Licht, die das Tool selbst nicht erkannt hat (Bild 8). Wiederum ist es möglich, im internen Editor zu korrigieren und dann die Konvertierung neu zu starten.
Wenn nichts hilft, dann hilft der hervorragende Support des Herstellers. Antwort auf E-Mail-Anfragen kam immer nach einem Tag. Korrigierte Versionen wurden innerhalb weniger Tage unkompliziert als Betaversion zum Download zur Verfügung gestellt.
Fazit
In Tabelle 1 ist eine zusammenfassende Übersicht über die getesteten Tools zu sehen. Die Software Code Translator empfiehlt sich, um mal eben die C#-Syntax für einen VB-Ausdruck herauszufinden, anstatt VB select case in C# in Stack Overflow zu suchen.Tabelle 1: Getestete Tools und Dienste
|
VaryCode hilft bei ganzen Klassen; für Mini-Projekte mit einer Handvoll Klassen kann das reichen.Wer größere Projekte von Visual Basic in C# umwandeln will, kommt um kostenpflichtige Werkzeuge wie Instant C# oder VB.NET to C# Converter nicht herum. Mit Letzterem hat der Autor kleine bis mittelgroße Anwendungen mit vertretbarem Aufwand zuverlässig in C# umgewandelt.An einer Legacy-Anwendung mit über 100.000 Zeilen Code inklusive VB6-Sprachelementen, Entity Framework, AutoMapper und vielem mehr ist der Konverter aber gescheitert. Die verbliebenen Fehler beim Kompilieren des C#-Codes per Hand zu korrigieren war unwirtschaftlich.Der zweite Teil zu diesem Thema in einer der nächsten dotnetpro-Ausgaben wird zeigen, wie Sie individuelle Codekonvertierungen selbst entwickeln können.
Fussnoten
- Code Translator, http://www.dotnetpro.de/SL1807CodeConverter1
- VaryCode, http://www.dotnetpro.de/SL1807CodeConverter2
- Instant C#, http://www.dotnetpro.de/SL1807CodeConverter3
- VBConversions, http://www.vbconversions.com