在我从 .NET Framework 到 .NET Core 的过渡期间,有一件事情让我很长时间都感到困惑,那就是 Runtime 运行时, 实际上 Runtime 在 .NET Framework 和 .NET Core 中具有不同的含义。
.NET Framework 运行时的历史
当有人问我们,什么是 .NET Framework 运行时,我们都会说 CLR(公共语言运行时),这是绝对正确的。
这就自动给我们留下了一个印象,.NET Core 的运行时就是 CoreCLR。然而,这也是对的。
但是现在让我们了解一下 .NET Core 运行时除了 CoreCLR 之外, 还有什么额外的东西?
.NET Core 运行时有哪些新功能?
很多网站上都提到, 您必须下载 .NET Core 运行时才能运行 .NET Core 应用程序,或者安装最新的运行时才能运行 .NET 6 程序,因为 .NET 6 程序不能在之前的 .NET 5 运行时或者 .NET Core 3.1 运行时工作。
为什么有这么多运行时?
真让人头大 (如果您和之前的 .NET Framework 进行比较),因为我们没有在 .NET Framework 中更新过运行时, 包括从 4.5 升级到 4.6,或从 4.6 升级到 4.7 或 4.8。
那么,为什么 .NET Core 会要求我们更新运行时呢?
好吧,实际上 运行时 在不同的上下文中具有不同的含义。
•.NET Framework 中的运行时只是 CLR•.NET Core 中的运行时不仅仅是 CoreCLR,还包括 .NET Core 基础类库 (BCL)。
从 .NET Core 开始,Microsoft 就传达出一个信息, .NET Core 运行时不仅仅是 CLR,它还包括运行 .NET Core 应用程序所必需的一切。
所以,典型的 .NET Core 运行时 包括了以下内容:
•CoreCLR — 实际运行时•.NET Core BCL — 基础类库
安装 .NET Core 运行时后,就可以运行.NET Core 控制台应用程序。
但是仅安装了 .NET Core 运行时, 并不能运行 .NET Core Web 应用程序。
如果要运行 .NET Core Web 应用程序,同时需要 ASP.NET Core 运行时 和 .NET Core 运行时。
总而言之,运行 .NET Core Web 应用程序需要以下条件:
•.NET Core 运行时 (CoreCLR + BCL)•ASP.NET Core 运行时(.NET Core 框架的类库)
您可以从这个位置查看所有已安装的运行时:C:\Program Files\dotnet\shared
现在事情已经很清楚了!
混乱的根源
造成这些混乱的原因是,对于早期的 .NET Framework,我们没有将 BCL(基础类库)视为运行时的一部分,而只是将 CLR 视为运行时。理想情况下,CLR 和 BCL 应该统称为 .NET Framework Runtime。