Question

J'ai un assemblage C # que j'utilise en tant que serveur COM in-proc consommé par une application C ++ non gérée. L'assembly utilise un service Web qui ne changera jamais. Il n'est donc pas nécessaire de mettre à jour les classes de proxy du service Web. C’est pourquoi les classes proxy sont créées une fois et les fichiers Reference.cs sont simplement placés dans le référentiel et uniquement compilés à partir de celui-ci.

Le problème est que, par défaut, les classes de proxy Webservice sont publiques et sont donc exposées à COM. Cela gonfle le typelib et pollue le registre. Changer la visibilité en interne rompt l’assemblage, de sorte que ces entités doivent rester publiques mais ne doivent pas être exposées à COM.

La méthode idiote consiste à approcher chaque interface / classe publique dans les fichiers Reference.cs et à la marquer avec

.
[System.Runtime.InteropServices.ComVisible(false)]

Après cela, il n'est plus exposé à COM.

Y a-t-il un meilleur moyen?

Était-ce utile?

La solution

Vous pourriez

  • marque l'assembly pour ne pas être ComVisible , puis marque explicitement toutes les interfaces / classes / enums que vous souhaitez exposer à COM comme ComVisible .
  • utilisez un deuxième fichier et une classe partielle pour marquer vos types de proxy comme ComVisible (false)

    [System.Runtime.InteropServices.ComVisible(false)]
    partial class YourProxyType {} 
    
    [System.Runtime.InteropServices.ComVisible(false)]
    partial class AnotherProxyType {}
    
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top