ADOX in einer COM-fähigen DLL mit starkem Namen

30/09/2008 - 19:36 von Klaus Gollin | Report spam
Ich habe mit VS 2005 ein Projekt für eine DLL, die aber COM fàhig sein muss,
erstellt.

Beim Registrieren der DLL mit regasm.exe und der Angabe /codebase erhàlt man
die Warnung, dass die DLL einen starken Namen haben müsse.

Das habe ich behoben, indem ich eine snk Datei mit sn.exe erstellt und in
der AssemblyInfo.vb den Eintrag
"<Assembly: AssemblyKeyFileAttribute("xyz.snk")> "
hinzugefügt habe.

Nun habe ich zusàtzlich in mein Projekt die ADOX und JRL eingebunden.

Jetzt bekomme ich beim Erstellen der Assembly den Fehler:
"Assembly wurde nicht generiert: Die Assembly Interop.ADOX, auf die
verwiesen wird, hat keinen starken Namen."

Nun habe ich gelesen, dass man zusàtzlich noch in den Projekteinstellungen
unter Signierung den Haken bei "Assembly signieren" setzen müsse und dort
die snk-Datei (siehe oben, also xyz.snk) angeben solle.

Das klappt auch wunderbar. Ich kann das Projekt ohne Fehler erstellen.

Allerdings kann ich nun aus meinem Access Projekt (VBA) heraus eine Methode
der DLL, die ADOX nutzt, nicht mehr fehlerfrei aufrufen. Ich erhalte die
Fehlermeldung:

Laufzeitfehler 0x80070002:
Die Datei oder Assembly "Interop.ADOX, Version 2.8.0.0, Culture=neutral,
PublicToken=xxxxxxxxx" oder eine Abhàngigkeit davon wurde nicht gefunden.
Das System kann die angegebene Datei nicht finden."

(die xxxx stehn nur drin weil ich den Token nicht abschreiben wollte)

Andere Methoden und Eigenschaften der DLL können ohne Probleme verwendet
werden.

Ich habe auch schon versucht, auf den starken Namen zu verzichten - aber das
geht gar nicht. Dann kann ich innerhalb VBA noch nicht einmal ein Objekt aus
der DLL erzeugen.

Wer hat einen Tip, was hier falsch làuft? Im Moment sehe ich nàmlich keine
Möglichkeit tatsàchlich ADOX in meiner Assembly zu nutzen.

Vielen Dank für Eure Hilfe.

Klaus
 

Lesen sie die antworten

#1 Klaus Gollin
05/10/2008 - 11:49 | Warnen spam
Das "Problem" ist gelöst:

Laufzeitfehler 0x80070002:
Die Datei oder Assembly "Interop.ADOX, Version 2.8.0.0, Culture=neutral,
PublicToken=xxxxxxxxx" oder eine Abhàngigkeit davon wurde nicht gefunden.
Das System kann die angegebene Datei nicht finden."



Ich war davon ausgegangen, dass zumindest auf meinem Entwicklungssystem die
ADOX registriert sein müsste. Ein Blick in das Releaseverzeichnis offenbart,
dass dort eine Datei namens Interop.ADOX.dll residiert. Der Fehler wird also
dadurch umgangen, indem die besagte DLL ebenfalls mittels regasm.exe
registriert wird.

Ähnliche fragen