C# COM互操作不公开某些公共类

C# COM互操作不公开某些公共类,c#,.net,com,interop,com-interop,C#,.net,Com,Interop,Com Interop,我有一个用VS2017构建的.NET项目。选择“使程序集COM可见”选项,并对程序集进行强命名。然而,我的一些公共类并没有向COM公开 例如,假设我的命名空间是aa.bb。在这个名称空间中,我有各种公共类,比如foo、bar和xyz。我正在注册regasm/codebase/tlb:test.tlb,它说它导出了tlb并成功注册 检查注册表表明,只有一些公共类是公开的,而最重要的公共类不是。例如,它有aa.bb.foo和aa.bb.bar,但没有aa.bb.xyz 我使用/regfile:tes

我有一个用VS2017构建的.NET项目。选择“使程序集COM可见”选项,并对程序集进行强命名。然而,我的一些公共类并没有向COM公开

例如,假设我的命名空间是aa.bb。在这个名称空间中,我有各种公共类,比如foo、bar和xyz。我正在注册regasm/codebase/tlb:test.tlb,它说它导出了tlb并成功注册

检查注册表表明,只有一些公共类是公开的,而最重要的公共类不是。例如,它有aa.bb.foo和aa.bb.bar,但没有aa.bb.xyz

我使用/regfile:test.reg运行了regasm,它没有在其中添加任何关于xyz类的内容—只有foo和bar类。我还尝试通过以下操作将其明确列为com可见:

[ComVisible(true)]
public class xyz
然而,这没有什么区别


从ASP.NET c#等本机.NET代码中,我可以“使用aa.bb;”然后“xyz myObj=xyz.GetData();”这样就可以了。关于这个类为什么没有接触到COM,有哪些原因和事情需要寻找?如何进一步排除故障?谢谢大家!

请发布示例,尤其是那些没有显示的示例,但是将有效和无效的示例进行对比也是有教育意义的。COM不支持静态方法,这是COM只使用接口的必然结果。从GetData()方法声明中删除static关键字以继续。类似地,[ComVisible].NET类必须具有公共无参数构造函数。考虑创建一个XYZ工厂类,使其更适合于基于接口的编程风格。