Как сказано в главе 2, компилятор .NET не создает исполняемые ЕХЕ-и DLL-файлы в традиционном виде. Вместо машинного кода он вставляет в них декларацию (manifest) со списками типов и классов, включенных в файл, а также коды MSIL-инструкций, подлежащих компиляции и выполнению либо установочным приложением, либо исполняющей средой .NET посредством ЛТ-компиляторов (JITter).
Очень важно, что сгенерированный MSIL-код похож на язык ассемблера и может использоваться в качестве учебного пособия, показывающего, что сделал компилятор с вашим кодом. Поэтому я буду не раз "опускаться" до выходного MSIL-файла компилятора языка С#, чтобы показать, что происходит внутри кода, и объяснить, почему следует применять то или иное средство языка и как это надо делать. Для просмотра выходного MSIL-файла можно использовать дисассемблер Microsoft .NET Framework IL Disassembler (ILDASM), позволяющий открыть выполняемый .NET-файл (EXE или DLL) и изучить его пространства имен, классы, типы и код. В следующем разделе мы познакомимся с достоинствами ILDASM.