2012-03-03 3 views
17

Я пытаюсь получить что-то разъясненное.Является ли mscorlib.dll/mscoree.dll загруженным при запуске приложения .NET

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

  2. mscorlib.dll и mscoree.dll (CLR) являются не управляемых dlls. Это верно?

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

ответ

25

Да. Вы всегда будете загружать 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 с включенной неуправляемой отладкой, это версия версии сборки.

+0

Я не уверен в компиляторе ('/ nostdlib'), но визуальная опция в свойствах проекта -> вкладка build -> advanced больше не существует в Visual Studio. Я видел это последним в Visual Studio 2010, когда вы входите в свойства проекта, где раньше мы имели флажок, чтобы перестать ссылаться на defafult 'mscorlib.dll'. Что касается todady, невозможно создать приложение .Net через Visual Studio без ссылки на 'mscorlib.dll'. – RBT

6

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

Также yoг может найти этот вопрос полезный: Why is an assembly .exe file?

3

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

Смежные вопросы