2012-05-10 4 views
2

Итак, меня интересует архитектура и структура .NET runtime. Я хочу знать, как это работает шаг за шагом. У меня есть несколько книг, которые также ищут в Google ответы, но теперь я хочу получить правильный ответ о некоторых вопросах.Формат выходного файла .NET CSC.EXE

В книгах написано, что, Csc.exe (компилятор) генерирует управляемый модуль, который содержит: 1. PE Header 2. CLR Header 3. Metadata 4. IL код

и после компиляции, инструмент AL.exe (сборщик) объединяет этот модуль/сек в сборку. Я также знаю, что в сборке есть два основных расширения файлов: DLL или EXE.

Но меня интересуют управляемые модули. Как он компилирует компилятор и что имеет формат файла? это расширение .netmodule? ИЛИ DLL?

p.s Извините за мой английский.

+1

Читать ECMA335. Весело и информативно. – leppie

+0

http://www.ecma-international.org/publications/standards/Ecma-335.htm –

+1

Нет, ребята. Я понял, что такое код IL и т. Д. Мой вопрос касается расширения управляемого модуля. Когда-то я читал, что модуль и сборка имеют одинаковое расширение (DLL). Когда-то я читал, что модуль имеет расширение .netmodule. Существует некоторая неопределенность. Какое именно расширение файла имеет модуль (управляемый модуль). Мы знаем, что управляемый модуль имеет 4 основных пункта: 1. PE Header; 2. CLR Header; 3. Метаданные; 4. IL-код; Но что такое физически управляемый модуль. Какое расширение имеет это, когда компилятор языка создает его из кода высокого уровня? –

ответ

1

Управляемые модули подобны .DLL/.EXE в формате (они оба представляют собой PE-формат, они содержат PE-заголовок + CLR Header + metadata + code). Разница заключается в том, что вы создаете .netмодуль, если вы выполняете многомодульную сборку. Многомодульная сборка представляет собой сборку с несколькими модулями внутри нее, примером которой является System.Data.dll, поскольку она имеет как управляемую часть, так и собственную часть C++ в 1 сборку.

. NetModules - это всего лишь удобный способ упаковки нескольких модулей в 1 сборку. Компиляторы высокого уровня (например, C#) не справляются с этим, поэтому вам нужно использовать инструмент Assembly Linker (AL).

Надеется, что это помогает Спасибо

Смежные вопросы