.NET Core 与 .NET Framework 相比如何在内部工作?

the*_*ian 6 .net c# .net-core asp.net-core

在程序的构建和运行方式方面, .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 有何不同。

谢谢你。

Kei*_*ith 2

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

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

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

区别几乎完全在于支持的框架 - 虽然完整的 .NET 与 Windows 绑定在一起,但.NET 标准库是真正跨平台的。

这个问题太大了:我们一直在努力将 .NET 中的所有内容移植到 .NET Standard 1.5,但这样的工作还有很多。对于 .NET Core,有几个地方有一个全新的范例(例如 ASP.MVC 和 ASP Core MVC 完全不同)。您最好将问题缩小到特定领域和平台。

很快,所有.NET 将在 .Net Standard 2.0 库上运行,而 .NET Framework 4/5/无论什么都将只是在其上运行的旧版且仅限 Windows 的组件(WPF、WinForms 等)。