.net - C# 类库不会注册 COM

标签 .net excel com-interop class-library

我正在尝试访问 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/

相关文章:

c# - 使用 C# 的 Microsoft.Office.Interop.Excel 生成具有预填充下拉值的 Excel 文件

.net - 为什么 Office PIA 无法正确安装到 GAC?

.net - 在 VS2017 中使用自定义程序集预览 SSRS 报告时出错

asp.net - ASP.NET v4无扩展URL功能在IIS 6.0上不起作用

Excel VBA - 在一系列日期上使用查找方法

vba - 通过VBA Excel从数字中删除小数

multithreading - 多线程服务器应用程序中的 COM 运行时故障

c# - 确保纯文本文件中存在一行的最有效方法

c# - C#中的双字节字符串比较

excel - 在带有 UDF 的单元格公式中使用内置枚举