2012-03-03 24 views
17

Estoy tratando de aclarar algo.Se carga mscorlib.dll/mscoree.dll cuando se ejecuta la aplicación .NET

  1. Cuando se ejecuta una aplicación de consola .NET, qué mscorlib.dll/Mscoree.dll conseguir cargado en el espacio de direcciones virtuales del proceso?

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

Además, ¿cuál es un buen recurso para entender más acerca de cómo se ejecuta un programa .NET?

Respuesta

25

Sí. Siempre obtendrá mscoree.dll cargado, ese es el programa de arranque para el host CLR predeterminado. Es una DLL no administrada. Cada ensamblado .NET contiene un poquito de código nativo, solo un salto en esa DLL. Sin embargo, es cargado directamente por versiones recientes de Windows, el cargador del sistema operativo tiene conocimiento de .NET incorporado. Puede verlo en la ventana Depurar + Módulos cuando activa la opción de depuración no administrada, Proyecto + Propiedades, pestaña Depurar. También verá mscorjit.dll, mscorwks.dll y msvcr80.dll, otros tres fragmentos de código nativo necesarios para ejecutar el código administrado. Respectivamente el compilador just-in-time, 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 compilador tiene la opción/nostdlib para evitar una referencia a ese ensamblado. Prácticamente eso solo funciona si proporciona un sustituto, así es como se compila Silverlight, por ejemplo. De lo contrario, es un ensamblado de modo mixto con código nativo pero en su mayoría código administrado. Hay una versión separada para el marco de 64 bits debido a eso. También verá mscorlib.ni.dll con la depuración no administrada habilitada, esa es la versión ngen-ed del ensamblado.

+0

No estoy seguro del modificador del compilador ('/ nostdlib') pero la opción visual en las propiedades del proyecto -> pestaña de compilación -> avanzada ya no está en Visual Studio. Lo vi por última vez en Visual Studio 2010 cuando ingresas a las propiedades del proyecto donde solíamos tener una casilla de verificación para dejar de referir la defafía 'mscorlib.dll'. A partir de todady, no es posible crear una aplicación .Net a través de Visual Studio sin referir 'mscorlib.dll' más. – RBT

6

Yo recomendaría leer el libro de Jefrey Richter CLR via C#. Proporciona muy clara explicación de lo que está pasando bajo el capó :)

también yoг pueden encontrar útil esta pregunta: Why is an assembly .exe file?

3

.Net ejecutable no es diferente de cualquier otro archivo PE. Así que, como cada dlls importado en el ejecutable nativo, mscorlib.dll se carga en el espacio virtual de proceso del ejecutable .net. Si le interesa, puede leer sobre el formato de archivo PE here

Cuestiones relacionadas