如何确定Com + Class ID?

时间:2013-10-04 20:36:02

标签: c# interface com

与此this问题相关:

我有一个C#模板/项目,我必须将一些自定义代码放入其中。文档说“如果更改了除四个公共函数之外的任何代码,则COM +类ID可能会更改,并且对象安全脚本将无法运行,从而导致BSTCustomValidation.dll验证组件无法运行。”

模板工作正常,假设没有更改COM +类ID。当我添加了一堆私有方法时,COM + Class ID似乎发生了变化,验证失败了。但是,当我创建一个接口并让类继承它时,它通过验证就好了,大概是因为Com Class ID和原始模板一样。

为什么添加私有方法会更改Com + Class ID,但随后添加接口会将其更改回来。

1 个答案:

答案 0 :(得分:1)

C#(或其他CLR语言)以两种方式之一为COM可见对象生成CLSID:

  1. 使用Guid属性或
  2. 明确指定CLSID
  3. CLR运行时根据类的type为您生成一个。我不知道确切的算法,除了它不是随机的(否则CLSID会从构建变为构建)。
  4. 因此,添加私有方法会更改类的类型数据,因此更改了GUID;但作为一个接口显然不会影响GUID生成算法。

    如果要在没有接口的情况下添加私有方法,则获取当前GUID(例如,通过反射)并使用Guid属性明确指定GUID。