Почему файл сборки.exe?
Сборка в.net Framework - это, как я понимаю, промежуточный языковой файл + некоторые метаданные, манифест и, возможно, что-то еще.
CLR переводит сборку в машинный код, который может быть выполнен на данном локальном компьютере.
Это означает, что сборка не должна выполняться на машине до ее обработки в CLR. Если это так, то почему у него расширение.exe, которое исполняется на компьютерах с Windows?
4 ответа
Поскольку Windows необходимо создать процесс, и первым делом.exe сделает хост CLR, загрузив mscoree.
Из CLR через C#:
После того, как Windows проверила заголовок EXE-файла, чтобы определить, создавать ли 32-разрядный процесс, 64-разрядный процесс или процесс WoW64, Windows загружает версию MSCorEE.dll для x86, x64 или IA64 в адресное пространство процесса. В версии Windows для x86 версию MSCorEE.dll для x86 можно найти в каталоге C:\Windows\System32. В x64 или IA64 версии Windows x86-версия MSCorEE.dll находится в каталоге C:\Windows\SysWow64, тогда как 64-разрядная версия (x64 или IA64) находится в C: \ Windows \ Каталог System32 (по причинам обратной совместимости). Затем основной поток процесса вызывает метод, определенный внутри MSCorEE.dll. Этот метод инициализирует CLR, загружает сборку EXE и затем вызывает метод точки входа (Main). На этом этапе управляемое приложение запущено и работает.
Недавно я написал сообщение в блоге о заглушке CLR в сборке.NET и о том, как она вписывается в исполняемый формат PE-файла. Целую серию можно найти здесь.
По сути, внутри сборки.NET есть небольшой кусочек нативного кода, который запускает CLR. Однако этот код существует только для обратной совместимости. В Windows XP загрузчик ОС изначально знает, как загрузить CLR для исполняемого файла, в котором есть заголовок CLI.
.NET .exe - это особый вид.exe, который сначала загружает CLR (Common Language Runtime). Затем он скомпилирует код IL внутри.exe через CLR.
.Exe, скомпилированный с помощью.NET Framework, является своего рода Portable Executable..Exe имеет заголовок CLR и раздел данных CLR. Когда загружается.exe, ОС передает управление CLR. Раздел данных CLR в.exe содержит метаданные и сегмент IL (промежуточный язык). Сегмент метаданных содержит информацию о сборке (например, манифест сборки). Сегмент IL содержит код программы в формате IL. Это промежуточный формат, похожий на байт-код Java.