【问题标题】:How does .NET Core Work Internally versus .NET Framework?.NET Core 与 .NET Framework 如何在内部工作?
【发布时间】:2026-01-05 20:15:02
【问题描述】:

在程序的构建和运行方式方面,.NET Core 与 .NET Framework 的内部实现有何不同?我知道常规的 .NET Framework/C# 项目基本上被编译成 CIL 代码,分发,然后在运行时由 JITer 编译,最终将它们逐个函数地转换为机器代码(除非程序员指定了预编译选项)。这对于 .NET Core 应用程序也是如此吗?是否有任何主要差异

注意事项:

  1. 是的,我知道这两件事都非常复杂,我不希望回答者详细解释每个小组件。

  2. 我之前听说过 .NET Framework 的 CLR 被称为虚拟机,但我知道这是有争议的,并且在 this one 等帖子中看到了这样的争论,以及 CIL 与 Java 的比较字节码。这些都是无聊的论点,与问题无关。

  3. 我发现了类似的问题,但是,这些问题似乎集中在 .NET Core 在功能/可用性方面对我们作为客户端程序员的不同之处。这个问题与此无关,而是询问 .NET Core 在内部实现方面与 .NET Framework 有何不同。

谢谢。

【问题讨论】:

  • 它们是 .NET 平台的两种不同实现。如果你想确切地知道它们如何不同,那就更难了——.NET Core 的源代码是freely available,CLR 的源代码不是(公开的最新版本是 .NET 2.0 以 SSCLI 的形式,但祝你现在找到它)。

标签: c# .net asp.net-core .net-core


【解决方案1】:

IL 或 JIT 流程没有区别。我有旧的 .NET 代码,可以直接执行在 Core 上运行良好的 IL。它们都完全实现了CLI ECMA standard,它们都具有相同的运行时组件。

每个平台的实现可能存在非常细微的差异,就像 Windows .NET 和 Mono 之间一样,但我不知道。

CLI 步骤和框架实际上是不同的东西:您可以构建编译为有效 IL 的 C# 代码,而无需 .NET 或 Core,但我不确定即使没有原始类型,您实际上能做什么。

区别几乎完全在于受支持的框架 - 虽然全脂 .NET 与 Windows 相关联,但 .NET Standard libraries 是真正的跨平台。

这个问题太大了:大家齐心协力将 .NET 中的所有内容移植到 .NET Standard 1.5,但其中有很多。对于 .NET Core 有几个地方有一个全新的范例(例如 ASP.MVC 和 ASP Core MVC 是完全不同的)。您最好将问题缩小到特定区域和平台。

很快所有 .NET 将在 .Net Standard 2.0 库上运行,而 .NET Framework 4/5/任何东西都将是旧版和仅限 Windows 的组件(WPF、WinForms 等) 在顶部运行。

【讨论】: