主要解决问题:1. 我们写的CS文件如果编译成EXE呢?
如:创建一个源码文件Program.cs
public sealed class Program
{
public static void Main()
{
System.Console.WriteLine("Hi")
}
}
应用程序定义了Program类型,其中有个名为Main的 public static方法 。 Main引用了System.Console的类型。System.Console是Microsoft已经实现好的类型。用于实现这个类型的各个方法存储在MSCorLib.dll文件中。
将Program.cs编译生成exe文件 执行命令:
csc.exe /out:Program.exe /t:exe /r:MSCorLib.dll Program.cs
这个命令指示C#编译器生成名为Progam.exe 的可执行程序(/out:Program.exe),生成的文件属于Win32控制台应用程序类型(/t[arget]:exe).
MSCorLib.dll 是个比较特殊的文件,因为它包含了所有核心类型:Char,String,Int32等等,且由于这些类型被使用频繁,以至于C#编辑器会自动引用MSCorLib.dll程序集。
其上面 执行命令可简化为:
csc.exe /out:Program.exe /t:exe Program.cs
由于/out:Program.exe和/t:exe 的命令行开关是C#编辑器默认设定的,所有此命令行还可以继续简化为:
csc.exe Program.cs
当然如果你出于某种情况,不希望C#自动引用MSCorLib.dll程序集,那么可以使用 /nostdlib 开关
csc.exe /out:Program.exe /t:exe /nostdlib Program.cs
但要注意:因为Microsoft生成MSCorLib.dll程序集自身的时候便已经使用了/nostdlib 此开关。执行以上代码编译器将会报错。
2.生成的Program.exe文件又是什么呢?
首先,它是一个标准的PE(可移植执行体,Portable Executable)文件。这意味着运行32位或64位Windows的一台计算机能加载这个文件,并通过它执行某些操作。
Windows 支持两种类型的应用程序:具有控制用户界面(console user interface ,CUI)的和具有图形用户界面(graphical user interface,GUI)的。 由于指定了/t:exe开关,所以C#编辑器生成的是一个CUI应用程序。使用/t:winexe 开关,则可让C#编辑器生成一个GUI应用程序.