Ich bekam den gleichen Fehler (konnte das .NET-Objekt nicht aus dem alten VB6-Code auf einer zweiten Dev-Maschine konsumieren, nachdem es auf einer ersten Maschine gearbeitet hatte, wo ich es ursprünglich geschrieben hatte). Die .NET-DLL kompiliert und registriert - ich habe alle möglichen Kombinationen ausprobiert - mit und ohne die Build-Einstellung "Für COM-Interop registrieren" in VS; Manuelles Registrieren über regasm.exe und das Ausprobieren sowohl mit als auch ohne den Parameter/codebase; habe versucht, sowohl das COM-sichtbare-Assembly-Level-Attribut zu aktivieren und zu unterdrücken (wenn ich es unterdrücke, setze ich das Attribut auf die Klasse, die ich von COM konsumieren muss). Aber nichts hat funktioniert, ich habe immer den gleichen Fehler bekommen.
Es stellte sich heraus, ich hatte die DLL-Ausgabe auf .NET 4 aktualisiert.5 auf der zweiten Maschine, während es ursprünglich eine .NET 2.0-Assembly baute. Mein Projekt hatte einige Referenzen, die auf Interop-DLLs von Drittanbietern gerichtet waren, auf denen .NET 2.0 ausgeführt wurde. Wenn ich diese Verweise entweder aktualisierte und das DLL neu erstellte, oder mein Projekt zurücksetzte, um auf .NET 2.0 ausgeführt zu werden, wurde mein Problem gelöst. Bei der Verwendung von /codebase (was VS automatisch tut) stellte ich fest, dass ich meine DLL nicht in das Anwendungsverzeichnis oder in \ syswow64 setzen musste. Auch die MSDN-Dokumentation besagt, dass Sie einen SN (starken Namen) für Ihre Assembly verwenden müssen, wenn Sie/codebase verwenden, aber ich habe festgestellt, dass Sie nicht müssen; Sie erhalten nur eine Warnung vom Befehlszeilentool regasm.exe.
Der Punkt ist, aus Sicht von COM Interop, seien Sie vorsichtig mit der .NET-Laufzeitversion Ihrer Abhängigkeiten in Bezug auf das .NET Framework, auf das Sie abzielen.
Ich habe versucht, regasm auf den vollständigen Pfad der Baugruppe, die in C: \ Temp befindet, aber immer noch den gleichen Fehler – ingt
Dann denke ich, Ihre beste Wette ist, ProcessMonitor zu starten - http://technet.microsoft.com /ru-ru/sysinternals/bb896645.aspx - und schaue, welche Datei genau nicht gefunden wird. Es könnte eine abhängige Versammlung sein, die dir überhaupt nicht bewusst ist. Sobald Sie sicher sind, wird es viel einfacher zu lösen sein. – sharptooth
sharptooth, danke * sehr * viel für diese Antwort. Es hat heute meine Haut gerettet! –