¿Se carga mscorlib.dll / mscoree.dll cuando se ejecuta la aplicación .NET?

Estoy tratando de aclarar algo.

  1. Cuando se ejecuta una aplicación de consola .NET, ¿se carga mscorlib.dll / mscoree.dll en el espacio de direcciones virtuales del proceso?

  2. mscorlib.dll y mscoree.dll (CLR) no son archivos dll administrados. ¿Es eso correcto?

Además, ¿cuál es un buen recurso para comprender mejor cómo se ejecuta un progtwig .NET?

Sí. Siempre obtendrá mscoree.dll cargado, ese es el bootstrapper para el host CLR predeterminado. Es una DLL no administrada. Cada ensamblaje .NET contiene un poquito de código nativo, solo un salto a esa DLL. Sin embargo, se carga directamente con las versiones recientes de Windows, el cargador del sistema operativo tiene conocimiento de .NET incorporado. Puede verlo en la ventana Módulos de depuración cuando encienda la opción de depuración no administrada, Proyecto + Propiedades, pestaña Depurar. Luego también verá mscorjit.dll, mscorwks.dll y msvcr80.dll, otros tres fragmentos de código nativo que se requieren para ejecutar el código administrado. Respectivamente, el comstackdor justo a tiempo, el CLR y la biblioteca de soporte C-runtime. Tienen diferentes nombres de DLL en .NET 4.

Técnicamente es posible no cargar mscorlib.dll, el comstackdor tiene la opción / nostdlib para evitar una referencia a ese ensamblaje. Prácticamente eso solo funciona si usted proporciona un sustituto, así es como Silverlight se comstack, por ejemplo. De lo contrario, es un ensamblaje de modo mixto con algún código nativo pero en su mayoría código administrado. Hay una versión separada para el framework de 64 bits por eso. También verá mscorlib.ni.dll con la depuración no administrada habilitada, esa es la versión ngen-ed del ensamblaje.

Recomendaría leer el libro CLR de Jefrey Richter a través de C # . Proporciona una explicación muy clara de lo que está pasando debajo del capó 🙂

También puede resultarle útil esta pregunta: ¿Por qué es un archivo .exe de ensamblado?

.Net Executable no es diferente de ningún otro archivo PE. Entonces, como todas las dlls importadas en ejecutables nativos, mscorlib.dll se carga en el espacio virtual de procesos del ejecutable .net. Si le interesa, puede leer sobre el formato de archivo PE aquí