«S’inscrire à COM Interop» vs «Rendre l’assemblage COM visible»

Quelle est la différence réelle entre ces deux options? Ce que je sais c’est:

S’inscrire à COM Interop
Cette option exécute regasm sur l’assembly et enregistre l’assembly en tant que composant COM (ou peut-être pas) dans le registre avec toutes les entrées de registre COM comme. Cette étape génère-t-elle un fichier TLB? Que fait-on d’autre?

Parfois, je vois qu’un code est généré lorsque je comstack le projet mais parfois pas, pourquoi?

Rendre l’assemblage COM visible
Quel effet cela a-t-il sur un assemblage? Si j’ai le type suivant dans cet assemblage, dois-je toujours spécifier “Rendre l’assembly COM visible” même si mon type est marqué comme ComVisible?

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

    “Rendre l’assemblage COM visible” est un gros marteau pour rendre tous les types publics dans l’assemblage [ComVisible]. Rarement souhaitable, vous voudrez sélectionner les types spécifiques que vous souhaitez voir, comme vous l’avez fait dans votre extrait de code.

    Une fois l’assembly créé, il doit être enregistré pour qu’un client COM puisse le retrouver. Qui utilise uniquement un nombre pour identifier l’object qu’il veut créer, le GUID, une recherche supplémentaire est nécessaire pour savoir quelle DLL l’implémente. L’inscription implique l’écriture de clés dans la partie HKLM\Software\Classes\CLSID\{guid} du registre. Vous pouvez le faire vous-même en exécutant Regasm.exe /codebase /tlb ou vous pouvez laisser le système de compilation le faire automatiquement après la construction de l’assemblage.

    C’est ce que fait “Register for COM interop”. Cela est souhaitable car cela garantit que l’ancienne copie de la DLL est automatiquement désenregistrée avant d’être écrasée, ce qui empêche la pollution du registre. VS doit s’exécuter en élévation pour avoir un access en écriture à ces clés de registre, une des raisons pour le rendre facultatif. Ou vous ne voulez tout simplement pas l’enregistrer, commun sur les serveurs de compilation. Je ne peux pas dire pourquoi vous n’obtenez parfois pas le fichier .tlb sans plus de diagnostics.