.NET Framework与.NET Core程序集层级对比解析
.NET Framework与.NET Core的程序集流程差异解析
.NET Framework 程序集流程
- 编译阶段:C#/VB等语言编译器将源码编译为MSIL/CIL(中间语言),同时生成包含元数据的程序集文件(.exe/.dll)。
- 执行阶段:
- 程序启动后,CLR(Common Language Runtime)加载程序集,通过JIT(即时编译器)将MSIL即时编译为对应CPU架构的原生代码。
- 依赖Windows系统中的
mscorlib.dll等核心类库,以及Windows特定的COM交互、WPF/WinForms等框架组件。
.NET Core 程序集流程
.NET Core的流程为跨平台设计,核心组件做了模块化拆分:
- 编译阶段:
- 同样通过Roslyn编译器将源码编译为CIL(与MSIL本质一致,命名统一为CIL),生成标准.NET程序集(.dll;控制台/桌面应用会附带平台特定的启动器.exe)。
- 支持
dotnet publish命令生成自包含部署包,打包应用程序集、CoreCLR运行时及依赖类库,无需目标机器预先安装.NET环境。
- 执行阶段:
- 由CoreCLR替代原CLR,负责程序集加载、JIT编译(默认使用RyuJIT编译器,性能优于旧版CLR的JIT)。
- 可选AOT(提前编译):通过
dotnet publish -r <runtime-id> -p:PublishAot=true将CIL直接编译为目标平台的原生二进制文件,运行时无需JIT,启动速度更快。 - 核心类库拆分为
System.Runtime等独立NuGet包,不再依赖单一的mscorlib.dll,实现跨平台API行为统一(如System.IO在各平台操作逻辑一致)。
核心编译执行差异
- 运行时:.NET Framework依赖Windows专属CLR;.NET Core使用跨平台的CoreCLR,且CoreCLR开源,可自定义编译适配更多平台。
- 部署模式:.NET Framework仅支持框架依赖部署(需目标机器预装对应版本);.NET Core支持框架依赖、自包含两种模式,自包含模式可打包运行时。
- AOT支持:.NET Framework无原生AOT能力;.NET Core(及.NET 5+)提供成熟AOT编译,可生成单文件原生程序。
- 类库架构:.NET Framework核心类库为紧密耦合的
mscorlib.dll;.NET Core采用模块化设计,功能模块以独立NuGet包形式按需引用。 - 跨平台:.NET Framework仅支持Windows;.NET Core支持Windows、Linux、macOS等多平台,还可通过Mono适配移动设备。
权威资料来源
- .NET官方文档:涵盖.NET Framework与.NET Core(及后续版本)的程序集、编译执行全流程细节,包括各层级技术规范。
- CoreCLR开源仓库:可查看CoreCLR源码,了解程序集加载、JIT编译的具体实现逻辑。
- Roslyn编译器文档:Roslyn作为.NET官方编译器,其文档详细解释了源码到CIL的编译阶段细节。
- .NET设计规范文档:包含.NET平台的程序集结构、元数据定义等底层规范,适用于Framework和Core。
内容的提问来源于stack exchange,提问作者Yisus
相关产品推荐
相关产品推荐

