私は C# 3.0 で CLR を読んでいて、アセンブリ、モジュール、およびヘッダーについて考えてきましたが、事態は複雑になりました。これは私が理解したことですが、誰かが物事をもう少し明確にすることができれば素晴らしいでしょう:
モジュールは、IL コードとメタデータ テーブルを含む csc.exe の結果です。メタデータ テーブルには、次の 3 つの異なるテーブルが含まれています。
- 「ModuleDef、TypeDef、PropertyDef、MethodDef、EventDef、FieldDef」などの定義テーブル
- 「TypeRef、ModuleRef、MemberRef など」などの参照テーブル。
- マニフェスト テーブル**
アセンブリは、多くのモジュールと、画像、ドキュメント、pdf などのリソースを含むコンテナーです。
- Portable Executableを表すPEファイルは、.EXEまたは.DLLのファイルです。これらのファイルには、PE32 または PE32+ ヘッダー、CLR ヘッダー、メタデータ、IL コードが含まれます。
本には、アセンブリはモジュールで構成されるコンテナーであり、管理対象モジュールは管理対象モジュールであるとも書かれています
管理対象モジュール:
マネージ モジュールは、標準の 32 ビット Microsoft Windows ポータブル実行可能 (PE32) ファイルまたは標準 64 ビット Windows ポータブル実行可能 (PE32+) ファイルであり、実行には CLR が必要です。
リヒター、ジェフリー (2010-02-05)。C# 経由の CLR (Kindle Locations 696-697)。OReilly Media - A. Kindle 版。
アセンブリの定義:
アセンブリは、1 つ以上のモジュールまたはリソース ファイルの論理グループです。
リヒター、ジェフリー (2010-02-05)。C# 経由の CLR (Kindle Locations 766-767)。OReilly Media - A. Kindle 版。
そのため、マネージ モジュールは実際には、同じ本から取得した画像のアセンブリの一部であるように見えます。
PE32 ヘッダーはアセンブリに属しますが、著者はそれがマネージ モジュールにも属していると述べています。
ここでの分離は何ですか?モジュールとアセンブリが十分に分離しているように見えるにもかかわらず、なぜ彼は交換可能なモジュールとアセンブリを使用したのでしょうか。
マネージド PE ファイルには、PE32(+) ヘッダー、CLR ヘッダー、メタデータ、および IL の 4 つの主要部分があります。PE32(+) ヘッダーは、Windows が期待する標準情報です。CLR ヘッダーは、CLR を必要とするモジュール (マネージ モジュール) に固有の小さな情報のブロックです。
リヒター、ジェフリー (2010-02-05)。C# 経由の CLR (Kindle Locations 1628-1629)。OReilly Media - A. Kindle 版。
また、この画像は、モジュールには PE32(+) や CLR ヘッダーなどではなく、メタデータのみがあることを明確に示しています。マニフェストとメタデータは同じ意味で使用できると思いますか?
また、モジュール内の**マニフェスト テーブルについても説明していただけますか?