c# - 当用户单击 .NET 程序集 (EXE) 时会发生什么?

标签 c# .net

假设我们有 .NET Winforms 应用程序或控制台应用程序。 谁能告诉我在启动 WinForm 或控制台应用程序之前会发生什么。我想知道内部结构——比如 EXE 将如何与框架通信、CLR 的作用是什么、在启动应用程序本身时发生异常时会发生什么等...

最佳答案

当您双击 .net .exe 程序集时:

  • Windows 的 PE 加载程序启动
  • 如果您使用的是 Windows >= Windows XP,它将检测到该可执行文件是托管可执行文件,并通过调用 mscoree.dll 中的 _CoreExeMain 将其转发到 .net(如果您双击托管 .dll,则为 _CoreDllMain) .它可以使用程序集配置文件来了解要使用哪个运行时。
  • 如果您使用的是 Windows < Windows XP,.exe 文件包含一小段 native 代码,会跳转到 mscoree.dll 的 _CoreExeMain 或 _CoreDllMain。
  • 然后 mscoree.dll 根据全局配置、程序集配置文件等初始化 .net 运行时。
  • 然后如果它是一个.exe,它会JIT编译它的入口点方法,并开始执行它。

关于c# - 当用户单击 .NET 程序集 (EXE) 时会发生什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2788270/

相关文章:

c# - 为什么使用 Activator.CreateInstance 时需要定义无参数构造函数?

c# - 将前导零添加到日期时间 C#

c# - 在 C# 中通过回车符 (CR) 拆分字符串的常量

.net - 您在 UI 中使用 System.Component.BackgroundWorker 的频率如何? (如果曾经)

c# - 如何从 WebRequest 中删除代理并保持 DefaultWebProxy 不变

c# Directory.CreateDirectory( path ),我应该先检查路径是否存在吗?

c# - 这个语法在 C# 中的名称是什么(类似多元组的赋值)?

c# - Windows/C# 通过操作系统(不是 IP 地址)检测用户的半球?

c# - 在 C# 中读取 .txt 文件的十六进制值

.net - 未声明。由于其保护级别,它可能无法访问