Gibt es einen Punkt in der Angabe einer Guid bei der Verwendung von ComVisible(false)?
Beim erstellen eines neuen C# - Projekt in Visual Studio erzeugt AssemblyInfo.cs-Datei enthält ein Attribut die Angabe einer Versammlung GUID. Die Bemerkung über das Attribut besagt, dass es verwendet wird, "wenn dieses Projekt ausgesetzt ist, COM".
Keiner meiner Assemblys enthalten Arten, die nicht sichtbar sein muss, um COM, also ich habe markiert meine Montage mit [assembly: ComVisible(false)]
. So gibt es einen Punkt in der Angabe einer GUID?
Mein Gefühl ist, dass die Antwort ist "Nein" - warum also nicht die Standard-AssemblyInfo.cs-Datei enthalten beide [assembly: ComVisible(false)]
und [assembly: Guid("...")]
?
Edit:
Zusammenfassung der Antworten:
Zwischen Ihnen, die Antworten, die erklären, dass die Angabe einer GUID ist erforderlich, wenn und nur wenn COM-interop verwendet wird. Also, in meiner situation, eine GUID ist nicht notwendig.
sharptooth erklärt weiter, dass [assembly: ComVisible(false)]
bedeutet nicht, nicht mit COM-interop, da es möglich ist, zu überschreiben ComVisible
für die einzelnen Typen. Es ist aus diesem Grund, dass die Standard-AssembyInfo.cs enthält sowohl [assembly: ComVisible(false)]
und eine GUID.
- Verwandte: stackoverflow.com/questions/18729489/...
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dass
[assembly: ComVisible(false)]
und[assembly: Guid("...")]
zur gleichen Zeit macht es durchaus Sinn in bestimmten Fällen. Beginnen Sie mit einer leeren Baugruppe und werden vielleicht wollen, um etwas von ihm zu COM. So markieren Sie die Baugruppe, wie nichtComVisible
und später daneben die Personen zu entlarven, wieComVisible
. Das ist, warum die GUID vorhanden ist standardmäßig.Unabhängig, wenn Sie wirklich nicht wollen, zu setzen, die nichts von Ihrer assembly COM-lassen Sie das "für COM-interop Registrieren" - option nicht aktiviert in den Projekteinstellungen.
Konsistente GUIDs sind absolut notwendig in COM. Der [assembly:Guid] - Attribut erzeugt die Typ-Bibliothek LIBID. Sicherlich die Projekt-Vorlage automatisch generiert, um sicherzustellen, dass der Programmierer nicht vergessen zu geben, wenn s/er kippt ComVisible true.
Wenn eine Versammlung [Guid] ist das nicht vorgesehen, dann Tlbexp.exe synthetisiert man aus der assembly (name, version und public key. Das ist nicht wirklich gut genug, geben die Bibliotheken bereits eine version. Ändern [AssemblyVersion] erzeugen würde, eine andere LIBID. Besonders schlimm, wenn Sie die auto-Inkrement-option für die version (wie 1.0.*), Sie könnte sich schnell füllen Sie die Registrierung mit einem Berg von Toten TypeLib-Registrierungsschlüssel.
Lange Geschichte kurz, es vermeidet eine Menge von unangenehmen Pannen.
NÖ, keinen wirklichen Grund, es aufzunehmen. Es ist wirklich ziemlich unnötig, außer in sehr speziellen COM-interop-Szenarien. Aber ich nehme an, es könnte sein etwas nützlich, darüber, dass eine GUID, die Sie zugreifen können, mit Reflexion. Aber da es nicht garantiert ist, dort zu sein, es ist nicht so wie Sie könnten sich darauf verlassen.