2010-11-18 2 views
3

Ich habe in Visual Studio 2008 eine stark signierte Assembly mit dem .NET 3.5-Framework erstellt (ich habe auch 2.0 Framework ausprobiert). Ich habe eine Klasse als COM sichtbar gemacht, und ich bin in der Lage, diese DLL im Objektbrowser von Visual Studio 6 für Visual Basic zu finden. Ich kann eine Exe in VB6 erstellen und diese exe direkt aus Windows Explorer ausführen, und alles funktioniert gut. Allerdings, wenn ich versuche, das VB6-Projekt in Visual Studio 6 die .NET-Assembly will nicht laufen mit dem folgenden Fehler laden und fehlschlägt:Visual Studio 6 kann eine in .net 2.0 kompilierte COM-DLL nicht laden

ActiveX component can't create object 

ich diesen Fehler auch oben statt des einen bekommen, je auf, wie ich die dll registrieren:

-2147024894 File or assembly name (myComponentName), or one of its dependencies, was not found. 

Oder diese:

-2146233082 Automation error 

ich alles versucht habe ich mir vorstellen kann. Es scheint, dass dies ein Problem mit der Art ist, wie VS6 im Debug-Modus läuft. Vielleicht ist die Umgebung anders mit einem fehlenden Pfad zu dieser oder einer anderen DLL. Ich habe dieses Problem auf zwei verschiedenen Entwicklungsmaschinen. Ich kann auch auf eine COM.NET-DLL verweisen, die von einem anderen Entwickler mit einer älteren Version von Visual Studio .NET erstellt wurde. Ich öffnete sogar die DLL mit Abhängigkeit Walker und ich habe keine offensichtlichen Fehler bekommen.

UPDATE: Proc Monitor sagt, dass VB6 für meinen dll sucht in dem VB6 Studio Home-Verzeichnis "C: \ Programme \ Microsoft Visual Studio \ VB98 \ MyDLL.DLL" statt, wo die DLL registriert ist . Ich legte dort die dll und registriert es, jetzt bin ich einen neuen Fehler bekommen:

-2146234105 (80131107) "The format of the file 'MyDllName' is invalid." 

Also, warum ist Studio suche meine DLL da und nicht dort, wo es registriert? Wie kann ich das beheben? Am allerwenigsten, wie kann ich die dll bekommen in der Arbeit "C: \ Programme \ Microsoft Visual Studio \ VB98 \" Ordner

Schluss Update/LÖSUNG: Ok, also herausgefunden ich das Problem, . Dies hat damit zu tun, dass VB6.exe von der .NET-Framework-Version, die ich verwendete, ausgeschlossen wurde (2.0 oder 3.5). Ich fand diese Datei „C: \ Programme \ Microsoft Visual Studio \ VB98 \ vb6.exe.config“, die den folgenden Eintrag enthalten:

<configuration> 
    <startup> 
     <supportedRuntime version="v1.1.4322" /> 
    </startup> 

Sobald ich diese Datei die DLL entfernt zu arbeiten begann fein aus der Visual Studio 6-Umgebung. Danke an alle, die auf Hilfe geantwortet haben.

+2

Meine Vermutung ist, dass etwas in Ihrem Betriebssystempfad gültig ist, das eine Ihrer verwalteten Referenz-DLLs lädt oder nicht. Wie ich an VS6 erinnere, ignoriert es die OS-Pfade, so dass Sie den Pfad zu VS6 hinzufügen müssen. – kenny

+0

Überprüfen Sie einfach - Sie haben .NET 2.0 installiert auf der Box mit Visual Studio 6, ja? –

+0

Ich habe Visual Studio 6, 2005 und 2008 installiert ... und 2005 oder 2008 .net 2.0 damit installiert. Die DLL läuft gut, wenn sie von einem anderen studio 2008-Projekt aufgerufen wird, oder wenn sie in der VB6-App verwendet wird, wenn sie von Windows-Shell (Explorer) aufgerufen wird. Nur VB6 IDE-Umgebung funktioniert nicht. – Alex

