74

これら 2 つのオプションの実際の違いは何ですか? 私が知っていることは次のとおりです。

COM 相互運用に登録する
このオプションは、アセンブリに対して regasm を実行し、アセンブリを COM コンポーネントとして登録します (またはそうでない場合もあります)。このステップで TLB ファイルが生成されますか? 他に何が行われますか?

プロジェクトをコンパイルすると tlb が生成されることがありますが、生成されないことがあります。これはなぜですか?

アセンブリ COM を表示
する これはアセンブリにどのような影響を与えますか? このアセンブリ内に次の型がある場合、型が ComVisible としてマークされていても、「アセンブリを COM 可視にする」を指定する必要がありますか?

[GuidAttribute("02810C22-3FF2-4fc2-A7FD-5E103446DEB0"), ComVisible(true)]
public interface IMyInterface
{
}
4

2 に答える 2

106

「アセンブリ COM を可視化する」は、アセンブリ内のすべてのパブリック型を [ComVisible] にするための大きなハンマーです。めったに望ましくありませんが、スニペットで行ったように、表示したい特定のタイプを選択する必要があります。

アセンブリがビルドされたら、COM クライアントがアセンブリを見つけられるように登録する必要があります。作成したいオブジェクトを識別するために番号のみを使用するもので、GUID を使用します。どの DLL がそれを実装しているかを調べるには、追加のルックアップが必要です。HKLM\Software\Classes\CLSID\{guid}登録には、レジストリの一部にキーを書き込むことが含まれます。実行して自分で行うこともRegasm.exe /codebase /tlb、ビルド システムに任せて、アセンブリのビルド後に自動的に行うこともできます。

これは、「COM相互運用に登録する」が行うことです。DLL の古いコピーが上書きされる前に自動的に登録解除され、レジストリの汚染が防止されるため、これは望ましいことです。これらのレジストリ キーへの書き込みアクセス権を得るには、VS を管理者特権で実行する必要があります。これが、オプションにする理由の 1 つです。または、ビルドサーバーで一般的な、登録したくないだけです。さらに診断を行わないと .tlb を取得できないことがある理由についてはコメントできません。

于 2010-09-13T11:43:21.907 に答える