COM Interop注册

tra*_*ter 6 .net c# com

我有一个.NET程序集,我向COM公开.该程序集有两个公共接口和一个公共类.当我构建程序集时,我收到此警告:

(assemblyName.dll)不包含可以为COM Interop注册的任何类型.

我的装配信息包括以下行.

[assembly: ComVisible(true)]
Run Code Online (Sandbox Code Playgroud)

大多数人在网上遇到这个问题,我发现,在他们的装配信息中用上面的行修复了它.这对我没有帮助.

我也尝试添加[ComVisible(true)]类和接口定义,它也没有帮助.

Joe*_*Joe 15

ComVisible类通常需要有一个公共默认构造函数.其成员通常也应仅引用ComVisible类型.

如果已在程序集级别指定了它,则无需在类上指定ComVisible(true).

但是,使用ComVisible类生成程序集的常用方法是:

  • 在程序集级别指定ComVisible(false).因此,只有明确标记为ComVisible(true)的类才会暴露给COM.

  • 定义一个显式的ComVisible接口:

例如

[
ComVisible(true),
GuidAttribute("..."),
Description("...")
]
public interface IMyComVisibleType
{
        // members...
     }
Run Code Online (Sandbox Code Playgroud)
  • 您的ComVisible类应指定ClassInterfaceType.None,并应实现ComVisible接口:

例如

     [
     ComVisible(true),
     GuidAttribute("..."),
     ClassInterface(ClassInterfaceType.None)
     ]
     public sealed class MyComVisibleType : IMyComVisibleType
     {
        // implementation ...
     }
Run Code Online (Sandbox Code Playgroud)

请注意,Guid和Description属性不是必需的,但可以帮助您更好地控制COM生成.

如果上述方法无效,请尝试发布一些示例代码,我相信有人可以提供帮助.