编写 COM 可见性程序集的最佳实践 (C#)
我根据最近的工作总结了一些编写 COM 可见性程序集的最佳实践规则。
引言
我根据最近的工作总结了一些编写 COM 可见性程序集的最佳实践规则。
- 在 AssemblyInfo.cs 中,我编写了两个属性
[assembly: ComVisible(false)] [assembly: Guid("64729ced-7a8d-4c90-af7f-a41725cfe216")]
它们表明我不希望所有
public
类都对 COM 可见,并且我不希望 Visual Studio 隐式生成一个随机GUID
作为我的库 ID。 - 我取消选中了项目“**生成**”选项中的“**注册 COM 互操作**”复选框,因为我不希望 Visual Studio 在构建机器上注册程序集。
- 我像下面的示例一样编写每个 COM 可见的类
[ComVisible(true)] [Guid("7884998B-0504-4CBE-9FF9-6BBAA9776188")] [ClassInterface(ClassInterfaceType.None)] [ProgId("MyNamespace.MyClass")] public class MyClass : IMyClass { }
在这里,我显式地将类声明为 COM 可见,并为其赋予一个
GUID
作为类 ID。 如果我没有指定一个,Visual Studio 将生成一个随机GUID
。 我使用ClassInterfaceType.None
来防止 Visual Studio 为该类自动生成接口。 自动行为会暴露我不想暴露的方法,并可能引入不需要的方法声明。顺便说一下,您可以显式地指定
ProgId
属性。 默认情况下,命名空间和类名将组合作为类的 ProgId。 - 我为每个 COM 可见的类显式地声明一个接口,如下例所示
[ComVisible(true)] [Guid("67F6AA4C-A9A5-4682-98F9-15BDF2246A74")] [InterfaceType(ComInterfaceType.InterfaceIsDual)] public interface IMyClass { }
InterfaceType
没有特殊规则。 这将取决于应用程序的需求。 我只在接口中声明了我想要暴露的方法。