6

.NET 是一个独立于语言的平台。

但它也独立于平台吗?如何 ?

编辑:我听说,.NET 4.0 是考虑到平台独立性而开发的!好吧,如果是这样,希望它可以接管 Java!

编辑:答案取决于我们定义“平台”的方式,例如 Windows 平台的 .NET 和 Java 的 Mono。

但是,问题是,我们有没有独立于操作系统的通用开发平台!

操作系统独立性与平台独立性有关吗?

4

15 回答 15

19

这实际上是您如何定义“平台”的问题。

例如,只要平台是 .NET,.NET 就是平台独立的,就像 Java 只要平台是 Java 就独立于平台一样。也就是说,.NET(和 Java)本身就是平台(CLR、JVM)。只要该平台的实现可用于给定的物理平台,是的,您可以在其上独立运行已编译的代码。

归根结底,“平台独立”就像“一次编写,随处运行”一样,是营销。但在实践中,目前有 JVM 实现可用于比 .NET 更具体的平台(尽管 Mono 项目等计划旨在改变这一点)。

于 2010-09-07T08:05:43.797 回答
10

要回答这个问题,我认为首先必须明确区分 CLI 和 .NET:

  • CLICommon 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)。

于 2010-09-12T10:01:30.340 回答
5

取自维基

  • 不。DotNet 不是独立于平台的。
  • Microsoft .NET 本机在 Windows 上运行。然而,开源实现 Mono 允许它在开源系统上运行。然而,它并不支持所有的 .NET 类,所以不要期望任何东西都可以在那里完全运行。
  • 众所周知,在 .NET 中,有不同的编译器,例如 C# - CSC VB - VBC 等。编译完代码后,它将转换为独立的 MSIL 代码。这个 MSIL 代码将转到 CLR 并且这个 CLR 是平台相关的,即对于 Unix 平台,你应该有 Unix 类型的 CLR,对于 Windows 也一样,所以我们可以说 .NET 代码是平台无关的。
于 2010-09-07T07:55:25.517 回答
3

不确定您的问题是什么意思,但如果您想知道 .NET 应用程序是否可以在任何操作系统上运行,答案是否定的。

.NET Framework 仅针对某些操作系统,例如 Windows。其他项目也可用于其他平台,例如 Linux 上的 Mono。

于 2010-09-07T07:51:50.193 回答
2

有一个称为“mono”的跨平台实现。Microsoft 的原始 .NET 版本仅适用于 Windows。

有关单声道项目的更多信息:http ://en.wikipedia.org/wiki/Mono_Project

于 2010-09-07T07:52:55.000 回答
2

DotNet 不是平台独立的,也可能是部分独立的,而 Java 是完全独立于平台的,因为它的 JVM(java 虚拟机)。了解 Java 独立性的最佳示例,如果安装了 JVM(Java 虚拟机),您可以在“汽车”微波炉、洗衣机或任何一台计算机上运行 Java 程序。Java字节码是独立免费的,不管我们使用mac、windows、unix什么的。

于 2014-08-20T06:10:12.257 回答
1

Mono是 .NET 的跨平台实现,但不受 Microsoft 支持,并且缺少一些功能。

于 2010-09-07T07:51:17.513 回答
1

linux 上有一些 .net 实现,可能在其他系统上也可以编译。
它被称为Mono

于 2010-09-07T07:52:09.337 回答
1

只要您坚持使用 .Net 2.0,.Net 就可以在 MacOSX 和 Linux 上正常工作。一些较新的功能,如 LINQ、C# 3.0 等也已实现。您需要考虑到文件路径、文件权限等在不同平台上的工作方式并非 100% 相似。

忘了提我说的是Mono。

于 2010-09-07T08:08:53.577 回答
1

好的。.NET Framework 是否独立于平台很大程度上取决于“平台”的实际含义。

如果Platform = Operating System,则 .NET Framework 不是独立于平台的,而 .NET Core 是。

如果Platform = Independent System/PC,那么是的 .NET Framework 是平台独立的,因为 CLR/CLI(就像 Java 的 JVM)。

于 2019-07-31T07:45:23.733 回答
0

在 .NET 编程语言的编译过程中,源代码被翻译成 CIL 代码,而不是平台或处理器特定的目标代码。CIL 是一个独立于 CPU 和平台的指令集,可以在任何支持公共语言基础结构的环境中执行,例如 Windows 上的 .NET 运行时或跨平台的 Mono 运行时。理论上,这消除了为不同平台和 CPU 类型分发单独二进制文件的需要。CIL 代码在运行时经过安全性验证,提供比本地编译的二进制文件更好的安全性和可靠性。执行过程如下所示: 源代码转换为通用中间语言,CLI 相当于 CPU 的汇编语言。然后将 CIL 组装成字节码并创建一个 .NET 程序集。在执行 .NET 程序集时,它的字节码通过运行时的 JIT 编译器生成本机代码。(提前编译在运行时消除了这一步。)本机代码由计算机的处理器执行。然而,微软已经做出了一些在 .NET 上运行的改进,这些改进是专门为 Windows 获得的,而 Mono(其基于 linux 的对应物)则远远落后。

于 2010-09-07T10:57:24.713 回答
0

.NET 独立于平台,因为它可以在多个版本/风格的操作系统上运行(例如:MONO 在许多流行的操作系统上运行各种 .Net 框架版本。请参阅http://mono-project.com/Compatibility

于 2010-09-07T11:42:58.927 回答
0

.NET 是平台相关的,因为一旦编写代码,它就会被编译成独立于平台但它是半编译代码的 Microsoft 中间语言 (MSIL) 代码,然后公共语言运行时 (CLR) 将其转换为特定于设备的代码,即平台相关。(MSIL 通过 CLR 发送到 JIT。在运行时,所有内存分配都由 JIT 完成。)

于 2014-05-12T16:18:22.403 回答
0

如您所知,.NET 使用了框架 4.0。因此,编写的代码(源代码)转换为字节码。该转换是通过 MSIL(Microsoft 中间语言)完成的。MSIL 是一种特殊类型的编译器,可将源代码编译为执行代码。哪个运行或支持任何平台。所以由于使用 MSIL .NET 语言是跨平台语言。

于 2014-06-04T04:19:29.490 回答
-1

.Net 被称为部分独立于平台,而不是完全独立于平台。但是,.Net 支持某些其他操作系统,如 win98、winnt、winserver 2000 和新版本以及 linux。在同样的情况下,clr 不适用于 win95,这意味着 .net 无法在 win95 上执行。所以我们可以说,.net 是部分平台独立而不是完全平台独立。

于 2012-09-09T05:22:31.573 回答