通过COM公开C#控制台应用程序功能

时间:2014-12-29 12:17:38

标签: c# visual-studio com

我们有一个C#控制台应用程序项目,我们也希望通过COM公开它的一些功能。什么是明智的方式来解决这个问题?

  1. 收集“库”项目中的常用功能,并将其添加为控制台应用程序项目和新的dll(COM)项目的参考?
  2. 保持控制台应用程序项目不变,并在此项目中通过COM公开方法(这是否可能?你可以在exe文件上运行regasm吗?)
  3. 保持控制台应用程序项目不变,添加一个dll(COM)项目,并以某种方式利用控制台应用程序项目中的类?

2 个答案:

答案 0 :(得分:1)

第一个选项。实际上,每当创建COM +服务时,您应该按照以下步骤进行操作:

  1. 创建一个类库。
  2. 创建所有类,以便它们从System.EnterpriseServices.ServicedComponents类继承。
  3. 创建一个程序集。
  4. 创建一个强名称。
  5. MSDN reference

答案 1 :(得分:1)

CLR和COM实际上都不关心您的程序是EXE文件而不是DLL。程序集按其显示名称定位,该名称不包含文件扩展名。 CLR首先查找与显示名称相同的文件,并附加.exe,然后尝试.dll

因此使用Regasm.exe很好,它将在运行时像DLL一样加载。唯一的区别是您的Main()方法不会运行。你不会得到控制台窗口,你当然不想要一个。并且您的[ComVisible]类必须是公共的,在EXE程序中使用它们时并不是绝对必要的。

以这种方式做这件事的唯一真正的伤亡是,接管维护代码工作的人将遭受巨大的困惑。你需要像待杀人的疯子一样对待你的生活。所以不要这样做,选择1是明智和安全的。