假设我们有.NET Winforms应用程序或控制台应用程序。有人能告诉我在WinForm或控制台应用程序启动之前会发生什么吗?我想知道内部机制--比如EXE如何与框架通信,CLR的作用是什么,在启动应用程序itself.etc时如果发生异常会发生什么……
发布于 2012-08-16 18:14:36
MSCoreEE.dll (MSCore Execution Engine.Dll only one instance for one machine)表示,例如当双击或启动.Net程序集/ .exe时,OS将加载windows加载器,windows加载器将依次加载PE报头(可移植可执行文件)[在win32可执行文件的情况下,PE报头将包含引导程序(静态Main())的地址,其中如在.Net中,引导程序将包含MSCoreEE.Dll的地址,该地址将出现在C:\Windows\System32\mscoree.dll中,该地址将被执行并加载.Net运行时,.net程序集将针对该运行时进行加载。可以在计算机上安装多个版本的.Net运行时,但是,将只有一个mscoreee.dll实例来加载特定的运行时。
CLR将自己创建第一个应用程序域并加载程序集(如果程序集没有在代码中创建其他应用程序域)
CLR在内部创建3个应用程序域1.系统应用程序域a.负责加载共享和默认应用程序域,还将mscorelib.dll加载到共享应用程序域b.Create 3分离异常的实例i.致命引擎异常2.堆栈溢出异常iii。内存不足异常(非常重要的是,当开发者认为应用程序可能内存不足并想要将该异常写入日志文件时,会发生内存不足异常,因为没有剩余的内存来创建该异常的新实例,因此,CLR预先创建了该异常以供将来在应用程序中使用2.共享应用程序域a.包含mscorlib.dll b.由其他应用程序域使用的其它通用库c.然而,开发人员不能将定制的Dll推入共享应用程序域,因为它不能从CLR的外部控制,CLR托管这些dll,并且CLR本身无法控制开发人员如何托管它,但是可以使用一些COM接口,开发人员可以在其中托管CLR习惯3.默认应用程序域a.所有用户都二进制.exe,dll在此处加载
发布于 2010-05-07 19:58:51
您可能需要这样的东西: Microsoft .NET内部。
或者因为它还没有发布: Essential .NET,第一卷:公共语言运行时
http://www.amazon.co.uk/Essential-NET-Microsoft-Development-Paperback/dp/0201734117
https://stackoverflow.com/questions/2788270
复制相似问题