编写COM-Visible的Assembly的最佳实践(C#)

总结了一下最近工作中编写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方法,也可能会生成不符合我需要的方法声明。后面我会显式地定义一个Interface。

4. 给每一个COM-visible的类都显式定义一个Interface,例如:

[ComVisible(true)]
[Guid("67F6AA4C-A9A5-4682-98F9-15BDF2246A74")]
[InterfaceType(ComInterfaceType.InterfaceIsDual)]
public interface IMyClass
{
}

InterfaceType应该根据实际需要来设置. Interface中应该只声明那些我想暴露出来的public方法。

你可能感兴趣的:(.NET,Development)