总结了一下最近工作中编写COM-visible的Assembly的最佳实践。
1. 在AssemblyInfo.cs中, 我设置了两个Attribute:
[assembly: ComVisible(false)]
[assembly: Guid("64729ced-7a8d-4c90-af7f-a41725cfe216")]
第一个Attribute表明我不希望Assembly中所有的public类都被自动标识为COM-visible;第二个Attribute表明我不希望Visual Studio为我的Assembly随机生成一个GUID作为它的Library ID。
2. 在项目属性的Build选项卡中,我把“Register for COM interop”的勾去掉了。这是因为我不希望Visual Studio在编译后自动把这个Assembly注册在开发机或者编译服务器上。
3. 每一个需要作为COM-visible的类,我都按照如下的例子来编写:
[ComVisible(true)]
[Guid("7884998B-0504-4CBE-9FF9-6BBAA9776188")]
[ClassInterface(ClassInterfaceType.None)]
public class MyClass
{
}
我在这里显式地声明一个类是COM-visible的,并且给它指定一个GUID作为COM的类ID,我不希望Visual Studio自动生成一个我在代码中看不到的GUID。我还使用了ClassInterfaceType.None来防止Visual Studio为这个类自动生成一个Interface,这种Interface会暴露出我不想暴露的public方法,也可能会生成不符合我需要