.NET Core 和 .NET Framework 启动可执行文件的差别

在 Windows 下,使用 .NET Framework 构建出来的应用,可以只有一个可执行文件,在可执行文件里面包含了 IL 代码。使用 .NET Core 构建出来的应用,将会包含一个 Exe 可执行文件,和对应的 Dll 文件,而 IL 代码将放在 Dll 文件里面。那么使用 .NET Framework 和使用 .NET Core 所输出的 Exe 可执行文件有什么差别,本文将从文件格式以及启动过程两个方面给大家聊聊这两个的不同

与封闭的 dotnet framework 不相同的是,咱可以从 GitHub 上获取完全的 dotnet core 整个的源代码。也因此咱能了解到的 dotnet core 的细节将会比 dotnet framework 多得多。在本文开始之前,必须要说明的是,本文非入门向,而且本文的内容是需要在很多的限制条件下才成立。在经过了这么多年的发展,无论是 dotnet framework 还是 dotnet core 都有着各自的不同的多个版本甚至的多个分支,每个之间都有着很多差别。而限于我的技术和考古能力,我仅仅能聊的只有最通用的部分

当前有很多书籍在讲 dotnet core 的底层,我在这里将这些书籍推荐给期望了解更多底层细节的伙伴:农夫的 《.NET Core底层入门》 以及伟民哥翻译的 《.NET内存管理宝典 - 提高代码质量、性能和可扩展性》 这两本书。本文的很多细节出处都来自于这两本书

本文所指的 dotnet core 包括了 dotnet core 以及 dotnet 5 等多个版本,不讨论加入 Mono 以及加入 .NET Native 和单文件发布等科技。本文的 dotnet framework 指的是 dotnet framework 4.0 到 4.8 的版本,其他版本不在本文范围内,根据我的考古,更古老的 dotnet framework 有不同的行为,但我缺乏足够的依据,因此也不在放在本文

先从文件的格式开始聊起。在咱写一个默认的 .NET Framework 控制台应用的时候,在 VisualStudio 上进行 Debug 调试构建输出,此时将可以从输出文件路径上看到仅仅只有一个 EXE 可执行文件,而没有 DLL 动态链接库文件。这个输出的 Exe 可执行文件是一个符合标准的 PE 格式的文件。而 PE (Portable Executable)格式文件是微软 Win32 环境可执行文件的标准文件格式。也就是说使用 .NET Framework 输出的可执行文件和其他 Win32 可执行文件的文件格式是相同的。尽管格式上是相同的,微软在 Windows 下依然对 .NET Framework 应用做了特别的处理,因为在 .NET Framework 输出的可执行文件里面,包含了从元数据和 MSIL 代码,换句话说就是真正的逻辑是包含在 MSIL 代码里面,而不是作为本机代码的存在。这就需要 Windows 系统在用户执行 .NET Framework 可执行文件的时候进行一些特殊的处理

那既然 .NET Framework 的可执行文件在执行时需要 Windows 做特殊的处理,那么 Windows 如何了解到这是一个需要处理的 .NET Framework 应用?根据 Managed Execution Process 官方文档 可以了解到,在 .NET Framework 的输出可执行文件里面,在 PE 文件的 COFF 头内容添加了特殊的内容,用来标识这是一个 .NET Framework 应用

在运行 .NET Framework 的可执行文件的时候,首先进入的 operating system loader 将会判断 PE 文件的 COFF 头内容,通过 COFF 头识别这个可执行文件是否 .NET Framework 可执行文件。对于 .NET Framework 可执行文件而言,将会加载 mscoree.dll 进行执行,通过 _CorValidateImage 和 _CorImageUnloading 分别用来通知 operating system loader 托管模块的映像的加载和卸载。其中在 _CorValidateImage 中将执行确保该代码

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值