VS 2005(VB .Net)に.NETプロジェクトがあると仮定します。このプロジェクトは、非GUICOMオブジェクトを使用します。このオブジェクトへの参照を追加すると、VSは相互運用DLLを作成します。しかし、別のプロジェクトのCOMオブジェクトに新しいメソッドを追加します。明示的に呼び出さずに相互運用DLLを更新するにはどうすればよいtlbimp
ですか?IntellisenseにこのCOMオブジェクトの新しいメソッドのリストを表示させたい。
1 に答える
私があなたを正しく理解していれば、あなたはあなたが更新しているオブジェクトをホストするCOMサーバー(明らかにインプロセス/ DLL)を持っています。そして、COMサーバーをまだコンパイルしていないときに、クライアントプロジェクトでIntelliSenseを介してこれらの更新を利用できるようにしたいですよね?
もしそうなら:これは不可能です。理由を説明しましょう:
IntelliSenseは、プロジェクトの参照用のドキュメントキャッシュのみを構築します。COMサーバーを参照することは、.NETプロジェクトを参照することと同じではありません。.NETプロジェクトの場合、コードモデルから直接ドキュメントキャッシュを構築できます。ただし、COMサーバーは通常、言語で記述されているため、コンパイラーは認識しません。tlbimp
COMサーバーを呼び出す.NETラッパーを生成します。IntelliSenseはラッパー(相互運用DLL、自動生成された.NET DLLにすぎません)を理解できますが、実際には何をしているのかは理解できません。したがって、常にラッパーを最新の状態に保つ必要があります。
COMサーバーに変更を加えるときはいつでも、(を使用して)登録する必要がありますregsvr32
。これにより、変更がクライアント(この場合は)に「表示」されますtlbimp
。次に、.NETプロジェクトへの参照を再度追加する必要があります。これにより、tlbimp
IntelliSenseが理解できる新しい相互運用機能DLLが生成されます。これが.NET環境でのCOMとの取引です...
ただし、ビルドプロセスをもう少し自動化することもできます。
- サーバープロジェクトで、
tlbimp
ビルド後のイベントを呼び出し、プライマリ相互運用機能アセンブリを作成します。 - PIAをGACに自動的にデプロイします。
- クライアントプロジェクト(.NETプロジェクト)で、PIAを参照します。
- 新しいサーバープロジェクトをビルドするたびに、クライアントプロジェクトのIntelliSenseキャッシュを更新します([編集]->[IntelliSense]-> [ローカルキャッシュの更新]、またはCtrl+ Shift+ R)。
お役に立てれば!