.NET 是一个独立于语言的平台。
但它也独立于平台吗?如何 ?
编辑:我听说,.NET 4.0 是考虑到平台独立性而开发的!好吧,如果是这样,希望它可以接管 Java!
编辑:答案取决于我们定义“平台”的方式,例如 Windows 平台的 .NET 和 Java 的 Mono。
但是,问题是,我们有没有独立于操作系统的通用开发平台!
操作系统独立性与平台独立性有关吗?
.NET 是一个独立于语言的平台。
但它也独立于平台吗?如何 ?
编辑:我听说,.NET 4.0 是考虑到平台独立性而开发的!好吧,如果是这样,希望它可以接管 Java!
编辑:答案取决于我们定义“平台”的方式,例如 Windows 平台的 .NET 和 Java 的 Mono。
但是,问题是,我们有没有独立于操作系统的通用开发平台!
操作系统独立性与平台独立性有关吗?
这实际上是您如何定义“平台”的问题。
例如,只要平台是 .NET,.NET 就是平台独立的,就像 Java 只要平台是 Java 就独立于平台一样。也就是说,.NET(和 Java)本身就是平台(CLR、JVM)。只要该平台的实现可用于给定的物理平台,是的,您可以在其上独立运行已编译的代码。
归根结底,“平台独立”就像“一次编写,随处运行”一样,是营销。但在实践中,目前有 JVM 实现可用于比 .NET 更具体的平台(尽管 Mono 项目等计划旨在改变这一点)。
要回答这个问题,我认为首先必须明确区分 CLI 和 .NET:
CLI(Common Language Infrastructure的缩写)是一种标准,因此它被设计为主要与平台无关的。在这里,平台是指底层的计算机架构,包括操作系统。
虽然标准可能需要某些不可能在所有架构上实现的东西(我正在考虑非常有限的平台,例如嵌入式系统),但这些可能被认为是边缘情况。
.NET是 Microsoft 的 CLI 主要实现,仅在 Windows 系统上运行。因此,.NET不是独立于平台的。
更新(2015 年 8 月):2014 年底,Microsoft 宣布计划逐步开源 .NET Framework 的部分源代码(特别是与服务器端应用程序相关的部分)。结果是.NET Foundation的.NET Core。
.NET Core旨在成为 CLI 的跨平台实现。
Mono也是 CLI 的一种实现,但设计用于在 Linux 和 Windows 等不同平台上工作。Mono 绝对比 .NET 更独立于平台。
其次,存在编译器输出的二进制兼容性问题。由于 CLI 标准定义了用于程序集的文件格式(PE 可执行文件的一种形式)和中间代码语言(称为 CIL),因此您可以在源代码后自由混合使用 VB.NET、C# 和其他一些语言编写的组件已编译为CIL。
从这个意义上说,CLI(及其所有符合要求的实现,例如 .NET)是与语言无关的。
有趣的是,您可以使用 Microsoft 的 .NET 编译器编译某些东西,并且由于标准规定的通用程序集文件格式,您应该能够在 Mono 项目中使用该程序集,反之亦然。从这个意义上说,.NET编译器工具链可以被认为是平台无关的——但不是 .NET本身。请记住,.NET Framework 还包含一个针对 Windows 的标准库(例如 WPF)。
取自维基:
不确定您的问题是什么意思,但如果您想知道 .NET 应用程序是否可以在任何操作系统上运行,答案是否定的。
.NET Framework 仅针对某些操作系统,例如 Windows。其他项目也可用于其他平台,例如 Linux 上的 Mono。
有一个称为“mono”的跨平台实现。Microsoft 的原始 .NET 版本仅适用于 Windows。
有关单声道项目的更多信息:http ://en.wikipedia.org/wiki/Mono_Project
DotNet 不是平台独立的,也可能是部分独立的,而 Java 是完全独立于平台的,因为它的 JVM(java 虚拟机)。了解 Java 独立性的最佳示例,如果安装了 JVM(Java 虚拟机),您可以在“汽车”微波炉、洗衣机或任何一台计算机上运行 Java 程序。Java字节码是独立免费的,不管我们使用mac、windows、unix什么的。
Mono是 .NET 的跨平台实现,但不受 Microsoft 支持,并且缺少一些功能。
linux 上有一些 .net 实现,可能在其他系统上也可以编译。
它被称为Mono。
只要您坚持使用 .Net 2.0,.Net 就可以在 MacOSX 和 Linux 上正常工作。一些较新的功能,如 LINQ、C# 3.0 等也已实现。您需要考虑到文件路径、文件权限等在不同平台上的工作方式并非 100% 相似。
忘了提我说的是Mono。
好的。.NET Framework 是否独立于平台很大程度上取决于“平台”的实际含义。
如果Platform = Operating System,则 .NET Framework 不是独立于平台的,而 .NET Core 是。
如果Platform = Independent System/PC,那么是的 .NET Framework 是平台独立的,因为 CLR/CLI(就像 Java 的 JVM)。
在 .NET 编程语言的编译过程中,源代码被翻译成 CIL 代码,而不是平台或处理器特定的目标代码。CIL 是一个独立于 CPU 和平台的指令集,可以在任何支持公共语言基础结构的环境中执行,例如 Windows 上的 .NET 运行时或跨平台的 Mono 运行时。理论上,这消除了为不同平台和 CPU 类型分发单独二进制文件的需要。CIL 代码在运行时经过安全性验证,提供比本地编译的二进制文件更好的安全性和可靠性。执行过程如下所示: 源代码转换为通用中间语言,CLI 相当于 CPU 的汇编语言。然后将 CIL 组装成字节码并创建一个 .NET 程序集。在执行 .NET 程序集时,它的字节码通过运行时的 JIT 编译器生成本机代码。(提前编译在运行时消除了这一步。)本机代码由计算机的处理器执行。然而,微软已经做出了一些在 .NET 上运行的改进,这些改进是专门为 Windows 获得的,而 Mono(其基于 linux 的对应物)则远远落后。
.NET 独立于平台,因为它可以在多个版本/风格的操作系统上运行(例如:MONO 在许多流行的操作系统上运行各种 .Net 框架版本。请参阅http://mono-project.com/Compatibility)
.NET 是平台相关的,因为一旦编写代码,它就会被编译成独立于平台但它是半编译代码的 Microsoft 中间语言 (MSIL) 代码,然后公共语言运行时 (CLR) 将其转换为特定于设备的代码,即平台相关。(MSIL 通过 CLR 发送到 JIT。在运行时,所有内存分配都由 JIT 完成。)
如您所知,.NET 使用了框架 4.0。因此,编写的代码(源代码)转换为字节码。该转换是通过 MSIL(Microsoft 中间语言)完成的。MSIL 是一种特殊类型的编译器,可将源代码编译为执行代码。哪个运行或支持任何平台。所以由于使用 MSIL .NET 语言是跨平台语言。
.Net 被称为部分独立于平台,而不是完全独立于平台。但是,.Net 支持某些其他操作系统,如 win98、winnt、winserver 2000 和新版本以及 linux。在同样的情况下,clr 不适用于 win95,这意味着 .net 无法在 win95 上执行。所以我们可以说,.net 是部分平台独立而不是完全平台独立。