Wie funktionieren hybride VB6 / .Net-Anwendungen in der realen Welt?

11

Ich verwalte eine VB6-Anwendung und wir untersuchen, wie Sie zu .Net migrieren können. Wir erwägen dies schrittweise, indem wir neue Funktionen in COM-sichtbaren .Net-Klassen implementieren und vorhandene Funktionen langsam migrieren. Ich habe einige lehrreiche 'Hello World'-Beispiele dazu gefunden und es funktioniert gut mit unserer App. Aber wie ist das reale Verhalten dieser Hybridanwendungen? Sind sie stabil und wartbar? Unser Programm zeichnet sich insbesondere dadurch aus, dass mehr Benutzer auf demselben Computer es verwenden, indem sie die Benutzerkonten wechseln.

BEARBEITEN: Die VB6-App liest Daten von einer USB-Verbindung und speichert sie in einer Access-Datenbank. Der Benutzer kann verschiedene Ansichten der Daten aufrufen. Die Daten werden in einem Hardwaregerät zwischengespeichert, sodass Unterbrechungen beim Lesen nicht schwerwiegend sind.

EDIT 4. Oktober 2015: Zeit für ein Follow-up: Wir sind immer noch dabei, den vorhandenen VB6-Code Schritt für Schritt durch .Net zu ersetzen. Zuerst haben wir die Datenzugriffsroutinen übernommen, dann die Geschäftslogik und derzeit wird ein Formular nach dem anderen in WPF konvertiert. Wir haben zwar jeden Code neu geschrieben, den wir konvertiert haben (in VB.Net), aber wir konnten dies langsam tun und gleichzeitig die Funktionalität verbessern. Die Hybridanwendung überlebte den Übergang zu Windows 8, 8.1 und 10.

EDIT 9. März 2018: Wir werden den vollständig konvertierten Code nächsten Monat veröffentlichen. Die Hybridanwendung wird mindestens ein Jahr länger unterstützt. Es zeigt hauptsächlich Probleme auf hochauflösenden Bildschirmen, funktioniert aber ansonsten einwandfrei. Um ehrlich zu sein, haben wir aufgrund beschädigter .NET Framework-Installationen und beschädigter Abhängigkeitsinstallationen (darunter SQL Server LocalDb) mehr Probleme mit der Unterstützung als mit Kompatibilitätsproblemen mit der VB6-Codebasis ...

Dabblernl
quelle
1
Was macht die "Legacy" -Anwendung? Einige weitere Details helfen bei der Beantwortung Ihrer Frage.
Darknight
Es gibt keine "USB-Verbindungen" mehr als Sie "PCI-Verbindungen" haben. Wahrscheinlicher ist, dass ein Gerät an einen USB-Bus angeschlossen ist und der Gerätetyp der wichtige Punkt ist.
Bob77

Antworten:

5

Ich hatte erstaunliche Erfolge bei der Bereitstellung von .NET für VB6 über COM-Schnittstellen. Auf diese Weise konnten wir zunächst eine große Menge an VB6-Code umgestalten und einen Upgrade-Pfad zu .NET einrichten. Denken Sie daran, dass idiomatisches VB6 nicht gut in C # oder sogar VB.NET übersetzt werden kann. Sie sollten also vorsichtig vorgehen.

Das einzige Problem, das wir hatten und das ziemlich ärgerlich war, war die übermäßige Anzahl von Neuerstellungen, die wir aufgrund von Änderungen an der öffentlichen COM-Schnittstelle durchführen mussten. Dies wurde durch Visual Make gemildert .

ChaosPandion
quelle
Vielen Dank. Könnten Sie bitte mehr über das Problem erklären, das Visual Make löst? Ich bin mir nicht sicher, ob ich das verstehe.
Dabblernl
@Dabblernl - Mit Visual Make können Sie ein Projekt erstellen, bei dem es sich um eine Sammlung von VB6-Projekten handelt, und diese in der richtigen Reihenfolge erstellen.
ChaosPandion
6

FWIW, meiner Erfahrung nach bietet die Notwendigkeit, eine VB6-App auf .Net zu aktualisieren, die ideale Entschuldigung für ein erneutes Schreiben. Sofern die ursprünglichen Programmierer keine brillanten Visionäre waren, lassen sich die in VB6 vorherrschenden Techniken nur selten sauber auf .Net übertragen.

Einige der Freuden, denen Sie begegnen werden:

  1. Am Ende erhalten Sie Verweise auf Microsoft.VisualBasic, die Sie wirklich nicht möchten.
  2. Es handelt sich um schwer zu findende Fehler, zum Beispiel, wenn der VB6-Teilstring (a, b, c) leise als a.SubString (b, c) gerendert wird und in Ihrem Gesicht explodiert, weil er in VB6 und 1-basiert war 0-basiert in .Net.
  3. Alle diese einfach zu codierenden impliziten Konvertierungen stammen aus dem Holzwerk, normalerweise auf dem ersten PC, der nicht "," als Listenbegrenzer und / oder "hat. als Dezimaltrennzeichen.
  4. Ihre konvertierten Klassen haben nicht das gewünschte Datenversteck, das eine Neugestaltung mit sich bringen sollte.

HTH

grinsender Mann
quelle
1
Sie sprechen einige sehr gute Punkte an. Dies sind einige der Gründe, warum ein erster Durchlauf des Codes zur Umgestaltung von schlechten Praktiken ein Muss ist. Im Idealfall sollten Sie sicherstellen, dass aktiviert Option Explicitist und alle Abhängigkeit von magischen impliziten Konvertierungen aufgehoben wird.
ChaosPandion
Danke, dass du mich aufgeheitert hast ;-) Aber es ist im Moment nicht das, was ich wissen möchte. Der wahre Bekehrungsalptraum steht noch bevor.
Dabblernl
1
@chaos Richtig. Tatsächlich beginne ich mit Explicit und wenn es keine Fehler mehr gibt, hebe ich es auf Strict auf, was viele, viele Probleme sinnvoll hervorhebt
grinsender
1
Ich habe von Teams gehört, die mit Flammenwerfern nach VB6-Code gesucht haben. Ich glaube, der Grund, warum dies für VB6-Code so viel häufiger vorkommt, ist, dass so viele VB- "Entwickler" zu Beginn keine Programmiererfahrung hatten. Dies wiederum schuf eine Vielzahl von schlecht gestalteten und codierten Anwendungen in freier Wildbahn, mit denen sich diese Generation von Fachleuten befassen konnte.
Es grunzt
1

Es sollte für Sie gut funktionieren, es gibt nichts Besonderes an schnellem Benutzerwechsel / mehreren Sitzungen, das Ihnen Probleme bereiten könnte.

Beachten Sie im Hinblick auf die Wartbarkeit, dass Hybrid-VB6 / VB.NET nur eine vorübergehende Lösung sein sollte: Ihr Plan sollte darin bestehen, im Laufe der Zeit vollständig auf VB.NET zu migrieren.

Dean Harding
quelle