C#类库不会注册COM

我正在尝试访问Microsoft Excel中的.NET类库。 要做到这一点,我知道.NET类库必须注册COM。 所以我试着去assembly信息和设置COM可见为true。 然后在生成选项卡上,我也为COM设置了Register for Interop。 我检查了AssemblyInfo.cs文件,它包含[assembly: ComVisible(true)] 。 但是由于某些原因,当我尝试在Excel中添加对类库的引用时,名称空间不会显示在列表中。 我做了一个没有任何内容的快速testing类库,并做了相同的事情(设置COM Vis = true,并注册COM Interop = true),并确实显示在可用的引用列表。 我无法弄清楚这两个阶级之间有什么不同。 我不确定我的class级是否实际上正在注册COM互操作。 有谁知道我能做些什么来解决这个问题?

补充:我曾尝试使用RegAsm手动注册类,但我得到以下消息… "RegAsm : warning RA0000 : No types were registered"

补充:我检查我的项目输出目录,我注意到一个types库文件(* .tlb)没有被创build时,我生成的项目。 我确信每个类都有它自己的GUID属性。 该项目不包含任何结构,接口或枚举。

好吧,我发现这个问题实际上是由两个问题引起的。 当我在Visual Studio中构build项目时,我注意到types库文件没有被创build。 我发现了一个警告,告诉我没有发现可以注册的课程,所以没有进行注册。 当我挖得更深一点时,我发现了这两条规则。 1.静态类不会向COM注册。 2.所有的类都必须有一个公共的默认构造函数来通过COM实例化

从MSDN:types必须有一个公共的默认构造函数通过COM实例化。 COM可以pipe理公共types。 但是,如果没有公共默认构造函数(不带参数的构造函数),COM客户端将无法创build该types的实例。 如果types以另一种方式实例化并且实例返回给COM客户端,则COM客户端仍然可以使用该types。 您可以包含接受这些types的variables参数的重载构造函数。 但是,接受参数的构造函数只能从托pipe(.NET)代码中调用。

在Excel中检查插件的安全性。 另外,请确保您将所有内容都logging到文件中,MS Office倾向于在运行插件时引发exception。