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

时间:2009-10-30 13:11:39

标签: c# .net visual-studio com com-interop

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

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

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

标记它
[System.Runtime.InteropServices.ComVisible(false)]

之后,它不再暴露给COM。

有更好的方法吗?

1 个答案:

答案 0 :(得分:4)

你可以

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

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