none
Aktualisierung eines VB6-Projekts in VS 2008 funkt. nicht RRS feed

  • Frage

  • Betriebssystem: Vista Home Premium SP2, 32 Bit

    Öffnen eines VB6-Projekts in VS 2008. Es öffnet sich der Visual Basic-Aktualisierungs-Assistent.
    Die ersten 4 Schritte klappen ohne Probleme. Schritt 5 läuft ca. 10-15 Minuten einwandfrei, aktualisiert alles einwandfrei. Am Ende von Schritt 5 beim Schreiben der Projektdatei *.vbproj.user kommt die Fehlermeldung:

    Microsoft (R) Visual Basic-Aktualisierungstool funktioniert nicht mehr. Das Programm wird aufgrund eines Problems nicht richtig ausgeführt. Das Programm wird geschlossen und Sie werden benachrichtigt, wenn eine Lösung verfügbar ist.

    Nach dem Drücken des Buttons "Programm schliessen" bleibt der Assistent bei Schritt 5 am Ende stehen.

    In der Ereignisanzeige Anwendung findet sich folgende Fehlermeldung:

    Fehlerhafte Anwendung vbu.exe, Version 9.0.30304.0, Zeitstempel 0x47cd0138, fehlerhaftes Modul RSObjects.dll, Version 9.0.30304.0, Zeitstempel 0x47ccfb82, Ausnahmecode 0xc0000005, Fehleroffset 0x0003f042, Prozess-ID 0x19c4, Anwendungsstartzeit 01ca6c4127fdeedb.


    Wo liegt das Problem und gibt es einen Fix?

    Ich will dazu noch folgendes sagen, dass ich vor ca. 1 Jahr mit VS 2008 ein VB6-Projekt ohne Probleme mit dem Assistenen migriert habe. Dieses Projekt war vom Umfang her aber nur ca. 20% des jetzigen.  Diese Migration lief auf dem gleichen Rechner ab.
    Montag, 23. November 2009 14:08

Antworten

  • Hallo,

    Du kannst zwar mal probieren, ob die von Oliver empfohlene Reparatur Erfolg hat.

    Aber im allgemeinen ist der Migrationassistent bei größeren Projekten häufig überfordert.
    Mit wachsender Komplexität und je mehr Fremdkomponenten (OCX) enthalten sind,
    wird eine Migration auf dem Wege abenteuerlicher.

    Einen Fix wird man nicht auf die Schnelle erhalten, zumal der Fehler erst ermittelt werden müßte.

    Du kannst Du nur schauen, welche Dateien bereits erstellt wurden.
    Sollte es "nur" an der Projektdatei scheitern, so könnte diese manuell durch
    erstellen eines neuen Projektes und importieren der Ausgaben des Assistenten erstellt werden.

    Gibt es aber keine (wesentliche) Ausgabe, so müßtest Du Dein VB 6 Projekt in
    der Komplexität verringern, bis der Assistent einigermaßen zu Rande kommt.
    Und das Projekt so Schritt für Schritt migrieren.

    Gruß Elmar

    Montag, 23. November 2009 15:51
    Beantworter
  • Hallo Heinrich,

    welches die bessere Lösung ist, kann ich von hier aus nicht beurteilen, da ich die Interna des Projektes nicht kenne.

    Wenn fünf Formulare kaputt sind, dürften gerade dort Konstrukte vorkommen, die dem Assistenten nicht "schmecken".
    Und ob das durch ein Umgestalten besser wird, wage ich mal zu bezweifeln.

    Prüfen solltest Du, ob ein bestimmtes Steuerelement (vor allem von Drittherstellern)  der Verursacher ist.
    Wenn es Dir möglich ist, erstelle ein Standalone Projekt aus den fünf (oder weniger) Formularen und probiere damit.

    Je nach VB.NET Kenntnisstand auf Deiner Seite kannst Du die erzeugten Dateien untersuchen,
    inwieweit sie die Steuerelemente enthalten. Ggf. kann die Reduktiion auf weniger Elemente
     (auch hier vorzugsweise Fremd-Steuerelemente beachten) ein einbinden ermöglichen.

    Für alle Steuerelemente von Drittherstellern solltest Du probieren ob sie bei einem
    neuerstellten VB.NET Projekt richtig funktioneren. Gucke auch, ob es Aktualisierungen
    dafür gibt (das neuste, selbst wenn es mittlerweile ein paar Jahre alt ist).

    Eine weitere Möglichkeit: Trenne die funktionierenden Teile ab und füge sie als Klassenbibliothek hinzu.

    Gruß Elmar

    Dienstag, 24. November 2009 15:03
    Beantworter

