我正在尝试访问 Microsoft Excel 中的 .NET 类库。为此,我知道 .NET 类库必须向 COM 注册。所以我尝试进入我的程序集信息并将 COM Visible 设置为 true。然后在构建选项卡上我也将 Register for COM Interop 设置为 true。我检查了 AssemblyInfo.cs 文件,它确实包含 [assemble: ComVisible(true)]
。
但由于某种原因,当我尝试在 Excel 中添加对类库的引用时,命名空间不会显示在列表中。我制作了一个没有任何内容的快速测试类库,并做了同样的事情(设置 COM Vis = true 和 Register For COM Interop = true ),并且该类库确实显示在可用引用列表中。我无法弄清楚这两个类之间有什么区别。我不确定我的类是否实际上正在注册 COM 互操作。有谁知道我能做什么来解决这个问题???
添加:我尝试使用 RegAsm 手动注册该类,但收到以下消息... “RegAsm:警告 RA0000:没有注册类型”
添加:我检查了项目输出目录,发现在构建项目时没有创建类型库文件 (*.tlb)。我确保每个类都有它自己的 GUID 属性。该项目不包含任何结构、接口(interface)或枚举。
最佳答案
好吧,我找到了问题所在,这实际上是由两个问题引起的。当我在 Visual Studio 中构建项目时,我注意到类型库文件没有被创建。我发现一条警告,告诉我没有找到可以注册的类(class),因此注册没有发生。当我深入挖掘时,我发现了这两条规则。 1.静态类不会向COM注册。 2.所有类必须有一个公共(public)的默认构造函数才能通过COM实例化
来自 MSDN:类型必须具有公共(public)默认构造函数才能通过 COM 实例化。托管的公共(public)类型对 COM 可见。但是,如果没有公共(public)默认构造函数(不带参数的构造函数),COM 客户端就无法创建该类型的实例。如果以其他方式实例化该类型并将该实例返回给 COM 客户端,COM 客户端仍然可以使用该类型。您可以包含接受这些类型的不同参数的重载构造函数。但是,接受参数的构造函数只能从托管 (.NET) 代码中调用。
关于.net - C# 类库不会注册 COM,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2555789/