我有一个t4模板,可以根据数据库表创建许多类。这些类需要暴露给COM,因此它们被声明为GuidAttribute
属性。GuidAttribute动态声明的类
每当我编译项目,说来测试的东西,在测试环境中进行注册,为每个类定义创建新的GUID,和我开始担心我可能会做坏事Windows注册表。 ..
如果我编译该项目,我有Class1
像
[ComVisible(true)]
[ClassInterface(ClassInterfaceType.AutoDual)]
[GuidAttribute("AAAAAAAA-AAAA-AAAA-AAAA-AAAAAAAAAAAA")]
public class Class1
{
...
}
,明天我想测试别的东西的定义和Class1
现在看起来像
[ComVisible(true)]
[ClassInterface(ClassInterfaceType.AutoDual)]
[GuidAttribute("BBBBBBBB-BBBB-BBBB-BBBB-BBBBBBBBBBBB")]
public class Class1
{
...
}
以前的GUID是否会保留在注册表中,还是注册过程足够聪明,可以从以前的注册中删除所有内容?
这整个问题可能来自于我的这些是什么的GUID用于无知,以及他们如何涉及到的CLSID,但事实上,他们是为了被宣布静态与类的定义,而我这样做动态地让我有些不安。
那么你会说明确地声明GUID对我来说是一个坏习惯吗?我只是这样做,因为我在另一个问题中读到,有必要让客户端*看到这个类的定义;例如,在将这些属性添加到类中之前,在VB6项目中,Intellisense不会显示成员信息... – ferc 2014-10-28 17:44:10
与[Guid]属性无关。 ClassInterfaceType.AutoDual是启动IntelliSense所需的类。本身并不是一个很好的方式,因为它暴露了太多的信息。明确声明接口并在实现它的类上使用ClassInterfaceType.None是更好的方法。 – 2014-10-28 17:48:18
我看到...是的,我刚刚从模板中删除它,成员都可见:)。关于你不使用AutoDual的建议......你对“太多的信息”有什么意思?你指的是像“Equals”,“GetType”这样的.NET方法吗?或者有什么比AutoDual属性更黑/更危险的事情? – ferc 2014-10-28 18:14:23