#c# #compilation #clr #.net-framework-version
#c# #Сборник #clr #.net-framework-version
Вопрос:
Что такое MSIL, CLR, что такое CTS означает, что существует n количество веб-сайтов, объясняющих эти концепции, и мы все это знаем, но если мы хотим изучить точный сквозной процесс преобразования исходного кода в машинный код с изображением рабочего процесса, никто не объяснил все в одном месте.
Итак, мой вопрос здесь отличается от других тем, что мы можем получить детали, такие как исходный код, в MSIL (Assembly), а затем он будет преобразован в машинный код с помощью jit-компилятора и т. Д., Но когда мы компилируем, нет четкой картины того, что происходит за сценой, и каков порядок следования междуСборка (.dll or.exe ) ILASM.exe , MSIL, CLR, CLS, CTS и все остальное. Когда эти вещи будут вызваны ?.
Может ли кто-нибудь объяснить обзор процесса компиляции исходного кода Dot Net Framework шаг за шагом и от начала до конца с образцом изображения? И я уверен, что это будет полезно и для всех остальных, кто ищет общий процесс компиляции .net в одном месте.
Комментарии:
1. Следующая веб-страница является хорошей ссылкой: developerin.net/a/39-Intro-to-.Net-FrameWork/… Модули исходного кода (.cs и .vb) сначала компилируются в obj-файлы (промежуточный MSIL). Затем файлы obj объединяются в исполняемый файл.
2. Это интересная область исследований, но вопрос здесь по-прежнему требует справочного материала, который, безусловно, уже доступен в Интернете. Не уверен, что по теме для SO.
3. Проверьте это: github.com/dotnet/roslyn/wiki/Roslyn-Overview
4. @Jdweng Я уже упоминал, мы получим множество веб-сайтов, но четкой картинки и объяснений там нет. Я задам свой вопрос, дайте мне знать ответ. CLS amp; CTS вызываются или выполняются до MSIL или после?
5. @Nyerguds, да, материалы доступны, но это не на одной странице, мы должны искать один за другим, потому что на всех страницах они объясняли только общий процесс, но не объясняли каждый шаг и когда он будет вызван или обработан подобным образом.
Ответ №1:
Объяснять это намного лучше с помощью доски и много времени, но я попробую.
.NET Compile / Build => Преобразовать код C # / VB.NET в формат PE exe с MSIL в нем некоторые хитрости для загрузки.NET framework (CLR).
Windows распознает только исполняемые файлы PE-формата. Но он не может запускать MSIL как есть. Итак, загружается .NET exe.Сборки NET framework (для JIT-компиляции, GC и т. Д.) Как часть процесса компиляции / сборки. Это своего рода трюк, чтобы обмануть ОС Windows. ОС запускает его как обычный процесс, но управление не передается вашему MSIL-коду напрямую. Вместо этого он передается сборкам .NET CLR (которые являются обычными библиотеками DLL машинного кода). Затем сборки .NET CLR запускают JIT-компиляцию вашего кода MSIL, упакованного в exe, и берут на себя управление памятью и потоками.
Это недостающий фрагмент, который большинство новичков.Разработчики NET путаются. Итак, простой трюк заключается в том, что .NET exe содержит дополнительный загрузочный код, который выполняется до достижения вашего MSIL. Все остальные вещи, такие как ASP.NET , WPF — это только те библиотеки DLL CLR , которые загружаются. И именно поэтому .NET exe намного медленнее, чем собственный C / C exe.
Другие ваши запросы
ILASM -> — это инструмент, который может читать EXE-файлы .NET и отображать MSIL, который он содержит. Такие инструменты, как Reflector, могут даже преобразовать этот код MSIL обратно в C # / VB.NET
CLR -> это те сборки, которые загружаются как часть процесса компиляции и загружаются в память по мере необходимости. Это то, что запускает ваш код MSIL.
CTS -> — это просто система типов, для которой вы пишете свой код