it-swarm.com.de

"Registrieren Sie sich für COM Interop" vs "Baugruppe COM sichtbar machen"

Was ist der wirkliche Unterschied zwischen diesen beiden Optionen? Was ich weiß ist:

Registrieren Sie sich für COM Interop
Diese Option führt Regasm in der Assembly aus und registriert die Assembly als COM-Komponente (oder vielleicht auch nicht) in der Registrierung mit allen COM-ähnlichen Registrierungseinträgen. Was wird noch gemacht?

Manchmal sehe ich, wie ein tlb generiert wird, wenn ich das Projekt kompiliere, manchmal aber nicht. Warum ist das so? 

Assembly COM sichtbar machen
Welchen Effekt hat dieser auf eine Assembly? Wenn ich den folgenden Typ in dieser Assembly habe, muss ich trotzdem "Make Assembly COM Visible" angeben, obwohl mein Typ als ComVisible markiert ist?

[GuidAttribute("02810C22-3FF2-4fc2-A7FD-5E103446DEB0"), ComVisible(true)]
public interface IMyInterface
{
}
63
A9S6

"Assembly COM sichtbar machen" ist ein großer Hammer, um alle öffentliche Typen in der Assembly [ComVisible] zu machen. Selten erwünscht, möchten Sie die spezifischen Typen auswählen, die sichtbar sein sollen, wie Sie es in Ihrem Snippet gemacht haben.

Nachdem die Assembly erstellt wurde, muss sie registriert werden, damit ein COM-Client sie wiederfinden kann. Die Nummer wird nur zur Identifizierung des Objekts verwendet, das er erstellen möchte, der GUID. Eine zusätzliche Suche ist erforderlich, um herauszufinden, was DLL implementiert. Beim Registrieren werden Schlüssel in den HKLM\Software\Classes\CLSID\{guid}-Teil der Registrierung geschrieben. Sie können dies selbst tun, indem Sie Regasm.exe /codebase /tlb ausführen, oder Sie können es dem Build-System überlassen, es nach dem Erstellen der Assembly automatisch auszuführen.

Welches ist, was "Register für COM-Interop" tut. Dies ist wünschenswert, da auf diese Weise sichergestellt wird, dass die alte Kopie der DLL automatisch vor dem Überschreiben unregistriert wird, wodurch die Verschmutzung der Registrierung verhindert wird. VS muss mit erhöhten Rechten ausgeführt werden, um über Schreibzugriff auf diese Registrierungsschlüssel zu verfügen. Dies ist ein Grund, warum es optional ist. Oder Sie möchten es einfach nicht registrieren, auf Build-Servern üblich. Ich kann nicht kommentieren, warum Sie die .tlb manchmal ohne weitere Diagnose nicht bekommen würden.

96
Hans Passant

Zusätzlich zu den Kommentaren in der ausgewählten Antwort wird die . tlb -Datei nicht erstellt, wenn sich die Typen oder Methoden geändert haben, ohne den entsprechenden Datensatz aus der Windows-Registrierung zu entfernen (oder die Anwendung oder den Dienst, der die Bibliothek verwendet, zu schließen). mit der Option/U des Dienstprogramms "RegAsm":

Regasm.exe yourlibrary.dll /codebase /tlb /u

Es ist auch wichtig zu erwähnen, dass die Registry für den Verbrauch der Bibliothek als COM nur auf dem Entwicklungscomputer funktioniert, wenn sie mit den Optionen Registrieren für COM-Interop und Assembly COM-Visible erstellen erstellt wird. . Sie müssen sie manuell in jedem Zielcomputer registrieren, indem Sie die angegebene Befehlszeile verwenden oder ein Skript generieren, das bei der Installation der Bibliothek ausgeführt wird.

Ich entschuldige mich für die Platzierung dieser Kommentare als Antwort, aber ich kann keine Kommentare in einen Beitrag einfügen, da 50 Rufpunkte angefordert werden.

0
César Qüeb