Как преобразование кода C # в машинно понятный код? - PullRequest
0 голосов
/ 15 апреля 2019

Что такое MSIL, CLR, что такое CTS означает, что существует n веб-сайтов, которые объясняют эти концепции, и мы все это знаем, но если мы хотим узнать точный сквозной процесс от исходного кода к машинному кодуПроцесс преобразования с рабочим изображением, никто не объяснил все в одном месте.

Итак, мой вопрос здесь отличается от других тем, что мы можем получить такие детали, как исходный код, в MSIL (сборка), а затем он будет преобразован в собственный код с помощью jit-компилятора и т. Д., Но когда мы компилируем, возникаетнет четкой картины того, что происходит за кулисами и каков порядок последовательности между сборкой (.dll или.exe) ILASM.exe, MSIL, CLR, CLS, CTS и всеми.Когда эти вещи будут называться?

Может ли кто-нибудь объяснить процесс компиляции исходного кода платформы Dot Net шаг за шагом и из конца в пример с изображением?И я уверен, что это будет полезно и для всех остальных, кто ищет общий процесс компиляции .net в одном месте.

1 Ответ

0 голосов
/ 15 апреля 2019

Объяснять это гораздо лучше, используя доску и много времени, но я попробую.

.NET Компиляция / сборка => Преобразование C # / VB.NET кода в PE exe формат с MSIL в нем + некоторые хитрости для загрузки .NET Framework ( CLR ).

Windows распознает только PE формат исполняемых файлов. Но он не может запустить MSIL как есть. Таким образом, .NET exe загружается с помощью сборок .NET Framework (для JIT компиляции, GC и т. Д.) Как часть процесса компиляции / сборки. Это своего рода хитрость, чтобы обмануть ОС Windows. ОС запускает его как обычный процесс, но управление не передается вашему коду MSIL напрямую. Вместо этого он передается сборкам .NET CLR (которые являются обычными библиотеками машинного кода). Сборки .NET CLR затем запускают JIT , компилируя код MSIL, упакованный в exe , и принимают управление памятью и потоками.

Это недостающий элемент, с которым большинство начинающих разработчиков .NET путаются. Итак, простой трюк таков; .NET exe имеет дополнительный код начальной загрузки, который выполняется до того, как ваш MSIL достигнут. Все остальные вещи, такие как ASP.NET , WPF - это только те CLR dll , которые загружаются. И именно поэтому .NET exe намного медленнее, чем собственный C / C ++ exe.

Другие ваши вопросы

ILASM -> - это инструмент, который может читать exe-файлы .NET и отображать MSIL, который он содержит. Такие инструменты, как Reflector, могут даже преобразовать этот код MSIL обратно в C # / VB.NET

CLR -> - это те сборки, которые загружаются как часть процесса компиляции и загружаются в память по мере необходимости. Это то, что работает ваш код MSIL.

CTS -> это просто система типов, для которой вы пишете свой код

...