
模块,准确的来说,并不是C#的概念,而是微软的运行时环境CLR的概念。想要学好C#断然不能只是会使用VS之类的IDE写写代码然后编译运行,很多相关的概念我们也需要去了解。
这一节,我们就简单讨论下C#模块。
其实C#模块,我们几乎每天都需要接触到(如果我们每天都需要写C#代码并且进行编译的话),每次我们对一个C#类(class)进行编译都会生成模块。
csc编译获得模块
下面,我们以经典的hello world为例。
- 创建一个Program.cs文件,内容只是简单的向控制台输出hello world:
public sealed class Program{
public static void Main() {
System.Console.WriteLine("hello world");
}
}
- 使用csc.exe 对文件进行编译:
csc.exe /out:Program.exe /t:exe /r:MSCorLib.dll Program.cs
如果以上命令运行成功的话,我们会在源文件的文件夹中得到一个Program.exe的文件。这个Program.exe 就是一个标准的PE32或者PE32+的文件(PE32+对应的是64位,这里没有PE64),也就是一个C#模块。
在继续讲解C#模块之前, 我们先来看看上面这个编译命令,这个命令还是有点意思的。
/out:Program.exe 告诉了编译器我们最后需要生成的是一个exe文件。
/t:exe 看起来和上一个out参数似乎有些重复,这也是这个参数比较迷惑人的地方,t其实代表的是target,exe其实只是指代了没有图形界面的应用程序。如果是我们平常使用的比如迅雷之类的应用那么使用的就应该是winexe。这种类型是具有图形界面的。
/r:MSCorLib.dll,r这里是reference,是为了声明编译Program.cs我们需要使用到定义在MSCorLib.dll 中的某些类型(在

本文介绍了C#模块并非C#自身概念,而是CLR的一部分。通过csc编译器和响应文件创建模块,详细阐述了模块的组成部分:PE头文件、CLR头文件、元数据和IL代码,以及它们在运行时的作用,帮助理解C#程序的编译和运行过程。
2321

被折叠的 条评论
为什么被折叠?



