C#:Regasm为我的COM DLL中的每个类生成注册表项?

Tom*_*lis 3 .net c# com registry regasm

我正在用C#编写一个类库(IE BHO),目前正在与我认为来自REGASM生成的注册表键的大量垃圾输出进行争论.

简短的版本是这样的:我只想向IE(以及COM的其余部分)公开一些类(目前:ONE类).只有一个类具有ClassInterfaceAttribute和GUID设置,我可以测试该加载项只需要此类的COM注册表项 - 然而,REGASM为整个项目中的每个类生成GUID和注册表项.

这很烦人,有点令人不安,因为我不希望我的班级名字坐在用户的注册表中,除非他们绝对必须在那里.

公平地说,许多其他类都被标记为公共,因为我在同一解决方案中的另一个项目的驱动程序应用程序中使用它们来解决IE的调试黑洞......

一般来说我对COM仍然非常环保(特别是与.Net有关),我想知道隐藏所有其他类的最佳方式是什么?或者,至少,为什么这些类 - 即使它们被标记为公共 - 在我没有为它们设置任何COM标志时出现?

谢谢!

sha*_*oth 5

internal访问修饰符用于不需要修饰符的东西public.对于真正需要public访问的东西,使用ComVisible属性来部分隐藏它.

例如:

[ComVisible(false)]
public class ClassToHide {
    //whatever
};

public class ClassToExpose {

     public void MethodToExpose() {}

     [ComVisible(false)]
     public void MethodToHide() {}
};
Run Code Online (Sandbox Code Playgroud)

默认情况下,所有公共类的所有公共成员函数和成员变量都是COM可见的.所以首先要考虑让它们成为内部的,如果你真的需要它们,那么公开将它们隐藏在COM与ComVisible中.