use*_*783 38 .net c# com guid comvisible
在Visual Studio中创建新的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.
一致的GUID在COM中是绝对必要的.[assembly:Guid]属性生成类型库LIBID.当然,项目模板自动生成一个,以确保程序员在他/她将ComVisible转换为true时不会忘记提供一个.
如果未提供程序集[Guid],则Tlbexp.exe将从程序集名称,版本和公钥中合成一个程序集.这还不够,类型库已经有了版本.更改[AssemblyVersion]将生成不同的LIBID.当您使用版本的自动增量选项(如1.0.*)时,特别糟糕,您可以使用大量死亡的TypeLib注册表键快速填充注册表.
长话短说,它避免了很多令人讨厌的事故.
归档时间: |
|
查看次数: |
15465 次 |
最近记录: |