我知道它的作用,但我没有找到它是如何执行的解释。与Java不同,我们不需要调用虚拟机可执行文件来运行我们的程序。
在.NET中,只需正常运行可执行文件。它是Windows服务吗?它是.Net可执行文件引用的DLL吗?它是否与操作系统内核绑定?它是一种像防病毒一样的拦截器吗?它是什么?
答案 0 :(得分:3)
Windows NT用于可执行文件的Portable Executable格式,以后使用Metadata within the PE header to support CLR executables。
Windows安装.NET Framework时,会了解此信息,并使用它来启动带有可执行文件的CLR。
答案 1 :(得分:2)
这取决于您拥有的Windows版本。但基本机制是每个.NET程序集都包含五个字节的非托管代码。对于EXE,它是c:\ windows \ system32 \ mscoree.dll中_CorExeMain()的JMP指令。然后,重要的是初始化CLR并启动程序的Main()方法。
Windows的更高版本有一个加载程序,它知道.NET程序集的格式并直接与mscoree.dll集成。需要支持32位可执行文件可以启动64位进程的非常不寻常的功能。有关this answer中的更多信息。
这是10,000英尺的视图。 .NET和Java之间的本质区别在于.NET程序集可以包含非托管代码(如JMP)和数据(程序集清单和IL)。 Java .class或.jar文件是纯数据。
答案 2 :(得分:0)
如果我没记错的话。早期版本的.net并没有被Windows自动加载,但多年来,随着Windows版本的增加,这个过程的引导现在似乎无法实现。
.Net的CLR是Microsoft的CLI Common Language Infrastructure的实现。 Mono是它的另一个实现。
从技术上讲,CLR是作为COM服务器组件实现的,它在Windows中运行并管理.net程序集的执行。
如果您真的想了解详细信息,请查看Jeffrey Richter的书:CLR via C#