日期:2014-05-19  浏览次数:20919 次

菜鸟提问,希望高手解答一个关于c#运行机制的问题
许多资料上说:asp.net的框架是这样执行的如下(例如用的是C#语言):
<1> 经过C#编译器生成程序集(*.exe/*.dll)
<2> 再由公共语言运行库(CLR)执行程序集--> 本地代码.
想问一下,如果用一个记事本新建一人*.cs文件内容如下:
using   System;
class   A
{
    public   static   void   Main()
      {
            Console.WriteLine( "你好 ");
      }
}
之后在DOS下执行:csc   *.cs   文件执行时会生成*.exe程序集,如果此时在DOS中执行刚刚生成的*exe文件,会输出 "你好 ".想问一下,此时的工作流程是什么样的啊?此时生成的*.exe文件,是C#编译器生成的程序集吗?我在dos中调用   *.exe是不是没有经过CLR啊?
还有文件开头引用的命名空间using   System是C#编译器的命名空间(C#有自己的命名空间吗?,还是netframwork的命名空间啊?



------解决方案--------------------
楼主应该先学习一下IL的相关知识
.NET Framework下所有的语言编译器实际上都是把代码翻译成中间语言(MSIL),然后生成程序集。无论是VB.NET还是C#他们使用的命名空间和类库都是中间语言书写的,所以能够互操作和相互调用,实际上就是在个别语言之下加上了一个共同解释。
.EXE执行是需要CLR操作的,这部分控制是因为.NET Framework编译程序集的时候在.EXE PE格式的头中设置了Meta数据让它去通过CLR解释后才能执行。

推荐书籍:.NET框架程序设计
是一本很实用讲解.NET Framework内部机制的书。