
从 .NET 的角度出发,世界上存在两种类型的代码:托管代码 和非托管代码。
托管代码 是由公共语言运行库(CLR)执行和管理。托管代码包含一些元数据,它提供了一些信息,允许在运行时刻提供诸如内存管理、安全、垃圾回收这样的服务。所有的 MSIL 代码都是托管代码。关于元数据的更多信息,参看本章后面的 “清单(Manifests)” 小节。关于垃圾回收的更多信息,参看第五章“C# 和 Visual Basic .NET 中的面向对象”。
非托管代码 是在 .NET 之外运行的代码。这包括位于 COM 服务中的 Visual FoxPro 代码。(图 3)。

图 3. 在.NET 公共语言运行库外运行的非托管代码

代码和非托管代码是不同的。关于不安全的代码的有关信息,参看第三章“C# 入门”。
在 Visual FoxPro 中,依赖于你编译的项目类型,结果会是 APP、EXE 或DLL 文件。在 .NET 中,Windows Forms 和 控制台项目被编译成包含 MSIL 的 EXE 文件;Web Forms、Web Services 和类库项目(包含 Windows 控件库)被编译成包含 MSIL 的 DLLs 。这些 EXE和 DLL 文件被称为程序集(assemblies)。
程序集是 .NET 应用程序的主要构成部分。程序集这个术语比物理设计要更合乎逻辑,因为,尽管一个程序集通常是由一个单一文件组成,但是它也可以由一个或多个文件组成。 (图 4).
多文件程序集允许你将程序集分解为更小的单元,它们很容易维护并具有易于下载的很小的文件尺寸。它也允许你创建一个程序集,其中的组件由多种语言构建。

图4. 一个程序集可以由一个或多个物理文件组成。
程序集是自描述的——它并不需要在 Windows 注册表中注册,因为它拥有一个包含关于程序集元数据的清单(manifest)。
程序集的清单包含一些诸如程序集身份的信息(名称、版本以及区域性(culture)),在程序集中有所有文件的列表、所有引用的程序集以及所有类及成员的详细资料。
查看程序集清单的最好方式是使用 .NET IL 反汇编工具。IL 反汇编程序(ildasm.exe)可以在 FrameworkSDK\Bin 路径下找到,该路径在包含 .NET Framework 的目录下。(译者注:该文件在 VS2003 和 VS2005 中可找到,在 VS2008 中未找到。且,打开的文件,需是对应 VS 版本生成的文件。)你只需要在资源管理器中双击它就可以运行。要查看一个程序集,请执行 文件|打开,然后选择一个 .NET 程序集。反汇编结果显示了程序集清单以及在程序集中声明的任何命名空间(namespaces)(图 5)。关于命名空间(namespaces)的更多信息,参看本章后面的“命名空间(Namespaces)”一节。

图5. IL 反汇编程序允许你查看一个程序集的内容,包括任意的 MSIL 代码。
如果你展开命名空间节点,将会显示属于该命名空间的所有的类。图 6 显示了一些在反汇编程序中使用的图标列表及其描述。你可以在反汇编工具的帮助中找到这个列表。针对这些内容的详细描述(如类、接口、方法、静态方法等)请参看第五章 “C# 和 Visual Basic .NET 中的面向对象”。

图6. IL 反汇编程序使用不同的图标来表示程序集中不同的项目。
如果你双击反汇编器中树状视图的 Manifest节点,将会打开一个子窗口,在其中显示程序集的清单。当你打开程序集后,在窗口的顶部,你或许能看到程序集所引用的外部程序集列表(例如:“assembly extern System.Windows.Forms”)。你看到的第一行没有“extern”关键字的程序集引用表示从那里开始是清单的“identity”小节。在清单的 identity 段指定了程序集的名字。Identity 段也包含程序集的版本号。版本号显示在 “.ver” 的后面。
IL 反汇编程序最酷的特性大概是可以预览 MSIL 代码。如果你双击一个类的方法,它会打开一个窗口来显示 MSIL 代码。如果你想看到图 7所显示的 IL 代码,你可以选择 视图|显示源行 菜单。对许多开发者来说,相对于工具能带来的其他好处而言,可以看到源代码是所有想做的很酷的事情之一。

图 7. IL 反汇编程序允许你预览实际的 IL 代码、并随意的查看源代码。
未完待续......