Antwort

3

Ok, also habe ich das Problem herausgefunden. Dies hat damit zu tun, dass VB6.exe von der .NET-Framework-Version, die ich verwendete, ausgeschlossen wurde (2.0 oder 3.5). Ich fand diese Datei „C: \ Programme \ Microsoft Visual Studio \ VB98 \ vb6.exe.config“, die den folgenden Eintrag enthalten:

<configuration> 
    <startup> 
     <supportedRuntime version="v1.1.4322" /> 
    </startup> 

Sobald ich diese Datei die DLL entfernt zu arbeiten begann fein aus der Visual Studio 6-Umgebung. Danke an alle, die auf Hilfe geantwortet haben.

2

Eine häufige Ursache für den ersten Fehler ist die Ausführung von Regasm.exe ohne die Befehlszeilenoption/codebase.

Der 2. Fehler ist 0x8007002, ein Windows-Fehler, "Datei nicht gefunden". Dies wird wahrscheinlich durch eine Ausnahme in Ihrem verwalteten Code verursacht.

Der dritte Fehler ist 0x80131506, der verwaltete Ausnahmecode für "Fatal execution engine error". Das ist ein schlechter Fall, der normalerweise dadurch verursacht wird, dass nicht gemanagter Code den müllsammelnden Heap beschädigt.

Offensichtlich haben Sie keine Registrierungsprobleme, Sie erhalten verwaltete Ausnahmen. Aber sie sind schwer zu diagnostizieren, wenn Sie die netten .NET-Ausnahmen mit ihren Stack-Traces nicht mehr sehen können. Beheben Sie dies mit dem Debugger. Projekt + Eigenschaften, Registerkarte Debug, wählen Sie "Start externes Programm" und wählen Sie Ihr vb6 Programm. Legen Sie einen Haltepunkt für den Code fest, den Sie testen möchten. Es wird getroffen, sobald das vb6-Programm es aufruft.Debug + Exception, Throwed checkboxes ist ein weiterer guter Weg, um behandelte Exceptions zu behandeln, der Debugger stoppt bei der throw-Anweisung. Auch wenn es nicht Ihr Code ist, der wirft, sehen Sie sich den Call-Stack an.

Sie können sogar vb6.exe aus dem VS6-Installationsverzeichnis auswählen. Jetzt können Sie sowohl den vb6-Code als auch den verwalteten Code debuggen.

+0

Vielen Dank für den Vorschlag. Leider habe ich die gleichen Ergebnisse wie vorher. Beim Start des kompilierten vb6 exe-Programms hat alles super funktioniert, ohne Fehler. Als ich wählte, um mit vb6.exe zu beginnen, bekam ich den gleichen 8007002 Fehler, wie ich vorher erhielt. Dies scheint keine verwalteten Ausnahmen zu sein. Möglicherweise ein Pfadproblem in VS6 IDE, wie andere in den obigen Posts erwähnen, aber ich konnte das noch nicht lösen. – Alex

+2

Die Verwendung von COM erzwingt die Umsetzung aller verwalteten Ausnahmen in einen Fehlercode. Ja, nicht der vollständige Pfad eines Dateinamens ist eine wahrscheinliche Fehlerquelle. Mit dem ProcMon.exe-Tool von SysInternals können Sie sehen, dass es nach der Datei sucht und fehlschlägt. Der Dateiname sollte Ihnen einen ziemlich großen Hinweis geben. –

+0

Sie haben Recht! Der Proc-Monitor sagt, dass VB6 im Home-Verzeichnis "C: \ Programme \ Microsoft Visual Studio \ VB98 \ MyDLL.DLL" nach meiner DLL sucht und nicht dort, wo die DLL registriert ist. Ich habe die DLL dort abgelegt und registriert, jetzt bekomme ich einen neuen Fehler: -2146234105 (80131107) "Das Format der Datei 'MyDllName' ist ungültig." – Alex

Verwandte Themen