Pregunta

Tengo un ensamblado C # que uso como servidor COM en proceso consumido por una aplicación C ++ no administrada. El ensamblaje consume un servicio web que nunca cambiará, por lo que no hay necesidad de actualizar las clases proxy del servicio web. Es por eso que las clases proxy se crean una vez y los archivos Reference.cs simplemente se colocan en el repositorio y solo se compilan desde allí.

El problema es que, de forma predeterminada, las clases proxy del servicio web son públicas y, por lo tanto, están expuestas a COM. Esto infla el registro typelib y contamina. Cambiar la visibilidad para romper internamente el ensamblado, por lo que esas entidades deben permanecer públicas, pero no necesitan estar expuestas a COM.

La forma tonta es acercarse a cada interfaz / clase pública en los archivos Reference.cs y marcarla con

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

Después de eso ya no está expuesto a COM.

¿Hay una mejor manera?

¿Fue útil?

Solución

Podrías

  • marque el ensamblaje para que no sea ComVisible y luego marque explícitamente todas las interfaces / clases / enumeraciones que desea exponer a COM como ComVisible .
  • use un segundo archivo y una clase parcial para marcar sus tipos de proxy como ComVisible(false)

    [System.Runtime.InteropServices.ComVisible(false)]
    partial class YourProxyType {} 
    
    [System.Runtime.InteropServices.ComVisible(false)]
    partial class AnotherProxyType {}
    
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top