Подтвердить что ты не робот

Загружается ли файл mscorlib.dll/mscoree.dll, когда выполняется приложение .NET

Я пытаюсь получить что-то разъясненное.

  • Когда запускается консольное приложение .NET, загружается ли mscorlib.dll/mscoree.dll в виртуальное адресное пространство процесса?

  • mscorlib.dll и mscoree.dll(CLR) - это не управляемые DLL. Это правильно?

Кроме того, что такое хороший ресурс, чтобы больше узнать о том, как выполняется .NET-программа?

4b9b3361

Ответ 1

Да. Вы всегда загружаете файл mscoree.dll, который является загрузчиком для хоста CLR по умолчанию. Это неуправляемая DLL. Каждая сборка .NET содержит небольшой бит собственного кода, просто переход в эту DLL. Однако он загружается последними версиями Windows, загрузчик ОС имеет встроенную интеграцию .NET. Вы можете увидеть его в окне Debug + Modules, когда вы включаете параметр неуправляемой отладки, Project + Properties, вкладку Debug. Затем вы также увидите mscorjit.dll, mscorwks.dll и msvcr80.dll, три других куска собственного кода, которые необходимы для запуска управляемого кода. Соответственно, компилятор точно в срок, среда CLR и библиотека поддержки C-runtime. Они имеют разные имена DLL в .NET 4.

Технически можно не загружать файл mscorlib.dll, у компилятора есть опция /nostdlib, чтобы избежать ссылки на эту сборку. Практически это работает только в том случае, если вы предоставляете замену, например, как скомпилировать Silverlight. В противном случае это сборка смешанного режима с некоторым собственным кодом, но главным образом управляемым кодом. Из-за этого существует отдельная версия для 64-разрядной системы. Вы также увидите, что mscorlib.ni.dll с неуправляемой отладкой включен, что версия версии сборки.

Ответ 2

Я бы рекомендовал прочитать книгу Джефри Рихтера CLR через С#. Он дает очень четкое объяснение, что происходит под капотом:)

Кроме того, этот вопрос может оказаться полезным: Почему сборка .exe файла?

Ответ 3

.Net Executable не отличается от любых других файлов PE. Так как все импортированные DLL файлы в native-исполняемом файле, mscorlib.dll загружается в виртуальное пространство процесса исполняемого файла .net. Если это вас интересует, вы можете прочитать о формате PE файла здесь