"COM Interopに登録" vs "アセンブリCOMを見えるようにする"
質問
この2つのオプションの本当の違いは何ですか?私が知っているのは
COM Interop に登録する
このオプションは、アセンブリ上で regasm を実行し、アセンブリを COM コンポーネントとしてレジストリに登録し、すべての COM ライクなレジストリエントリに登録します。
このステップでは、TLB ファイルが生成されますか? 他に何が行われるのでしょうか?
プロジェクトをコンパイルするときに TLB が生成されるのを見ることがありますが、生成されないこともあります、これはなぜですか。
アセンブリCOMを見えるようにする
これはアセンブリにどのような効果をもたらすのでしょうか?このアセンブリの中に以下のような型がある場合、私の型がComVisibleとしてマークされていても、"Make assembly COM Visible"を指定する必要がありますか?
[GuidAttribute("02810C22-3FF2-4fc2-A7FD-5E103446DEB0"), ComVisible(true)]
public interface IMyInterface
{
}
どのように解決するのですか?
アセンブリCOMを表示する"は、大きなハンマーを使って すべて アセンブリ内のパブリック タイプを [COMVisible]にします。 まれに望ましいのは、あなたのスニペットで行ったように、可視化したい特定の型を選択することです。
アセンブリが構築された後、COMクライアントがそれを見つけ返すことができるように、登録する必要があります。 GUID は、作成したいオブジェクトを識別するための番号のみを使用し、どの DLL がそれを実装しているかを見つけるために余分なルックアップが必要です。 登録には
HKLM\Software\Classes\CLSID\{guid}
の部分にキーを書くことになります。 これを自分で行うには、レジストリの
Regasm.exe /codebase /tlb
を実行して自分で行うこともできますし、アセンブリをビルドした後に自動的に行うようビルドシステムに任せることもできます。
これは "Register for COM interop" が行うことです。 DLL の古いコピーが上書きされる前に自動的に登録解除され、レジストリの汚染を防ぐことができるので、これは望ましいことです。 VSは、レジストリキーへの書き込み権限を持つために昇格して実行する必要があり、これをオプションとした理由の1つです。 あるいは、ビルドサーバーではよくあることですが、登録したくないだけかもしれません。 より詳細な診断なしに、.tlb を取得できないことがある理由については、コメントできません。
関連
-
[解決済み] app.configのマッピングがないアセンブリのapp.configの再マッピングを考慮する。
-
[解決済み] VB.NETでプログラムパスを取得する?
-
[解決済み] WPFで角丸ボタンを作成する/作るには?
-
[解決済み] ファイルまたはアセンブリ 'System.Data.SQLite' をロードできませんでした。
-
[解決済み] データテーブルがすでに別のデータセットに属している
-
[解決済み] AssemblyInfo.csは何に使うのですか?
-
[解決済み] Interopタイプの組み込みができない
-
[解決済み] 権限 '*' を持つ SSL/TLS の安全なチャネルを確立できませんでした。
-
[解決済み] DelphiとDelphi.NETの違いについて
-
[解決済み] Math.Round(2.5)はなぜ3でなく2を返すのですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] WCF エラーの解決。このサービスのメタデータパブリッシングは現在無効になっています。
-
[解決済み] Marginのプロパティ順
-
[解決済み] スマートクライアント・ソフトウェアファクトリーの体験談
-
[解決済み] BasicHttpsBindingとWsHttpBinding with Transport securityの違いは何ですか?
-
[解決済み] NetFx45WebLinkとNetFx45RedistLinkの違いは何ですか?
-
[解決済み] VB.NETで線を引く方法
-
[解決済み] csilogfileは何のためにあるのですか?
-
[解決済み] Powershell v3 Invoke-WebRequest HTTPSエラー
-
[解決済み] このコンピュータには、.NET Framework 4.6またはそれ以降の更新プログラムがすでにインストールされています。
-
[解決済み] .NETでのdecimal, float, doubleの違い?