Что такое управляемый модуль в.NET и чем он отличается от сборок? Является ли PE-файл (например, test.dll) управляемым модулем или сборкой? Как сборочный / управляемый модуль соответствует физическим файлам на диске?
25 авг ’09 в 07:24 2009-08-25 07:24
2009-08-25 07:24
3 ответа
Под управляемым модулем обычно понимается модуль, который содержит только код IL, без прямого машинного кода.
Модуль размещается в обычном PE-файле.
Сборка — это набор из 1 или более модулей, один из которых обозначен как «голова» (будет искать точный термин [1]). Модуль сам по себе не очень полезен — сборка — это атомная единица.
Например, у вас может быть сборка из нескольких модулей с 2 DLL и EXE. Хотя многомодульные сборки встречаются довольно редко.
Книга Don Box Esssential .NET, CLR Рихтера через C# дает хорошее освещение этой темы. Подробную информацию можно найти в книге Сержа Лидина.NET 2.0 IL Assembler и в стандарте CLI.
Сборка может быть одним файлом или состоять из нескольких файлов. В случае нескольких файлов существует один главный модуль, содержащий манифест, в то время как другие сборки существуют как не-манифестные модули.
Чтобы ответить на актуальные вопросы:-
Как пройти СОБЕСЕДОВАНИЕ на C# & .Net РАЗРАБОТЧИКА? (2)
Что такое управляемый модуль в.NET и чем он отличается от сборок?
Это подмножество — DLL может быть главным модулем без дочерних модулей — и, следовательно, быть сборкой
Является ли PE-файл (например, test.dll) управляемым модулем или сборкой?
Определенно модуль. Если у него также есть манифест и нет дочерних модулей, это также сборка
Как сборочный / управляемый модуль соответствует физическим файлам на диске? Каждый модуль представляет собой файл. (Такие инструменты, как ILMerge могут объединять модули, если вам интересно)
Источник: stackru.com
Двухэтапная компиляция. Управляемый модуль и управляемый код
Компиляторы языков программирования, включенные в Visual Studio.Net, создают модули на промежуточном языке MSIL (Microsoft Intermediate Language), называемом далее просто — IL. Фактически компиляторы создают так называемый управляемый модуль — переносимый исполняемый файл (Portable Executable или PE-файл). Этот файл содержит код на IL и метаданные — всю необходимую информацию как для CLR, так и конечных пользователей, работающих с приложением. О метаданных — важной новинке Framework.Net — мы еще будем говорить неоднократно. В зависимости от выбранного типа проекта, PE-файл может иметь уточнения exe, dll, mod или mdl.
Заметьте, PE-файл, имеющий уточнение exe, хотя и является exe-файлом, но это не совсем обычный, исполняемый Windows, файл. При его запуске он распознается как специальный PE-файл и передается CLR для обработки. Исполнительная среда начинает работать с кодом, в котором специфика исходного языка программирования исчезла.
Как пройти СОБЕСЕДОВАНИЕ на C# & .Net РАЗРАБОТЧИКА?
Код на IL начинает выполняться под управлением CLR (по этой причине код называется управляемым). Исполнительную среду можно рассматривать как своеобразную виртуальную IL-машину. Эта машина транслирует «на лету» требуемые для исполнения участки кода в команды реального процессора, который в действительности и выполняет код.
Виртуальная машина
Отделение каркаса от студии явилось естественным шагом. Каркас Framework.Net перестал быть частью студии, а стал надстройкой над операционной системой. Теперь компиляция и создание PE-модулей на IL отделено от выполнения, и эти процессы могут быть реализованы на разных платформах.
В состав CLR входят трансляторы JIT (Just In Time Compiler), которые и выполняют трансляцию IL в командный код той машины, где установлена и функционирует исполнительная среда CLR. Конечно, в первую очередь Microsoft реализовала CLR и FCL для различных версий Windows, включая Windows 98/Me/NT 4/2000, 32 и 64-разрядные версии Windows XP и семейство.Net Server. Для операционных систем Windows CE и Palm разработана облегченная версия Framework.Net.
В 2001 году ECMA (Европейская ассоциация производителей компьютеров) приняла язык программирования C#, CLR и FCL в качестве стандарта, так что Framework.Net уже функционирует на многих платформах, отличных от Windows. Он становится свободно распространяемой виртуальной машиной. Это существенно расширяет сферу его применения. Производители различных компиляторов и сред разработки программных продуктов предпочитают теперь также транслировать свой код в IL, создавая модули в соответствии со спецификациями CLR. Это обеспечивает возможность выполнения их кода на разных платформах.
Microsoft использовала получивший широкое признание опыт виртуальной машины Java, улучшив процесс за счет того, что, в отличие от Java, промежуточный код не интерпретируется исполнительной средой, а компилируется с учетом всех особенностей текущей платформы. Благодаря этому создаются высокопроизводительные приложения.
Следует отметить, что CLR, работая с IL-кодом, выполняет достаточно эффективную оптимизацию и, что не менее важно, защиту кода. Зачастую нецелесообразно выполнять оптимизацию на уровне создания IL-кода — она иногда может не улучшить, а ухудшить ситуацию, не давая CLR провести оптимизацию на нижнем уровне, где можно учесть даже особенности процессора.
Дизассемблер и ассемблер
Если у вас есть готовый PE-файл, то иногда полезно анализировать его IL-код и связанные с ним метаданные. В состав Framework SDK входит дизассемблер — ildasm, выполняющий дизассемблирование PE-файла и показывающий метаданные, а также IL-код с комментариями в наглядной форме. Мы иногда будем пользоваться результатами дизассемблирования. У меня на компьютере кнопка, вызывающая дизассемблер, находится на панели, где собраны наиболее часто используемые мной приложения. Вот путь к папке, в которой обычно находится дизассемблер:
C:Program FilesMicrosoft Visual Studio.Net FrameworkSDKBinildasm.exe
Профессионалы, предпочитающие работать на низком уровне, могут программировать на языке ассемблера IL. В этом случае в их распоряжении будет вся мощь библиотеки FCL и все возможности CLR. У меня на компьютере путь к папке, где находится ассемблер, следующий:
В этой книге к ассемблеру мы обращаться не будем — я упоминаю о нем для полноты картины.
Метаданные
Переносимый исполняемый PE-файл является самодокументируемым файлом и, как уже говорилось, содержит и код, и метаданные, описывающие код. Файл начинается с манифеста и включает в себя описание всех классов, хранимых в PE-файле, их свойств, методов, всех аргументов этих методов — всю необходимую CLR информацию.
Поэтому помимо PE-файла не требуется никаких дополнительных файлов и записей в реестр — вся нужная информация извлекается из самого файла. Среди классов библиотеки FCL имеется класс Reflection, методы которого позволяют извлекать необходимую информацию. Введение метаданных не только важная техническая часть CLR, но это также часть новой идеологии разработки программных продуктов. Мы увидим, что и на уровне языка C# самодокументированию уделяется большое внимание.
Что такое управляемый модуль (по сравнению со сборкой)?
Что такое управляемый модуль в .NET и как он отличается от сборок? Является ли PE файл (например, test.dll) управляемым модулем или сборкой? Как сборка/управляемый модуль соответствуют физическим файлам на диске?
Ruben Bartelink 25 авг. 2009, в 09:35
Поделиться
Поделиться:
3 ответа
Управляемый модуль, как правило, понимается как относящийся к модулю, который содержит только код IL, без прямого машинного кода. Модуль размещается в обычном файле PE. Сборка представляет собой набор из 1 или более модулей, один из которых обозначается как «голова» (будет искать точный термин [1]).
Само по себе модуль не используется индивидуально, хотя — сборка является атомной единицей. Например, у вас может быть сборка многоуровневых модулей с двумя DLL и EXE. Многомодульные сборки довольно редки, хотя. The Don Box book Esssential.NET, CLR Richter через С# дает хорошее освещение темы. Для получения полной информации, книга Серж Лидин .NET 2.0 IL Assembler и стандарт CLI более полные. [1] Согласно http://www.programmersheaven.com/2/FAQ-DOTNET-DOTNET-Assembly-Explained
Сборка может быть одним файлом или может состоять из нескольких файлов. В случае многофайлового файла существует один главный модуль, содержащий манифест, в то время как другие сборки существуют как неявные модули
Чтобы ответить на актуальные вопросы: —
Что такое управляемый модуль в .NET и как он отличается от сборок?
Это подмножество — DLL может быть основным модулем без дочерних модулей и, следовательно, быть сборкой
Является ли PE файл (например, test.dll) управляемым модулем или сборкой?
Определенно модуль. Если у него также есть манифест и нет дочерних модулей, это также сборка
Как сборка/управляемый модуль соответствуют физическим файлам на диске? Каждый модуль является файлом. (Такие инструменты, как ILMerge, могут объединять модули, если вам интересно)
Источник: overcoder.net