Модули, сборки, заголовки в CLR

Я читал CLR с C#3.0 и размышлял о сборках, модулях и заголовках, однако все усложнилось. Это то, что я понял, но было бы здорово, если бы кто-то мог прояснить ситуацию немного подробнее:

  1. Модули являются результатом csc.exe, который содержит код IL и таблицы метаданных. Таблицы метаданных содержат три разные таблицы, которые представляют собой:

    • таблицы определений, такие как «ModuleDef, TypeDef, PropertyDef, MethodDef, EventDef, FieldDef»
    • справочные таблицы, такие как «TypeRef, ModuleRef, MemberRef и т. д.».
    • Таблицы манифеста**
  2. Сборки — это контейнеры, которые содержат множество модулей, а также ресурсы, такие как изображения, документы, pdf и т. д.

  3. PE-файлы, обозначающие Portable Executable, могут быть.EXE или.DLL. Эти файлы имеют заголовки PE32 или PE32+, заголовки CLR, метаданные, код IL.

В книгах говорится, что сборка — это контейнер, состоящий из модулей, а также говорится, что управляемый модуль — это

управляемый модуль:

управляемый модуль — это стандартный 32-битный портативный Microsoft Windows. исполняемый файл (PE32)или стандартный переносной 64-битный Windows исполняемый файл (PE32+), для выполнения которого требуется среда CLR.

Рихтер, Джеффри (2010 -02 -05 ). CLR через C#(Kindle Locations 696-697). OReilly Media -A. Kindle Edition.

Определение сборки:

Сборка — это логическая группа одного или нескольких модулей или ресурсов. файлы.

Рихтер, Джеффри (2010 -02 -05 ). CLR через C#(Kindle Locations 766-767). OReilly Media -A. Kindle Edition.

enter image description here

Таким образом, похоже, что управляемый модуль на самом деле является частью сборки на изображении, взятом из той же книги.

Заголовки PE32 принадлежат сборкам, однако автор также говорит, что они принадлежат и управляемым модулям, и т. д.

Какое здесь разделение? Почему он использовал взаимозаменяемые модули и сборки, даже если они выглядят достаточно отдельными.

Управляемый PE-файл состоит из четырех основных частей::заголовок PE32(+), CLR заголовок, метаданные и IL. Заголовок PE32(+)является стандартным. информацию, которую ожидает Windows. Заголовок CLR представляет собой небольшой блок информация, относящаяся к модулям, которым требуется управляемая CLR (модули).

Рихтер, Джеффри (2010 -02 -05 ). CLR через C#(Расположение Kindle 1628-1629). OReilly Media -A. Kindle Edition.

Также на изображении ясно видно, что модули имеют только метаданные, а не PE32(+), заголовки CLR и т. д. Как вы думаете, можно ли использовать манифест и метаданные взаимозаменяемо?

Не могли бы вы также пояснить **таблицы манифеста в модулях?

9
задан Tarik 8 April 2012 в 18:08
поделиться