Я читал CLR с С# 3.0, и я размышлял о сборках, модулях и заголовках, однако все усложнилось. Это то, что я понял, но если было бы здорово, если бы кто-то мог прояснить ситуацию немного больше:
-
Модули являются результатом csc.exe, который содержит IL-код и таблицы метаданных. Таблицы метаданных содержат три разные таблицы:
- Таблицы определения, такие как "ModuleDef, TypeDef, PropertyDef, MethodDef, EventDef, FieldDef"
- Справочные таблицы, такие как "TypeRef, ModuleRef, MemberRef и т.д.".
- Таблицы манифеста **
-
Ассембли - это контейнеры, которые содержат много модулей, а также такие ресурсы, как изображения, документы, pdf и т.д.
- Файлы PE, предназначенные для Portable Executable, могут быть:.EXE или .DLL. Эти файлы имеют заголовки PE32 или PE32 +, заголовки CLR, метаданные, код IL.
В книгах говорится, что сборка представляет собой контейнер, состоящий из модулей, и он также говорит, что управляемый модуль
Управляемый модуль:
Управляемый модуль - это стандартный 32-разрядный перенос Microsoft Windows исполняемый файл (PE32) или стандартный 64-разрядный перенос Windows исполняемый файл (PE32 +), требующий выполнения CLR.
Рихтер, Джеффри (2010-02-05). CLR через С# (Kindle Locations 696-697). OReilly Media - A. Kindle Edition.
Определение сборки:
Сборка - это логическая группировка одного или нескольких модулей или ресурсов файлы.
Рихтер, Джеффри (2010-02-05). CLR через С# (Kindle Locations 766-767). OReilly Media - A. Kindle Edition.
Итак, кажется, что управляемый модуль на самом деле является частью сборки в изображении, взятом из той же книги.
Заголовки PE32 принадлежат Ассамблям, однако автор также говорит, что он принадлежит к управляемым модулям, и т.д.
Какое разделение здесь? Почему он использовал взаимозаменяемые модули и сборки, даже думая, что они выглядят достаточно раздельными.
Управляемый файл PE имеет четыре основные части: заголовок PE32 (+), CLR заголовка, метаданных и IL. Заголовок PE32 (+) является стандартным информацию, которую ожидает Windows. Заголовок CLR представляет собой небольшой блок информация, относящаяся к модулям, для которых требуется CLR (управляемая модули).
Рихтер, Джеффри (2010-02-05). CLR через С# (Kindle Locations 1628-1629 года). OReilly Media - A. Kindle Edition.
Также изображение ясно показывает, что модули имеют только метаданные, а не PE32 (+), заголовки CLR и т.д. Как вы думаете, можно ли использовать манифест и метаданные взаимозаменяемо?
А также не могли бы вы объяснить ** Таблицы манифеста в модулях?