2009-06-24 52 views
1

我正在構建一個C#UI以與COM服務(.exe)進行交互。 VS2005 COM項目輸出一個有效的typelib(TLB),它由C#項目引用。但是,VS2005 C#項目堅持要註冊該服務以構建C#項目,即使在使用OLE對象查看器進行檢查時,typelib看起來完全有效。在沒有首先註冊COM服務的情況下構建.NET COMInterop項目

如果可能的話,我們寧可不在服務器上註冊服務。此外,調試版本不能將COM對象註冊爲服務,因爲這會使調試一般,特別是啓動代碼更困難(不能使用F5 - 啓動調試)。

我應該尋找什麼才能使其發揮作用?我是否需要註冊TypeLib?如果是這樣,爲什麼COMInterop會堅持讓服務或TLB註冊才能正確構建(並且,在VS2005的Win2003中是否有這樣的命令行工具)?

如果我記得正確的話,一旦我建立了一個引用Win2003防火牆COM對象的C#web服務,但是我們僅僅通過引用TLB文件而沒有在Win2000上構建它(它沒有這樣的東西)需要註冊,所以我不明白爲什麼這應該是一個問題了。

回答

0

通過向COM服務添加-regtypelib命令解決此問題,該服務調用AtlRegisterTypeLib函數,但不註冊該服務。不理想,因爲它會在構建服務器上留下注冊條目,但速度很快,而且工作正常。

2

您需要使用tlbimp.exe工具創建互操作程序集。並在您的項目中添加對此程序集的引用,而不是typelib。在這種情況下,building不需要註冊com服務器。

如果您不想再發布另一個程序集,則可以使用Reflector從生成的interop程序集中提取接口描述,並將它們作爲源文件包含到項目中。

+0

Upvoted你的答案,但只是註冊typelib更容易。 – 2009-06-24 18:30:33

相關問題