use*_*287 7 .net c# compiler-construction cil
我只是想更好地掌握以下代码添加到文件并使用.cs扩展名保存时在简单场景中发生的事情:
public class HelloWorld
{
public static void Main()
{
System.Console.WriteLine("Hello World!");
System.Console.ReadLine();
}
}
Run Code Online (Sandbox Code Playgroud)
然后这个程序在windows命令行运行:
C:\Windows\Microsoft.NET\Framework\v4.0.30319>csc /t:exe /out:C:\HelloWorld\HelloWorld.exe C:\HelloWorld\HelloWorld.cs
Run Code Online (Sandbox Code Playgroud)
我可以看到这个过程生成一个.exe文件,但是当阅读维基百科上的编译过程时,它指出:
- 源代码转换为通用中间语言(CIL),这是CLI等同于CPU的汇编语言.
- 然后将CIL组装成所谓的字节码形式,并创建CLI组件.
- 执行CLI程序集后,其代码将通过运行时的JIT编译器传递,以生成本机代码...
- 本机代码由计算机的处理器执行.
那么.exe文件本身只包含Common Intermediate Lanaguage吗?这个文件本身就是维基百科文章所称的'CLI程序集'吗?我有点困惑,因为我只能看到.exe文件,对我来说,'assembly'这个术语推断出多个文件.
相关问题:
Ode*_*ded 12
不,它没有.
可执行文件是PE映像.
有关详细信息,请参阅.NET程序集剖析 - PE标头.
.NET程序集构建在PE(可移植可执行文件)文件格式之上,用于所有Windows可执行文件和dll,它本身构建在MSDOS可执行文件格式之上.这样做的原因是,当.NET 1发布时,它不像现在这样是操作系统的内置部分.在Windows XP之前,.NET可执行文件必须像任何其他可执行文件一样加载,必须执行本机代码才能启动CLR以读取和执行文件的其余部分.