65.9K
CodeProject 正在变化。 阅读更多。
Home

编写 COM 可见性程序集的最佳实践 (C#)

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.93/5 (17投票s)

2013 年 6 月 28 日

CPOL

1分钟阅读

viewsIcon

83019

我根据最近的工作总结了一些编写 COM 可见性程序集的最佳实践规则。

引言

我根据最近的工作总结了一些编写 COM 可见性程序集的最佳实践规则。

  1. AssemblyInfo.cs 中,我编写了两个属性
    [assembly: ComVisible(false)]
    [assembly: Guid("64729ced-7a8d-4c90-af7f-a41725cfe216")] 

    它们表明我不希望所有 public 类都对 COM 可见,并且我不希望 Visual Studio 隐式生成一个随机 GUID 作为我的库 ID。

  2. 我取消选中了项目“**生成**”选项中的“**注册 COM 互操作**”复选框,因为我不希望 Visual Studio 在构建机器上注册程序集。
  3. 我像下面的示例一样编写每个 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。

  4. 我为每个 COM 可见的类显式地声明一个接口,如下例所示
    [ComVisible(true)]
    [Guid("67F6AA4C-A9A5-4682-98F9-15BDF2246A74")]
    [InterfaceType(ComInterfaceType.InterfaceIsDual)]
    public interface IMyClass
    {
    }

    InterfaceType 没有特殊规则。 这将取决于应用程序的需求。 我只在接口中声明了我想要暴露的方法。

© . All rights reserved.