Alle Antworten

  • Hallo,

    ich würde mal einen Reparaturlauf über die Visual Studio Installation starten. Die Konfiguration des Studios ist scheinbar nicht mehr in Ordnung.

    Schöne Grüße
    Oliver
    Montag, 23. November 2009 15:21
  • Hallo,

    Du kannst zwar mal probieren, ob die von Oliver empfohlene Reparatur Erfolg hat.

    Aber im allgemeinen ist der Migrationassistent bei größeren Projekten häufig überfordert.
    Mit wachsender Komplexität und je mehr Fremdkomponenten (OCX) enthalten sind,
    wird eine Migration auf dem Wege abenteuerlicher.

    Einen Fix wird man nicht auf die Schnelle erhalten, zumal der Fehler erst ermittelt werden müßte.

    Du kannst Du nur schauen, welche Dateien bereits erstellt wurden.
    Sollte es "nur" an der Projektdatei scheitern, so könnte diese manuell durch
    erstellen eines neuen Projektes und importieren der Ausgaben des Assistenten erstellt werden.

    Gibt es aber keine (wesentliche) Ausgabe, so müßtest Du Dein VB 6 Projekt in
    der Komplexität verringern, bis der Assistent einigermaßen zu Rande kommt.
    Und das Projekt so Schritt für Schritt migrieren.

    Gruß Elmar

    Montag, 23. November 2009 15:51
    Beantworter
  • Hallo Oliver und Elmar,

    Danke erst mal für Eure Hilfe.

    Gestern habe ich noch die von Oliver vorgeschlagene Reparatur von VS 2008 durchgeführt. Dies hatte leider keinen Erfolg. Absturz an der gleichen Stelle mit dem gleichen Fehler wie vorher.

    Auf den Hinweis von Elmar hin habe ich mir das bis zum Absturz erstellte Ergebnis angeschaut:

    Es sind wohl alle Module (*.bas) aus VB6 in entsprechende Module in VB.NET (*.vb) erstellt worden. Einige von diesen fehlten zwar in der Projektdatei im VS2008, aber die liessen sich manuell hinzufügen.

    Für alle Formulare in VB6 (*.frm) wurden wohl entsprechende Dateien *.vb, *.Designer.vb und *.resX erzeugt. In der Projekt-datei befinden sich alle diese Dateien bis auf die Ausnahme, dass bei 5 von diesen die Datei *.Designer.vb in der Projekt-Datei fehlt. Ein manuelles Hinzufügen von dieser führt zum Absturz des VS2008. Beim Öffnen aller Formulare mit dem Designer fehlen alle Controls. Der Code der entsprechenden Event-Handler wurde aber konvertiert und liegt vor.

    Die Aufgabenliste hat 1628 ToDos. Die Grössenordnung dürfte in etwa richtig sein. Bei meinem vor einem Jahr konvertierten waren es ca. 500.

    Zusätzlich startet der Visual-Studio Konvertierungs-Assistent jedes mal wenn ich die *.sln Datei öffne. Evtl. liegt das daran, dass laut Konvertierungsergebnis 2 Dateien nicht konvertiert werden konnten


    Als Option bieten sich nun an:
    A) Dem Hinweis von Elmar folgend, das Projekt in VB6 abspecken, um eine erfolgreiche Aktualisierung zu erreichen
    B) Auf dem jetzt entstanden Ergebnis aufsetzen

    Wo entsteht Eurer Meinung nach weniger Aufwand? Was ich sehr scheue ist das Bestücken aller WindowsForms mit allen Controls, um die gleichen Formulare wie in VB6 zu erhalten.
    Auf der anderen Seite war aber bei meiner alten Migration gerade wegen dem veränderten Event-Handling und vorallem dem Hauptmenu (das in meinem Code in VB6 Control-Arrays sind) sehr viel nachträglich manuell glatt zu ziehen.

    Folgende Fragen drängen sich noch auf:
    1) Gibt es evtl. noch eine andere Option ausser den beiden oben beschriebenen.
    2) Warum startet der Konvertierungs-Assisten immer wieder? Muss ich dazu die Konvertierungs-Probleme lösen?
    3) Gibt es einen anderen Weg die verloren gegangenen Controls zu erhalten?
    4) Stecken in der Option B noch irgendwelche Gefahren, die jetzt noch nicht zu sehen sind? Sprich jetzt stecke ich in Option B Aufwand rein und später kommt noch ein Killerkriterium.

    Danke schon mal im Voraus für Eure weitere Hilfe

    Viele Grüsse,
    Heinrich



     

     
    Dienstag, 24. November 2009 08:06
  • Hallo Heinrich,

    außer dem Upgrade Wizard des Visual Studios gibt es noch zwei weitere Migrationshilfen von Microsoft, die Du dir unbedingt mal ansehen solltest:

    Code Advisor for Visual Basic 6
    http://www.microsoft.com/downloads/details.aspx?familyid=A656371A-B5C0-4D40-B015-0CAA02634FAE&displaylang=en

    Upgrading Visual Basic 6.0 Applications to Visual Basic .NET and Visual Basic 2005
    http://www.microsoft.com/downloads/details.aspx?familyid=7C3FE0A9-CBED-485F-BFD5-847FB68F785D&displaylang=en

    Schöne Grüße
    Oliver
    Dienstag, 24. November 2009 08:24
  • Hallo Heinrich,

    welches die bessere Lösung ist, kann ich von hier aus nicht beurteilen, da ich die Interna des Projektes nicht kenne.

    Wenn fünf Formulare kaputt sind, dürften gerade dort Konstrukte vorkommen, die dem Assistenten nicht "schmecken".
    Und ob das durch ein Umgestalten besser wird, wage ich mal zu bezweifeln.

    Prüfen solltest Du, ob ein bestimmtes Steuerelement (vor allem von Drittherstellern)  der Verursacher ist.
    Wenn es Dir möglich ist, erstelle ein Standalone Projekt aus den fünf (oder weniger) Formularen und probiere damit.

    Je nach VB.NET Kenntnisstand auf Deiner Seite kannst Du die erzeugten Dateien untersuchen,
    inwieweit sie die Steuerelemente enthalten. Ggf. kann die Reduktiion auf weniger Elemente
     (auch hier vorzugsweise Fremd-Steuerelemente beachten) ein einbinden ermöglichen.

    Für alle Steuerelemente von Drittherstellern solltest Du probieren ob sie bei einem
    neuerstellten VB.NET Projekt richtig funktioneren. Gucke auch, ob es Aktualisierungen
    dafür gibt (das neuste, selbst wenn es mittlerweile ein paar Jahre alt ist).

    Eine weitere Möglichkeit: Trenne die funktionierenden Teile ab und füge sie als Klassenbibliothek hinzu.

    Gruß Elmar

    Dienstag, 24. November 2009 15:03
    Beantworter
  • Hallo Oliver und Elmar,

    die Links von Oliver kannte ich schon. Der Code-Advisor brachte für mich jetzt keine neuen Erkenntnisse, da ich nicht wusste, ob das Beheben der vom Code Advisor gefundenen Punkte in VB6 eine spätere Aktualisierung in VS 2008 ermöglicht.

    Allerdings fand ich im PDF das mir noch unbekannte Kommando-Zeilen Tool VBUpgrade, das ich dann auch gleich mit /VERBOSE startete. Es zeigte mir dann die Stelle, an der der Aktualisierungs-Assistent auch ausstieg. Ein sehr unauffälliges Modul und dann eben das Schreiben der Projekt-Datei, was mich in der Vermutung bestärkte, dass der Grund wohl die Grösse des Projekts ist.

    Jetzt folgte ich dann dem Hinweis von Elmar und splittete das Projekt in 2 nahezu gleich grosse Teile auf und siehe da VBUpgrade lief für beide Teile ohne Probleme durch. In VS2008 dann alles wieder zusammensetzen und jetzt habe ich ein VB.NET Projekt, in der alle Forms wieder ihre Controls haben. Meine Aufgabenliste ist auf 2684 Aufgaben angestiegen. Aus der Erfahrung meiner Migration vor einem Jahr weiss ich aber, dass 95% dieser Aufgaben in wenigen Stunden erledigt sind. Die restlichen 5% brauchen dann 1-2 Monate, von den Testaufwänden ganz zu schweigen.

    Seit dem Reparieren des VS2008 ist im VS kein Debugging mehr möglich. Unter Optionen / Debugging erscheint "Fehler beim Laden dieser Eigenschaftseite". Was könnte da der Grund sein?

    Vielen Dank für Eure Hilfe.
    Grüsse,
    Heinrich
    Dienstag, 24. November 2009 17:08
  • Hallo,

    durch das Splitten in zwei VB6-Projekte, extra Aktualisierung nach VB.NET und anschliessendes Zusammenführen sind zahlreiche Fehler in dem zusammengeführten Projekt durch nicht aufzulösende Referenzen in den 2 VB6-Teilprojekten entstanden. Das muss man wohl in Kauf nehmen.

    Hier ein Beispiel:

    Im VB6-Code

    FrmXXX.Show()

    Die Definition von FrmXXX war aber in dem VB6-Teilprojekt A nicht vorhanden, sondern in Teilprojekt B.

    Der Upgrader Macht daraus:

    DIM FrmXXX as Object

    'UPGRADE_WARNING: Die Standardeigenschaft des Objekts FrmXXX.Show konnte nicht aufgelöst werden. Klicken Sie hier für weitere Informationen: 'ms-help://MS.VSCC.v90/dv_commoner/local/redirect.htm?keyword="6A50421D-15FE-4896-8A1B-2EC21E9037B2"'
    FrmXXX.Show()

    Diese Fälle sind aber normalerweise leicht zu finden (AS OBJECT) und zu elliminieren.
     

    Mittwoch, 25. November 2009 09:24
  • Hallo Heinrich,

    Für das Problem mit dem Debugging das nicht mehr möglich ist:

    Versuch mal über die Befehlszeile folgendes ausführen:

    devenv /ResetSettings und devenv /ResetSkipPkgs

    Falls dies fehlschlägt, überprüfe das Verzeichnis Program Files\Microsoft Visual Studio 9.0\Common7\Packages\Debugger, ob es die Datei vsdebug.dll enthält.

    Grüße,

    Robert

    Donnerstag, 3. Dezember 2009 12:35
    Moderator