1

与此相关的这个问题:

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

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

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

4

1 回答 1

1

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

  1. 您使用Guid属性显式指定 CLSID ,或者
  2. CLR 运行时会根据类的类型为您生成一个。我不知道确切的算法,除了它不是随机的(否则 CLSID 会随着构建而改变)。

因此,添加私有方法更改了类的类型数据,因此更改了 GUID;但作为一个接口显然不会影响 GUID 生成算法。

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

于 2013-10-05T03:36:32.830 回答