34

Visual Studio 11/2012 Professional がインストールされたパーティションに Windows 8 をクリーン インストールしましたが、regtlibv12.exe内部で見つかりませんC:\Windows\Microsoft.NET\Framework\v4.0.30319

以下は、.Net 4.0 (および regtlibv12) を使用した Windows 7 パーティションのスクリーンショットです。

Windows 7 - .Net 4

以下は、.Net 4.5 (および regtlibv12 なし) を使用する Windows 8 です。

Windows 8 - .Net 4.5

regtlibv12は .Net フレームワークの一部ではなくなりましたか? .Net 4.0 もインストールする必要がありますか? 4.5 の上に .Net 4.0 をインストールするとどうなりますか? どちらもハード ドライブの同じ場所に移動し、4.5 は 4.0 を効果的に上書きし、Windows 8 では 4.5 がデフォルトであることがわかっています。4.0 をインストールしてから 4.5 を再インストールして、regtlibv12を元に戻す必要がありますか?

ありがとう

4

2 に答える 2

41

それはフレームワークの一部ではありませんでした。そして、それは完全に文書化されていません。しかし、多くのプログラマーが v2.0.50727 または v4.0.30319 ディレクトリでそれを見つけ、登録の問題を解決できるという非常に一貫した噂があります。多くのフォーラム投稿で言及されています。

これらのフォルダーに表示される正確な方法をリバース エンジニアリングするのは困難です。私が見た唯一のパターンは、フレームワークを自分でインストールしたときに表示されるということです。また、フレームワークがマシンにプリインストールされている場合は存在しません。フレームワーク ディレクトリには、登録が必要な .tlb ファイルがいくつかあります。これらには、クライアント コードが依存している可能性がある .NET [ComVisible] 型の型情報が含まれています。これらの .tlb ファイルは通常の COM サーバーに埋め込まれていないため、タイプ ライブラリを登録する通常の方法は適用されません。さらに、プレインストールされたバージョンの .NET では、登録情報が通常の Windows セットアップに組み込まれているため、このツールは必要ないという推測もあります。

ツールに依存してしまった場合は、別のマシンから .exe をコピーする以外に何もできません。または、反対側から使用する必要がある理由に取り組み、もう必要としないようにします。

  • Regasm.exe で /tlb オプションを使用するのを忘れた場合の回避策です。クライアント コードが別のスレッドから COM インターフェイスを使用しようとすると、実行時に TYPE_E_CANTLOADLIBRARY エラーが発生する可能性があります。タイプ ライブラリは、標準マーシャラーがメソッドの引数をマーシャリングするために必要な型情報を提供します。これを修正するには、/tlb オプションを使用します。

  • これは、[プロジェクト + 参照の追加] の [COM] タブに COM サーバーが表示されるようにするための回避策です。そのタブには、登録されているタイプ ライブラリが一覧表示されます。ただし、これは適切な回避策ではありません。ビルド サーバー以外では、コードをコンパイルできますが、登録が完了していないため実行できません。これを行う適切な方法は、作成者が提供するインストーラーを使用するか、ピンチで Regsvr32.exe を使用して、タイプ ライブラリと CLSID キーの両方を登録することです。

  • これは、タイプ ライブラリを登録しない COM サーバーの回避策です。上記と同様ですが、タイプ ライブラリの登録はオプションであり、通常はサーバーを実行するマシンではなく、開発マシンでのみ必要です。タイプ ライブラリを使用できるほとんどのツールには、TypeLib レジストリ キーに依存するのではなく、明示的に追加する方法があります。Visual Studio IDE も同様です。代わりに [参照] タブを使用して、.tlb ファイルを直接選択できます。

于 2012-10-07T16:15:37.793 に答える