2014-12-29 99 views
1

我們有一個C#控制檯應用程序項目,我們也希望通過COM公開其某些功能。什麼是明智的方式去做這件事?通過COM公開C#控制檯應用程序功能

  1. 在「庫」項目中收集常用功能,並將其添加爲控制檯應用程序項目和新的DLL(COM)項目的引用?
  2. 讓控制檯應用程序項目保持原樣,並在此項目中通過COM公開方法(這甚至有可能嗎?您可以在exe文件上運行regasm?)
  3. 保持控制檯應用程序項目照原樣,添加DLL(COM)項目,並以某種方式使用控制檯應用程序項目中的類?

回答

1

無論是CLR也不COM真正關心你的程序是一個EXE文件,而不是一個DLL。程序集按其顯示名稱定位,該名稱不包含文件擴展名。 CLR首先查找與顯示名稱相同的文件並附加.exe,然後嘗試使用.dll

因此,使用Regasm.exe是好的,它將在運行時像DLL一樣加載。唯一的區別是你的Main()方法不會運行。你不會得到控制檯窗口,你當然不想要一個。而你的[ComVisible]類必須是公開的,在EXE程序中使用它們時不是絕對必要的。

這樣做的唯一真正的傷害是大量的混淆,接管維護代碼工作的人將會受到影響。你需要像一個知道你住在哪裏的殺人瘋子對待。所以不要那樣做,選項1是明智而安全的選擇。

1

第一個選項。實際上,每當創建一個COM +服務時,您都應遵循以下步驟*:

  1. 創建一個類庫。
  2. 創建所有類,以便它們從System.EnterpriseServices.ServicedComponents類繼承。
  3. 創建程序集。
  4. 創建一個強名稱。

MSDN reference