如何优雅地防止Web服务代理暴露给COM?

我有一个C#程序集,我用作非托管C ++应用程序使用的进程内COM服务器。 程序集使用一个永远不会改变的Web服务,因此不需要更新Web服务代理类。 这就是为什么代理类被创建一次而Reference.cs文件被简单地放入存储库并且只从那里编译。

问题是默认情况下,webservice代理类是公共的,因此暴露给COM。 这会使typelib和污染注册表膨胀。 将可见性更改为内部会破坏程序集,因此这些实体需要保持公开,但不需要向COM公开。

愚蠢的方法是接近Reference.cs文件中的每个公共接口/类并标记它

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

之后,它不再暴露给COM。

有没有更好的办法?

你可以

  • 标记程序集本身不是ComVisible ,然后显式标记要作为ComVisibleCOM公开的所有接口/类/枚举。
  • 使用第二个文件和部分类将代理类型标记为ComVisible(false)

     [System.Runtime.InteropServices.ComVisible(false)] partial class YourProxyType {} [System.Runtime.InteropServices.ComVisible(false)] partial class AnotherProxyType {}