考虑我们有.NET Winforms应用程序或控制台应用程序。 任何人都可以告诉我在WinForm或控制台应用程序启动之前会一步一步发生什么。我想知道内部 - 就像EXE将如何与Framework通信,CLR的作用是什么,在启动应用程序本身时发生异常时会发生什么。等等...
答案 0 :(得分:13)
双击.net .exe程序集时:
答案 1 :(得分:1)
MSCoreEE.dll(MSCore Execution Engine.Dll只有一台机器的一个实例) 例如,当双击或启动.Net程序集/ .exe时,操作系统将加载Windows加载程序,这将加载PE标头(可移植可执行文件)[在win32可执行文件的情况下,PE标头将包含地址引导程序(静态Main())从它将加载并执行main方法,在.Net中,引导程序将包含将存在于C:\ Windows \ System32 \ mscoree.dll中的MSCoreEE.Dll的地址将执行并加载.net程序集所针对的.Net运行时。可以在机器上安装多个版本的.Net运行时,但是,只有一个mscoreee.dll实例可以加载特定的运行时。
CLR将自己创建第一个APP域并加载程序集(如果程序集没有在代码中创建其他应用程序域)
CLR在内部创建3个应用程序域 1.系统应用程序域 一个。 负责加载共享和默认应用程序域,还将mscorelib.dll加载到共享应用程序域 湾创建3个独立的异常实例 一世。致命引擎异常 II。堆栈溢出异常 III。内存不足异常(非常重要的是,当开发人员认为应用程序内存不足并希望将异常写入日志文件时,CLR会预先创建“内存不足”异常bcose,因此会产生内存不足异常没有内存来创建此异常的新实例,因此,CLR会预先创建此异常以供将来在应用程序中使用 2.共享应用程序域 一个。包含mscorlib.dll 湾其他应用程序域使用的其他公共库 C。但是,开发人员无法将自定义Dll推入共享应用程序域,因为它无法从CLR外部控制,CLR托管这些dll,而CLR本身无法控制开发人员如何托管它,但是可能使用某些COM接口开发人员可以按惯例托管CLR的地方 3.默认App域 一个。所有用户二进制文件都是.exe,Dll在这里加载
答案 2 :(得分:0)
您可能需要以下内容:Microsoft .NET Internals
或者因为尚未发布:Essential .NET,第I卷:公共语言运行时
http://www.amazon.co.uk/Essential-NET-Microsoft-Development-Paperback/dp/0201734117