如何从 Framework 到 Framework 制作 COM hello world

How to make COM hello world from Framework to Framework

我的老板希望我将我们的产品作为 COM 参考提供。我正在尝试做一个简化的版本来了解我脑海中的概念,但我 运行 出错了。

复制步骤:

  1. 在 visual studio 中创建新的 class 库(创建新项目 -> 选择 "Class Library (.NET Framework) Visual C#"
  2. 向 Class1 添加 public 字符串,添加 ComVisible、Guid 和 ProgId 属性。
  3. 添加新接口,由 Class1 实现,该接口还具有 Comvisible 和 Guid 属性。
  4. 打开项目属性,转到构建部分并选中 'Register for COM interop'。
  5. 重建。
  6. 打开 visual studio
  7. 的第二个实例
  8. 创建第二个项目,再次选择'Class Library (.NET Framework) Visual C#'。
  9. 在第二个项目中单击 'Add Reference',然后单击 select 引用管理器的 COM 部分。
  10. 我们在第 5 步中构建的项目将会出现,请尝试添加它。

出现一条错误消息:

“无法添加对 'Project1' 的引用。

ActiveX 类型库“[path]\Project1.tlb”是从 .NET 程序集导出的,无法添加为引用。

改为添加对 .NET 程序集的引用。

我用谷歌搜索了这个错误并检查了一下,它似乎是 visual studio 的方式 'helpful',并告诉我有一种更好的方法可以从 Project2 引用 Project1 ,即直接引用,因为它们都是框架的一部分。

我的问题是,有什么办法可以解决这个问题吗?也就是说,任何方式告诉 visual studio 'I know you want to tell me a better way, but this is the requirement, just let me use COM?'.

如果不是,有什么办法可以解决这个问题,也许可以通过创建另一个不在框架中的项目,它可以使用 COM 引用 Project1,而 Project2 通过 COM 引用它本身?

感谢您的协助。

"The answer is in your error message. Add the. NET assembly as a .NET assembly; no need to go through COM"

先阅读Calling Managed C# COM Objects from C#

对这种情况的很好描述: Why can't a .NET COM library be used via COM in .NET?

还有: Is it possible to test a COM-exposed assembly from .NET?