2

.NET 4 グローバル アセンブリ キャッシュは、次の 2 つのフォルダーに分かれています。

C:\Windows\Microsoft.NET\assembly\GAC_32

C:\Windows\Microsoft.NET\assembly\GAC_MSIL

GAC_32 フォルダーに興味があります。このフォルダー内のアセンブリ (System.Data など) はマネージド コードではなくネイティブ コードであると想定する必要がありますか? x86固有ですか?

4

3 に答える 3

2

アセンブリを AnyCPU プラットフォームでコンパイルすると MSIL フォルダーに移動し、x86 プラットフォームでコンパイルすると GAC_32 に移動します。詳細はこちら

CorFlagsを使用して、アセンブリが x86、x64、または AnyCPU であるかどうかを判断できます。

于 2012-07-21T16:31:44.820 に答える
1

GAC_32 と GAC_64 には混合モードのアセンブリが含まれています。マネージ コードとネイティブ コードの両方を含むアセンブリ。それらは、pinvoke を使用せずにマネージ コードからネイティブ コードを簡単に呼び出す方法を認識しているコンパイラである C++/CLI コンパイラによって生成されたコードから生成されます。アセンブリ形式は、両方の種類のコードをサポートできるほど柔軟です。<Module>逆アセンブラーを使用して、グローバル名前空間でクラスを確認することは死んだプレゼントです。

ネイティブ コードが含まれているため、マシン アーキテクチャに大きく依存します。そのため、64 ビット マシンではアセンブリの個別のコピーが必要です。GAC_32 フォルダーと GAC_64 フォルダーにはこれらの個別のコピーが格納され、CLR はプロセスのビット数に基づいて正しいコピーを自動的に選択します。

混合モードのフレームワーク アセンブリはそれほど多くありません。Mscorlib.dll はその 1 つで、オペレーティング システムに近いものです。System.Data.dll は、すべてネイティブ コードでのみ利用可能なデータベース プロバイダーに強く依存しています。WPF の PresentationCore.dll は、DirectX とインターフェイスするネイティブ レイヤーである Milcore に強く依存しています。など。

于 2012-07-21T17:21:02.533 に答える
0

ここでまともな説明。

GAC_MSIL キャッシュには、32 ビット モードまたは 64 ビット モードで実行できるアセンブリが含まれており、必要に応じて必要なワード サイズに JIT コンパイルされます。

32/64 ディレクトリには、32 ビット モードまたは 64 ビット モードのいずれかに固有のアセンブリが含まれています。これは、ネイティブ コードが含まれているか、ワード サイズについて特定の仮定を行っているためです。

32 ビット システムには GAC_32 ディレクトリしかありません。32 ビット コードはエミュレーション (WOW32) を介してサポートされているため、64 ビット システムには両方があります。

現在のランタイム条件 (コア数、アーキテクチャなど) を考慮して、JIT 化されたアセンブリを最適化できるため、NGen 化されたアセンブリが MSIL よりも本当に高速かどうかについていくつかの議論があることを私は知っています。

于 2012-07-21T16:35:54.757 に答える