2009-06-24 14 views
1

COMサービス(.exe)と対話するためのC#UIを構築しています。 VS2005 COMプロジェクトは、C#プロジェクトによって参照される有効なタイプライブラリ(TLB)を出力します。ただし、VS2005 C#プロジェクトでは、OLEオブジェクトビューアで検証したときにタイプライブラリが完全に有効であるように見えても、C#プロジェクトを構築するためにサービスが登録されている必要があります。COMサービスを最初に登録せずに.NET COMInteropプロジェクトを構築する

可能であれば、ビルドサーバーにサービスを登録しないでください。さらに、デバッグビルドではCOMオブジェクトをサービスとして登録することはできません。これは一般的にデバッグを行い、特にスタートアップコードを難しくします(F5 - デバッグを開始できません)。

これを機能させるにはどうすればよいですか? TypeLibだけを登録する必要がありますか?もしそうなら、なぜCOMInteropは正しくビルドするためにサービスやTLBを登録しなければならないのですか?(これはVS2005のWin2003上でコマンドラインツールがありますか?

私が正しく思い出すと、Win2003ファイアウォールのCOMオブジェクトを参照するC#Webサービスを構築しましたが、Win2000のファイアウォールCOMオブジェクトを参照するC#Webサービスを構築しましたが、Win2000(これはない)登録が必要なので、なぜ今これが問題になるのか理解できません。

答えて

0

これを解決するには、AtlRegisterTypeLib関数を呼び出してもサービスを登録しないCOMサービスに-regtypelibコマンドを追加します。ビルドサーバーに登録エントリを残しますが、すばやく動作しますので、最適ではありません。

2

tlbimp.exeツールを使用してinteropアセンブリを作成する必要があります。また、typelibではなく、このアセンブリへの参照をプロジェクトに追加します。この場合、建物には登録されたcomサーバーは必要ありません。

別のアセンブリを出荷したくない場合は、Reflectorを使用して生成されたinteropアセンブリからインターフェイスの説明を抽出し、プロジェクトにソースファイルとして含めることができます。

+0

答えをアップしましたが、タイプライブラリを登録する方が簡単でした。 –

関連する問題