Visual Basic loswerden

Bild

Der Wendepunkt kam also, als wir beschlossen, zwei Projekte von VB nach C # zu übertragen. Wen kümmert es - ich bitte um eine Katze.

Einleitung


Wir haben diese Projekte von einer Vertragsorganisation erhalten, die sie über einen Zeitraum von 5 bis 6 Jahren geschrieben hat. Insgesamt sind dies laut dem Tool zur Metrikauswertung in Visual Studio etwa 1,5 Millionen Codezeilen, von denen sich etwa 30% auf C # und der Rest auf VB beziehen. Warum haben wir uns dazu entschieden? Höchstwahrscheinlich aufgrund der Zurückhaltung bei der Arbeit mit VB und des Mangels an guten VB-Entwicklern.

Die Fristen, die unser Management für eine vollständige Übersetzung der Projekte festlegte, strebten unaufhaltsam etwas nahe Null an, und auch die Kollegen der Vertragsorganisation hatten es eilig, sich von diesen Projekten zu trennen und aufatmen zu lassen. Nachdem wir alle dringenden Angelegenheiten aufgeschoben hatten, machten wir uns nach einigen Sitzungen an die Umsetzung dieser Idee.

Vorbereitung


Jedes Geschäft beginnt damit. Auch mit einem Zeitlimit und goldenen Händen sollte man nicht gleich in die Schlacht stürzen, wir haben auch gehandelt.

Aufgrund der spezifischen Unterschiede der Sprachen ist es erforderlich, das Projekt vorab auf die Konvertierung vorzubereiten. Wir haben mehrere Phasen identifiziert, nach denen der Konvertierungsprozess relativ schmerzfrei verläuft.

Warum ist es relativ?! Ja, da nach der Konvertierung in jedem Fall ein unbekanntes Programmverhalten festgestellt wird. Dies kann sofort angezeigt werden, wenn Ihr Code nicht zu 100% getestet wurde. In unserem Fall werde ich im Allgemeinen nichts zu den Tests sagen, da es überhaupt keine gibt. Dann überlegen Sie sich, welche Schritte wir identifiziert haben:

1) Ein Werkzeug für die Konvertierung auswählen

Dies ist eine sehr wichtige Etappe auf einem so schwierigen Weg, da die Geschwindigkeit und Qualität des Schneidens davon abhängt, welche Säge Sie wählen. Nach zahlreichen Fragen Google und Instant - CSharp und SharpDevelop Version 4.x (Version 5.x Konvertierung wird nicht unterstützt), was sehr seltsam ist, meiner Meinung nach , die Entscheidung: Treffen wir für zwei Produkte waren.

SharpDevelop ist kostenlos - dies ist zweifellos ein Pluspunkt, aber Instant CSharp hat eine kostenlose Version, die sich in der Funktionalität nicht von der kostenpflichtigen Version unterscheidet. Es gibt nur eine Beschränkung der Zeilenanzahl in einem konvertierten Projekt. Der Vorteil von Instant CSharp ist, dass es WinForms besser konvertiert. Er hat auch ein Minus - das ist die korrekte Konvertierung von nur UTF-Dateien .

Wir haben uns entschieden, Instant CSharp für kleine Projekte und SharpDevelop für alles andere zu verwenden.

2) Erstellung einer Liste von VB-Projekten und Erstellung eines Abhängigkeitsdiagramms

Dieser Schritt ist erforderlich, um klar zu verstehen, von welcher Seite aus die Arbeit aufgenommen werden soll. Ich gebe ein Beispiel für eines der Abhängigkeitsdiagramme, die wir haben:

Bild

Das Diagramm zeigt auch die Anzahl der Abhängigkeiten zwischen Projekten. Aus dem Diagramm und der Logik der Dinge geht hervor, dass die Reihenfolge der Konvertierung von Projekten von Projekten mit weniger Abhängigkeiten zu Projekten mit mehr Abhängigkeiten reicht.

3) Ersetzen von ReDim durch Array.Resize ()

Eine kleine Re-Klasse wurde geschrieben, um diesen Ersatz zu implementieren.

Public Class Re
    Public Shared Sub [Dim](Of T)(ByRef Source As T(), HighBound As Integer)
        //изменяем размер массива
        DimPreserve(Source, HighBound)
        //очищаем массив
        Array.Clear(Source, 0, HighBound + 1)
    End Sub
    Public Shared Sub DimPreserve(Of T)(ByRef Source As T(), HighBound As Integer)
        //изменяем размер массива
        Array.Resize(Source, HighBound + 1)
    End Sub
End Class

Außerdem wurden alle Aufrufe von ReDim Preserve X (N) durch Re.DimPreserve (X, N) und ReDim X (N) durch Re.Dim (X, N) ersetzt.

4) Aktivieren strenger Kompilierungsoptionen

Standardmäßig bieten .NET Visual Basic oder der Visual Basic-Compiler keine starke Typisierung. Um dieses Standardverhalten zu ändern, setzen Sie Option strict in den Projekteigenschaften auf der Registerkarte Compile auf on. Beheben Sie anschließend alle aufgetretenen Fehler.

