Что такое управляемый модуль в .NET и как он отличается от сборок? Является ли PE файл (например, test.dll) управляемым модулем или сборкой? Как сборка/управляемый модуль соответствуют физическим файлам на диске?
Что такое управляемый модуль (по сравнению с сборкой)?
Ответ 1
Управляемый модуль, как правило, понимается как относящийся к модулю, который содержит только код 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, могут объединять модули, если вам интересно)
Ответ 2
Модуль содержит IL, и многие из них связаны между собой, чтобы создать сборку, которая обычно размещается в PE, например .exe или .dll.
PE может содержать собственный (не управляемый) код.
Ответ 3
Управляемые модули - это скомпилированный IL версии исходного кода. расширение файла, который построен при создании модуля из исходных файлов есть .netmodule.
Ассембли - это либо DLL, либо .exe файлы, содержащие управляемые модули, ресурсов и метаданных.