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

Что происходит, когда пользователь нажимает сборку .NET(EXE)?

У нас есть приложение .NET Winforms или консольное приложение. Может кто-нибудь сказать мне, что будет происходить шаг за шагом, пока не будет запущено WinForm или консольное приложение. Я бы хотел знать внутренности - например, как EXE будет взаимодействовать с Framework, какова роль CLR, что происходит в случае исключения при запуске applicaiton yourself.etc...

4b9b3361

Ответ 1

Если вы дважды щелкните узел .net.exe:

  • Загрузчик Windows 'PE загружается
  • Если вы находитесь в Windows >= Windows XP, он обнаружит, что исполняемый файл является управляемым исполняемым файлом и отправит его в .net, вызвав _CoreExeMain в mscoree.dll(_CoreDllMain, если вы дважды щелкнули по управляемой .dll), Он может использовать файл конфигурации сборки, чтобы узнать, какую рабочую среду использовать.
  • Если вы находитесь в Windows < Windows XP, файл .exe содержит небольшой нативный фрагмент кода, который будет переходить на mscoree.dll _CoreExeMain или _CoreDllMain.
  • Затем mscoree.dll инициализирует время выполнения .net, в зависимости от глобальной конфигурации, файла конфигурации сборки, а что нет.
  • Тогда, если это .exe, он будет JIT компилировать свой метод точки входа и начать его выполнение.

Ответ 2

MSCoreEE.dll(MSCore Execution Engine.Dll только один экземпляр для одной машины) Скажем, например, когда UNIX-сборка/.exe дважды щелкнула или запустилась, ОС загрузит загрузчик окон, который запустит загрузку PE-заголовка (Portable executable) [в случае исполняемого файла Win32, заголовок PE будет содержать адрес bootstrap (static Main()), откуда он будет загружать и выполнять основной метод, где, как и в .Net, bootstrap будет содержать адрес MSCoreEE.Dll, который будет присутствовать в C:\Windows\System32\mscoree.dll который будет выполнен и загружен .Net runtime, для которого была настроена сборка .net. На компьютере может быть несколько версий .Net runtime, однако для загрузки определенных сроков выполнения будет только один экземпляр mscoreee.dll.

CLR создаст первый домен APP и загрузит сборку (если сборка не создала дополнительные домены приложений в коде)

CLR создает 3 внутренних домена приложения 1. Домен системного приложения а.  отвечает за загрузку доменов приложений по умолчанию и по умолчанию, а также загружает mscorelib.dll в общий домен приложения б.  Создайте 3 отдельных экземпляра Исключения я. Исключение смертельного двигателя II. Исключение III. Исключение из памяти (очень важно, CLR создает "исключение из памяти" исключение bcose, когда разработчик считает, что приложение может выйти из памяти и хочет записать исключение в файл журнала, создание исключения из памяти будет происходить, потому что не осталось памяти для создания нового экземпляра этого исключения, поэтому CLR создает это исключение для будущего использования в приложении 2. Общий домен приложения а. Содержит файл mscorlib.dll б. Другие общие библиотеки, которые используются другими доменами приложений с. Однако разработчик не может нажимать пользовательские Dll в общий домен приложения, так как он не контролируется из-за пределов CLR, CLR размещает эти DLL, и сам CLR не может контролироваться тем, как он размещается разработчиком, однако его возможно использовать некоторые COM-интерфейсы, разработчик может использовать CLR 3. Домен приложения а. Все пользовательские двоичные файлы .exes, Dlls загружаются здесь.