web-dev-qa-db-ja.com

「COM相互運用機能に登録」は実際に何をしますか?

VSプロジェクトオプション「COM相互運用機能に登録」は実際に何をしますか?このオプションを有効にしてライブラリを構築すると、VBScriptからライブラリのCreateObjectを呼び出すことができるためです。しかし、これなしでビルドしてから手動でregasmを実行すると、CreateObjectが失敗します。だから私は疑問に思っています-VS2010は私がしていないことを何をしますか?

56
hackerhasid

/ tlbおよび/ codebaseオプションを指定してRegasm.exeを実行するのと同じことを行います。/codebaseオプションはおそらく忘れてしまったものです。 Regasmは、DLLをGACに配置し、そうしないと警告を生成すると仮定します。GACは、実際にDLL地獄を回避する非常に良い方法です、常にCOMの問題です。しかし、開発マシンでは適切ではありませんが、コードの開発およびテスト中にGACを汚染することは望ましくありません。複数のバージョンにさらされる可能性が高いユーザーのマシンでのみ重要です。

64ビットマシン上で間違ったバージョンのRegasm.exeを使用することも、トラブルを起こす別の方法です。通常、マシンには4つのバージョンがあります。必ず32ビットバージョンと64ビットバージョン(c:\ windows\Microsoft\frameworkとframework64)を区別し、異なるレジストリキーを作成します。クライアントアプリと互換性のあるものを選択します。両方を使用しても大丈夫です。NETコードはどちらのモードでも実行できますが、非常にまれです。また、v2.0.50727(.NET 2.0〜3.5SP1)とv4.0バージョンを区別します。適切なVisual Studioコマンドプロンプトを選択することは、戦いの半分です。

56
Hans Passant