2010-08-20 8 views
51

Was genau macht die VS-Projektoption "Register for COM interop"? Wenn ich meine Bibliothek mit dieser aktivierten Option erstelle, kann ich CreateObject in meiner Bibliothek von VBScript aufrufen. Aber wenn ich ohne diese erstellen und dann regasm manuell ausführen CreateObject fehlschlägt. Ich frage mich also: Was macht VS2010, was ich nicht mache?Was macht "Register for COM Interop" eigentlich?

Antwort

50

Es funktioniert genauso wie die Ausführung von Regasm.exe mit den Optionen/tlb und/codebase. Die Option/codebase ist wahrscheinlich die, die Sie vergessen haben. Regasm nimmt an, dass Sie die DLL in den GAC stellen und generiert eine Warnung, wenn Sie dies nicht tun. Die GAC ist in der Tat eine sehr gute Möglichkeit, DLL Hell zu vermeiden, immer ein COM-Problem. Aber nicht geeignet für Ihre Dev-Maschine, Sie möchten die GAC nicht verschmutzen, während Sie den Code entwickeln und testen. Es spielt nur auf dem Computer Ihres Benutzers eine Rolle, der wahrscheinlich mehreren Versionen ausgesetzt ist.

Die Verwendung der falschen Version von Regasm.exe auf einer 64-Bit-Maschine ist eine andere Möglichkeit, Probleme zu bekommen. Auf Ihrem Computer befinden sich normalerweise 4 Versionen. Stellen Sie sicher, dass Sie die 32-Bit- und 64-Bit-Versionen unterscheiden (c: \ windows \ microsoft \ framework vs. framework64), sie schreiben unterschiedliche Registrierungsschlüssel. Sie möchten den auswählen, der mit der Client-App kompatibel ist. Mit beiden ist auch in Ordnung, .NET-Code kann in beiden Modi laufen, aber ziemlich ungewöhnlich. Und unterscheiden zwischen den Versionen v2.0.50727 (.NET 2.0 bis 3.5SP1) und v4.0. Das Auswählen der richtigen Visual Studio-Eingabeaufforderung ist die halbe Miete.

+3

Vielen Dank! Ich benutzte die Option/codebase, aber es war offensichtlich die Verwendung der 64-Bit-Version anstelle der 32-Bit-Version. Explizit verwendete 32-Bit-Version und funktionierte wie ein Charme. – hackerhasid

+0

Beachten Sie, dass die Verwendung beider Versionen akzeptabel ist. Der .NET-Code kann auf beide Arten ausgeführt werden. –