Pergunta

Eu tenho um C # montagem que eu uso como um servidor COM in-proc consumida por um aplicativo não gerenciado C ++. O consome montagem de um webservice que nunca vai mudar isso não há necessidade de sempre atualizar as classes de proxy webservice. É por isso que as classes de proxy são criados uma vez e arquivos Reference.cs são simplesmente colocadas no repositório e só compilado a partir de lá.

O problema é que, por padrão as classes de proxy webservice são públicos e, portanto, estão expostos a COM. Isto faz a insuflação do registo Typelib e polui. Alterar visibilidade a ruptura interna do conjunto, então essas entidades precisam permanecer público, mas não precisa ser exposto a COM.

A forma muda é aproximar cada interface / classe pública nos arquivos Reference.cs e marcá-lo com

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

Depois que já não está exposta a COM.

Existe uma maneira melhor?

Foi útil?

Solução

Você poderia

  • marcar a montagem em si a não ser ComVisible e, em seguida, marcar explicitamente todas as interfaces / classes / enums você deseja expor para COM como ComVisible.
  • usar um segundo arquivo e classe parcial para marcar seus tipos de proxy para ser ComVisible(false)

    [System.Runtime.InteropServices.ComVisible(false)]
    partial class YourProxyType {} 
    
    [System.Runtime.InteropServices.ComVisible(false)]
    partial class AnotherProxyType {}
    
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top