Die folgenden Punkte sind selbsterklärend, da sie einfach und unkompliziert sind. Wir nehmen einfach ReSharper und führen alle unten beschriebenen Punkte mit der Schallgeschwindigkeit (oder sogar noch schneller) aus.

5) Ersetzen Sie für Werttypvariablen Nothing durch Default.
6) Ersetzen Sie And durch AndAlso und Or durch OrElse
7) Entfernen von Imports-Konstrukten, die auf Klassen verweisen
8) Ersetzen eines Methodenaufrufs der Form .Method durch .Method ()
9) Entfernen von Exit Try-Konstrukten
10) Ersetzen von Stringvariablen-Vergleichen durch Nothing oder "" oder von String.Empty nach String.IsNullOrEmpty ()
11) Ersetzen unnötiger ByRef-Direktiven durch ByVal für Methodenparameter
12) Umbenennen von Methoden mit eigenem Klassennamen 13) Korrigieren ungültiger Aufrufe ohne Berücksichtigung der
Groß- und Kleinschreibung im VB-Code

Umwandlung


Und so kamen wir zur letzten Phase - der Umbauphase. Das Tool ist ausgewählt, die Projekte sind vorbereitet und warten auf ihr Schicksal.

Nun - fangen wir an!

Der Konvertierungsprozess ist nicht komplizierter als das Programm Hello World, er dauert nur ein bisschen länger. Hier ist ein kleines Tutorial, wie dies in SharpDevelop und Instant CSharp gemacht wird.

Konvertieren Sie mit SharpDevelop
1. Kopieren Sie das VB.NET-Projekt in einen separaten Ordner.
2. Öffnen Sie das Projekt in SharpDevelop (Datei-> Öffnen-> Projekt / Projektmappe).
3. Konvertieren Sie das Projekt (Projekt-> Konvertieren-> Von VB.NET nach C #).
4. Öffnen Sie es in Visual Studio-Hauptlösung und Löschen des VB.NET-Projekts
5. Löschen Sie den Ordner mit dem VB.NET-Projekt.
6. Benennen Sie den Ordner und die Datei des in C # konvertierten Projekts um (entfernen Sie das konvertierte Wort).
7. Kopieren Sie den Ordner mit dem neuen Projekt in das Verzeichnis mit der Hauptlösung.
8. Fügen Sie der Lösung hinzu kopiertes Projekt
9. Fügen Sie in allen anderen Projekten, die Links zum alten (VB.NET) hatten, Links zum neuen Projekt (C #) hinzu. Zu diesem Zweck können Sie das Versionskontrollsystem-Tool verwenden, um Änderungen in * .csproj- und * .vbproj-Dateien anzuzeigen
10. Versuchen Sie das Projekt zu kompilieren. Beheben Sie Fehler

Konvertieren Sie mit Instant CSharp
Instant CSharp ist nicht mit ANSI befreundet , daher müssen Sie zuerst die Codierung der Quelldateien in UTF8 konvertieren.
Praktisches Dienstprogramm UTFCast Express
1. Öffnen Sie die Express UTFCast
2. Wählen Sie im Quellverzeichnis den Pfad zu dem Projekt angeben
3. Im Zielverzeichnis den Pfad zu dem Verzeichnis angeben , in dem die Projektdateien werden in der Codierung von UTF - 8 bewegt werden
4. Vystovit Kopieren nicht umgewandelten Option und starten Sie die Konvertierung

und nach dieser Tänze mit einem Tamburin Sie können das Projekt konvertieren.

1. Öffnen Sie Instant CSharp.
2. Geben Sie im Feld VB-Projekt oder -Lösung den Pfad zur Projektdatei * .vbproj an.
3. Geben Sie im Feld C # -Zielordner das Verzeichnis an, in dem das in C #
konvertierte Projekt gespeichert werden soll. 4. Konvertieren Sie das Projekt (Project-> Convert -> Von VB.NET nach C #)
5. Öffnen Sie die Hauptlösung in Visual Studio und löschen Sie das VB.NET-Projekt.
6. Löschen Sie den Ordner mit dem VB.NET-Projekt.
7. Kopieren Sie den Ordner mit dem neuen Projekt in das Verzeichnis mit der Hauptlösung.
8. Fügen Sie die Kopie zur Lösung hinzu Projekt
9. Fügen Sie in allen anderen Projekten, die Links zum alten (VB.NET) hatten, Links zum neuen Projekt (C #) hinzu. Zu diesem Zweck können Sie das Versionskontrollsystem-Tool verwenden, um Änderungen in * .csproj- und * .vbproj-Dateien anzuzeigen
10. Versuchen Sie das Projekt zu kompilieren. Beheben Sie Fehler

Fazit


Infolgedessen haben wir beide Projekte vollständig auf c # übertragen. Jetzt ist das Refactoring des Codes in vollem Gange, übrigens wird es nicht in der Werbung erwähnt, aber ReSharper ist in dieser Angelegenheit nicht ersetzbar . Während des Vorgangs treten manchmal Fehler im Zusammenhang mit der Konvertierung auf, aber dies ist leider unvermeidlich.

Ich hoffe, unsere kleine Erfahrung wird Ihnen von Nutzen sein, liebe Händler.

Referenzen


Instant CSharp
SharpDevelop

Jetzt auch beliebt: