Почему файл сборки .exe? - PullRequest
       21

Почему файл сборки .exe?

24 голосов
/ 29 марта 2011

Сборка в .net Framework - это, как я понимаю, промежуточный языковой файл + некоторые метаданные, манифест и, возможно, что-то еще.

CLR переводит сборку в машинный код, который может быть выполнен на данном локальном компьютере.

Это означает, что сборка не должна быть исполняемой на машине до ее обработки CLR. Если это так, то почему у него расширение .exe, которое исполняется на компьютерах с Windows?

Ответы [ 4 ]

24 голосов
/ 29 марта 2011

Поскольку Windows необходимо создать процесс, и первым делом .exe сделает хост CLR , загрузив mscoree .

С CLR через C # :

После того, как Windows проверила EXE заголовок файла, чтобы определить, следует ли создать 32-битный процесс, 64-битный процесс или процесс WoW64, Windows загружает версию x86, x64 или IA64 MSCorEE.dll в адрес процесса пространство. В x86 версии Windows x86-версия MSCorEE.dll может быть находится в C: \ Windows \ System32 каталог. В версии x64 или IA64 Windows, версия x86 MSCorEE.dll можно найти в C: \ Windows \ SysWow64 каталог, тогда как 64-битная версия (x64 или IA64) можно найти в C: \ Windows \ System32 каталог (для причины обратной совместимости). Затем, основной поток процесса вызывает метод, определенный внутри MSCorEE.dll. Этот метод инициализирует CLR, загружает сборка EXE, а затем вызывает его метод точки входа (основной). В этот точка, управляемое приложение работает и работает.

7 голосов
/ 29 марта 2011

Я недавно написал сообщение в блоге о заглушке CLR в сборке .NET и о том, как она вписывается в исполняемый формат PE-файла.Целую серию можно найти здесь .

По сути, внутри сборки .NET есть небольшой кусочек собственного кода, который запускает CLR.Однако этот код существует только для обратной совместимости.В Windows XP загрузчик ОС изначально знает, как загрузить CLR для исполняемого файла с заголовком CLI.

2 голосов
/ 29 марта 2011

.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.

0 голосов
/ 29 марта 2011

Так как это все еще EXEcutable.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...