2012-03-03 16 views
17

Sto cercando di ottenere qualcosa di chiarito.È mscorlib.dll/mscoree.dll caricato quando l'applicazione .NET viene eseguita

  1. Quando un'applicazione console .NET viene eseguito, si fa mscorlib.dll/Mscoree.dll ottenere caricato nello spazio degli indirizzi virtuale del processo?

  2. mscorlib.dll e mscoree.dll (CLR) sono non dll gestite. È corretto?

Inoltre, qual è una buona risorsa per capire di più su come viene eseguito un programma .NET?

risposta

25

Sì. Avrai sempre caricato mscoree.dll, che è il bootstrapper per l'host CLR predefinito. È una DLL non gestita. Ogni assembly .NET contiene un pochino di codice nativo, solo un salto in quella DLL. Tuttavia, viene caricato direttamente dalle recenti versioni di Windows, il caricatore del sistema operativo include .NET awareness integrata. Puoi vederlo nella finestra Debug + Modules quando attivi l'opzione di debug non gestito, Progetto + Proprietà, scheda Debug. Vedrai anche mscorjit.dll, mscorwks.dll e msvcr80.dll, altri tre blocchi di codice nativo necessari per eseguire il codice gestito. Rispettivamente il compilatore just-in-time, CLR e la libreria di supporto di runtime C. Hanno diversi nomi DLL in .NET 4.

Tecnicamente è possibile non caricare mscorlib.dll, il compilatore ha l'opzione/nostdlib per evitare un riferimento a tale assembly. Praticamente funziona solo se fornisci un sostituto, è così che Silverlight viene compilato per esempio. È altrimenti un assembly in modalità mista con un po 'di codice nativo ma principalmente gestito. A causa di ciò esiste una versione separata di esso per il framework 64-bit. Vedrai anche mscorlib.ni.dll con il debug non gestito abilitato, ovvero la versione ngened dell'assembly.

+0

Non sono sicuro dello switch del compilatore ('/ nostdlib') ma l'opzione visiva nelle proprietà del progetto -> scheda di creazione -> avanzata non è più presente in Visual Studio. L'ho visto per l'ultima volta in Visual Studio 2010 quando si entra nelle proprietà del progetto in cui avevamo una casella di controllo per interrompere il riferimento a "mscorlib.dll" di default. A partire da Todady, non è possibile creare un'applicazione .Net tramite Visual Studio senza più "mscorlib.dll". – RBT

6

Consiglierei di leggere il libro di Jefrey Richter CLR via C#. Esso fornisce spiegazione molto chiara quello che sta succedendo sotto il cofano :)

Inoltre yoг può trovare questa domanda utile: Why is an assembly .exe file?

3

.Net eseguibile non è diverso da qualsiasi altro file PE. Quindi, come ogni dll importato nell'eseguibile nativo, mscorlib.dll viene caricato nello spazio virtuale Process di .net eseguibile. Se ti interessa, puoi leggere sul formato di file PE here

Problemi correlati