首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >当使用ComVisible(false)时,指定Guid有什么意义吗?

当使用ComVisible(false)时,指定Guid有什么意义吗?
EN

Stack Overflow用户
提问于 2010-02-27 08:02:33
回答 3查看 16.7K关注 0票数 41

在Visual中创建新的C#项目时,生成的AssemblyInfo.cs文件包含一个指定程序集GUID的属性。属性上面的注释声明它被使用“如果这个项目是公开给COM的”。

我的程序集中没有一个包含需要对COM可见的类型,所以我已经用[assembly: ComVisible(false)]标记了程序集。那么,指定GUID有什么意义吗?

我的感觉是答案是“否”--那么为什么默认的AssemblyInfo.cs文件同时包含[assembly: ComVisible(false)][assembly: Guid("...")]

编辑:

总结答复:

在它们之间,答案解释说,只有在使用COM互操作的情况下,才需要指定GUID。所以,在我的情况下,一个GUID是不必要的。

sharptooth进一步解释说,[assembly: ComVisible(false)]并不意味着不使用COM互操作,因为可以对单个类型重写ComVisible。正是由于这个原因,默认的AssembyInfo.cs同时包含[assembly: ComVisible(false)]和GUID。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-02-27 15:34:17

同时拥有[assembly: ComVisible(false)][assembly: Guid("...")]是非常合理的in certain cases。从一个空程序集开始,您可能希望将其中的某些内容公开给COM。因此,您可以将程序集标记为非ComVisible,然后将要公开的实体标记为ComVisible。这就是GUID默认存在的原因。

无论如何,如果您真的不想公开从程序集到COM的任何内容,请在项目设置中保留“”选项。

票数 19
EN

Stack Overflow用户

发布于 2010-02-27 15:17:55

在COM中,一致的GUID是绝对必要的。程序集:Guid属性生成类型库LIBID。当然,项目模板自动生成一个以确保程序员在s/他将ComVisible翻转为true时不会忘记提供一个模板。

如果没有提供程序集Guid,那么Tlbexp.exe从程序集名称、版本和公钥中合成一个。这还不够好,类型库已经有了一个版本。更改AssemblyVersion将生成不同的LIBID。特别糟糕的是,当您对版本使用自动增量选项(比如1.0.*)时,您可以快速地用大量的死TypeLib注册表项填充注册表。

长话短说,它避免了许多令人讨厌的灾难。

票数 9
EN

Stack Overflow用户

发布于 2010-02-27 08:11:33

不,没有真正的理由把它包括进去。除了在非常具体的COM互操作场景之外,这真的是非常不必要的。不过,我认为,拥有一个GUID可以通过反射访问,这可能会有一些有用的东西。但既然不能保证它的存在,你就不可能依赖它。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2346620

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档