次の方法で共有


.NET アセンブリ ファイル形式

.NET は、.NET プログラムを完全に記述して含めるために使用されるバイナリ ファイル形式の アセンブリを定義します。 アセンブリは、プログラム自体および依存ライブラリに使用されます。 .NET プログラムは 1 つ以上のアセンブリとして実行でき、適切な .NET 実装以外の必要な成果物はありません。 オペレーティング システム API を含むネイティブ依存関係は別の懸念事項であり、.NET アセンブリ形式には含まれませんが、この形式 (WinRT など) で記述される場合があります。

各 CLI コンポーネントには、そのコンポーネントに固有の宣言、実装、および参照のメタデータが含まれています。 したがって、コンポーネント固有のメタデータはコンポーネント メタデータと呼ばれ、結果のコンポーネントは ECMA 335 I.9.1 のコンポーネントとアセンブリから自己記述的であると言われます。

形式は完全に指定され、 ECMA 335 として標準化されています。 すべての .NET コンパイラとランタイムは、この形式を使用します。 ドキュメント化され、更新頻度の低いバイナリ形式の存在は、相互運用性の大きな利点 (おそらく要件) です。 この形式は、ジェネリックとプロセッサアーキテクチャに対応するために、2005 (.NET Framework 2.0) で実質的な方法で最後に更新されました。

形式は CPU と OS に依存しません。 これは、多くのチップと CPU を対象とする .NET 実装の一部として使用されています。 形式自体は Windows の遺産を持ちますが、任意のオペレーティング システムで実装できます。 OS の相互運用性に最も重要な選択肢は、ほとんどの値がリトル エンディアン形式で格納されていることです。 マシン ポインター サイズ (32 ビット、64 ビットなど) に対する特定のアフィニティはありません。

.NET アセンブリ形式は、特定のプログラムまたはライブラリの構造についても非常にわかりやすい形式です。 アセンブリの内部コンポーネント、特に定義されているアセンブリ参照と型、およびその内部構造について説明します。 ツールまたは API は、表示またはプログラムによる決定のために、この情報を読み取って処理できます。

フォーマット

.NET バイナリ形式は、Windows PE ファイル 形式に基づいています。 実際、.NET クラス ライブラリは準拠している Windows PE であり、一見すると Windows ダイナミック リンク ライブラリ (DLL) またはアプリケーション実行可能ファイル (EXE) として表示されます。 これは、ネイティブ実行可能バイナリとして偽装し、同じ処理 (OS の読み込み、PE ツールなど) の一部を取得できる Windows では非常に便利な特性です。

アセンブリ ヘッダー

ECMA 335 II.25.1 のアセンブリ ヘッダー、ランタイム ファイル形式の構造。

アセンブリを処理する

アセンブリを処理するためのツールまたは API を記述できます。 アセンブリ情報を使用すると、実行時にプログラムによる決定を行い、アセンブリを書き換え、エディターで API IntelliSense を提供し、ドキュメントを生成できます。 System.ReflectionSystem.Reflection.MetadataLoadContextMono.Cecil は、この目的で頻繁に使用されるツールの良い例です。