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

标签 c# .net com registry regasm

我正在用 C# 编写一个类库 (IE BHO),目前正在处理大量我认为是来自 REGASM 生成的注册表项的垃圾输出。

简短的版本是这样的:我只想向 IE(以及 COM 的其余部分)公开少数几个类(当前:一个类)。只有一个类设置了 ClassInterfaceAttribute 和 GUID 内容,我可以测试加载项只需要此类的 COM 注册表项——然而,REGASM 会为整个项目中的每个类生成 GUID 和注册表项。

这很烦人而且有点令人不安,因为我不希望我的类名位于用户注册表中,除非他们绝对必须在那里。

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

总的来说,我对 COM 还很陌生(尤其是与 .Net 相关的),我想知道什么是隐藏我所有其他类以防止重生的最佳方法?或者,至少,当我没有为它们设置任何 COM 标志时,为什么这些类——即使它们被标记为公共(public)的——会出现?

谢谢!

最佳答案

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

例如:

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

public class ClassToExpose {

     public void MethodToExpose() {}

     [ComVisible(false)]
     public void MethodToHide() {}
};

所有公共(public)类的所有公共(public)成员函数和成员变量在默认情况下都是 COM 可见的。因此,首先考虑将它们设为内部,如果您真的需要它们公开,则使用 ComVisible 从 COM 中隐藏它们。

关于C#:Regasm 为我的 COM DLL 中的每个类生成注册表项?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1016568/

相关文章:

c# - 是否可以在 C# 中释放变量?

c++ - 如何获取调用COM服务器方法的用户名?

c++ - 在 COM 对象上调用 Release 似乎永远不会返回

c# - 在网络浏览器中查看 pptx 文件

c# - .NET 应用程序位置中的离线安全性在代码中存储混淆 key

c# - 无需解包即可从存档中获取程序集文件版本

.net - 当从表单中删除另一个控件中引用的控件时,获取设计时通知

c++ - 我自己的 COM 组件上未注册类 (0x80040154)

c# - .slerp 的第三个参数

c# - 获取列表中属性设置为相同值的所有项目