词条 | hello.exe |
释义 | 程序说明一旦安装了 .NET,您就可以使用记事本或 Visual Studio 创建包含前面的“Hello World”程序之一的文件。创建一个空的子目录,将文件保存到该子目录中,并命名为 hello.cs(CS 表示为 C# 文件)。 显示程序打开命令提示并更改到正在使用的目录。键入“csc hello.cs”命令来编译该程序。如果在目录中查看,您将发现已经创建了 hello.exe 文件。键入“hello”执行该文件,控制台窗口将显示“Hello, World!”。 执行程序可执行文件的内容,列出目录的内容,请注意只有两个文件:hello.cs 和 hello.exe。Hello.exe 是一个非常小的文件,只有 3 KB 左右。真简单。 但是,hello.exe 文件中有些什么?这就不那么简单了。有一个存根加载器,即很小的本机机器语言程序,它可加载 .NET Runtime 并给予其控制权以便使它开始执行您的程序。 但是两个重要的部分是元数据和 IL 中的代码,元数据向 Common Language Runtime 和可能引用程序中的类型的编译器解释该程序。(您可能会想起 IL 是 .NET Runtime 的机器语言。)当 Runtime 即将开始执行每种方法时,它将 IL 转换为本机代码,然后执行本机代码。.NET 从来不解释 IL,它总是将 LI 编译成本机代码。 查看程序如何查看元数据和 IL?使用 IL 反汇编 (ILDASM) 工具会使该操作变得非常简单。只要在命令提示下输入图 “ILDASM hello.exe”(假设 hello.exe 文件在当前目录下)就可以了。您可以看到一个如下显示的窗口。 1:ILDASM 窗口 最初,“hello.exe”之下的目录树显示两个部分:清单和类 MyApp。由于模块 hello.exe 有一个清单,所以我们知道它就是程序集的说明文件。在这种情况下,程序集仅包含一个模块文件 hello.exe。 清单 双击清单将看到元数据的一小部分,这部分说明了这个程序集(应用程序或组件)中包含的模块(文件)。对于第三个 hello.exe 程序,它看起来如下: .assembly extern mscorlib { .originator = (03 68 91 16 D3 A4 AE 33 ) .hash = (52 44 F8 C9 55 1F 54 3F 97 D7 AB AD E2 DF 1D E0 F2 9D 4F BC ) .ver 1:0:2204:21 } .assembly hello as "hello" { // --- 下面的自定义属性是自动添加的 // 不要取消注释 ------- // .custom instance void [mscorlib]System.Diagnostics.DebuggableAttribute::.ctor(bool, bool) = ( 01 00 00 01 00 00 ) .hash algorithm 0x00008004 .ver 0:0:0:0 } .module hello.exe // MVID: {59365AA0-B469-4359-9BAF-4840A9257C61} 这个元数据声明程序集 hello 的版本为 0.0.0.0,包含模块 hello.exe,并且使用 1.0.2204.21 版本的 mscorlib 程序集(.NET Runtime 主 DLL)。模块版本标识符 (MVID) 是一个包含此版本模块 hello.exe 的 ID 的全局唯一标识符 (GUID)。 |
随便看 |
百科全书收录4421916条中文百科知识,基本涵盖了大多数领域的百科知识,是一部内容开放、自由的电子版百科全书。