首页 > 解决方案 > COM 互操作不公开一些公共类

问题描述

我有一个用 VS 2017 构建的 .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 的一些原因和事情是什么?请问我该如何进一步解决这个问题?谢谢!

标签: c#.netcominteropcom-interop

解决方案


推荐阅读