Domanda

Ho un assembly C # che utilizzo come server COM in-proc consumato da un'applicazione C ++ non gestita. L'assembly consuma un servizio web che non cambierà mai, quindi non è necessario aggiornare mai le classi proxy del servizio web. Ecco perché le classi proxy vengono create una volta e i file Reference.cs vengono semplicemente inseriti nel repository e compilati solo da lì.

Il problema è che per impostazione predefinita le classi proxy webservice sono pubbliche e sono quindi esposte a COM. Questo gonfia il typelib e inquina il registro. La modifica della visibilità interna interrompe l'assemblaggio, pertanto tali entità devono rimanere pubbliche, ma non devono essere esposte alla COM

Il modo stupido è quello di avvicinarsi a ogni interfaccia / classe pubblica nei file Reference.cs e contrassegnarlo con

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

Successivamente non è più esposto a COM.

C'è un modo migliore?

È stato utile?

Soluzione

Potresti

  • contrassegnare l'assembly stesso in modo che non sia ComVisible e quindi contrassegnare esplicitamente tutte le interfacce / classi / enum che si desidera esporre a COM come ComVisible .
  • usa un secondo file e una classe parziale per contrassegnare i tuoi tipi di proxy come ComVisible(false)

    [System.Runtime.InteropServices.ComVisible(false)]
    partial class YourProxyType {} 
    
    [System.Runtime.InteropServices.ComVisible(false)]
    partial class AnotherProxyType {}
    
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top