2016-08-26 14 views
1

私はVB.netで特定の参照の追加とインポートを必要とする小さなコードを書くことがありました。開発用PCに多くのDLLをインストールして登録しましたが、[参照の追加]ダイアログボックスに移動すると、使用可能な参照のリストにその中のいくつかしか表示されません。プロジェクトへのCOM参照の追加:VB.netで利用可能な参照のリストを更新するには?

たとえば、ある特定の製品では、バージョン8,9,10のdllがインストールされていますが、バージョン8のみが表示されています。もう一方の2つは表示されず、「参照」オプションを使用して追加する必要があります私のプロジェクトに。

This is the list of References available in the "Add References" combo box

私の質問は: どのようにそれは私のPCにインストールされている参考文献の全てではないが、コンボリストに表示されていることをすることができますか? Visual Studioで既存の参照のリストを実現するにはどうすればよいですか?

は、COMコンポーネントではかなり一般的なバグが著者がとき彼LIBIDまたはバイナリタイプライブラリのバージョンを変更するのを忘れていることである

イグナシオPDEA レバノン、あなたの時間とよろしくため

答えて

1

をありがとうコンポーネントの新しいバージョンを作成します。彼はライブラリの[helpstring]属性を変更しましたが、これは人間のための文字列であり、コンパイルや実行時には何の役割も果たしません。 CLSIDのguidを変更するのを忘れることよりも劇的ではない間違いです。タイプライブラリは実行時に一般的に使用されるものではないので、コンポーネントが実行時に問題なく動作することは間違いありません。ただし、ワーカースレッドからコンポーネントを使用すると問題が発生する可能性があります。

しかし、古いマシンを登録すると、TypeLibレジストリキーのエントリが上書きされます。言い換えれば、最後に登録したものだけを見ることができます。作者が見逃しやすいのは、彼は通常、最新バージョンでしか動作しません。

これは深く調査する必要があります。彼はLIBIDを変更するのを忘れていたので、CLSIDとIIDのGUIDを変更するのを忘れているかもしれません。そして、それは激怒するDLL Hellを生み出します。あなたのプログラムは、気づかずに実行時にコンポーネントの間違ったバージョンを取得する可能性があります。常に非常にのトラブルシューティングが難しい場合、エンドユーザーは多くの場合、不運な犠牲者です。 Visual StudioのコマンドプロンプトからOleView.exeを実行し、古いDLLと新しいDLLでFile> View Typelibを使用します。タイプライブラリを逆コンパイルしてIDLに戻すと、あなたは明らかにguidを見ることができます。 guidsが変更されたことを再度確認します。

著者にこの間違いを知らせて、電子メールを送信してください。彼はもはや古い間違いを修正することはできませんが、将来的には少なくとも間違いを直すことができます。一方、ターゲットにするコンポーネントバージョンの再登録は、ソートの回避策です。あなたはロット最後のバージョンを使用するだけの理由があります。

関連する問題