【发布时间】:2016-05-27 02:31:16
【问题描述】:
目前正在尝试了解 .NET 平台标准,我发现自己对“不同平台”的概念感到非常困惑。
我会尽量说明我的观点。我现在对 .NET 框架的看法是,.NET 大致由 CLR、BCL 和用于启动 CLR 并提供虚拟机和底层操作系统之间的接口的支持软件组成。
因此,当我们使用 .NET Framework 进行编码时,我们确实以某个版本的框架为目标,因为我们从 BCL 使用的类型随框架一起提供,因此取决于特定的版本。
现在,.NET Core 与我理解的完全不同。并非所有都像那样打包在一起。我们有 CoreCLR,它是一个运行 IL 的轻量级 VM,CoreFX 是正确组织为 NuGet 包的库,到目前为止,我们有 DNX/DNVM/DNU,它提供了诸如启动 CoreCLR 和与操作系统。
无论如何,尽管我们在 Windows 7、Windows 8 或 Windows 10 上安装框架,我们针对框架进行编码。
现在,在 .NET 平台标准规范中,我们看到以下定义:
平台 - 例如.NET Framework 4.5、.NET Framework 4.6、Windows Phone 8.1、MonoTouch、UWP 等。
之后我们还会看到一个平台列表,其中包括
- .NET Framework 2.0 - 4.6
- Windows 8
- Windows Phone 8.1
- 银光 4、5
- .NET Framework 4.5.1 - 4.6 上的 DNX
- .NET Core 5.0 上的 DNX
现在这完全让我感到困惑。不过,我总是:我们针对 .NET Framework 进行编码,无论如何,框架就是框架。
但这里我们有这些平台,其中包括 .NET 框架只是众多平台之一。例如,我们有 Windows 8,但是等一下,在 Windows 8 上运行 .NET 与在任何其他操作系统上运行 .NET 不一样吗?为什么它与 .NET Framework 2.0 - 4.6 平台分开?
我们还将 DNX 作为特定平台。这让我想知道:平台是与引导虚拟机和提供与操作系统接口相关的“支持东西”吗?还是平台包含虚拟机?
无论如何,可以看出我很困惑。这些平台到底是什么,这与我目前对 .NET Framework 的理解有何关系?另外,为什么要单独描述 .NET Framework 2.0 - 4.6?此处描述的所有内容不是 .NET Core 的某个版本吗?
【问题讨论】:
-
.NET 中没有“虚拟机”。
-
@IInspectable blogs.msdn.com/b/brada/archive/2005/01/12/351958.aspx “所以底线是 CLR 和 JVM 在同一个类中,您是否称该类软件为“虚拟机”“执行引擎”取决于您的观点。”
-
我一直认为 CLR 是一种虚拟机。一种软件,充当应用程序在其上运行的沙箱。我们将 IL 字节码提供给该 VM,并且包含的 JIT 编译器生成本机代码并在该特殊沙箱上运行它。尽管我从未详细研究过 CLR,但 GitHub 上的文档将其描述为“一个完整的高级虚拟机,旨在支持多种编程语言和它们之间的互操作”。这让我相信我的粗略理解是合理的。
-
本文档中的“.NET Framework”是指您通过 msi 安装程序在机器范围内安装的非核心、非开源、.net。它包括 gac (c:\windows\assembly) 和编译器等 (c:\windows\mictosoft.net\framework64\vX.X)
-
是的@RichardSzalay,我猜到了版本。文档将其称为 .NET Framework 2.0 - 4.6。但是,文档仍然认为它是一个不同于 Windows 8 的平台。但是要在 Windows 8 或任何操作系统上运行 .NET 应用程序,我们需要安装相应的 .NET Framework,对吗?因此,最终我们将在 .NET Framework 本身之上运行。我确实了解拆分 .NET Full 和 .NET Core,但我不明白所有这些平台的想法。
标签: c# .net windows dnx .net-core