.NET平台是独立的吗?

时间:2010-09-07 07:48:53

标签: .net platform-independent

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

但它也是平台独立的吗?怎么样?

编辑: 我听说,.NET 4.0是在考虑平台独立性的基础上开发的!好吧,希望它可以接管Java,如果是的话!

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

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

OS独立性与平台独立性有关吗?

15 个答案:

答案 0 :(得分:18)

这真的是你如何定义“平台”的问题。

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

最后,“平台独立性”就像“一次编写,随处运行”,营销一样。但实际上,目前有一些JVM实现可用于比.NET更具体的平台(尽管诸如Mono项目之类的计划旨在改变这一点)。

答案 1 :(得分:9)

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

  • CLI 公共语言基础设施的缩写)是标准,因此它主要是独立于平台的。这里,platform指的是底层的计算机体系结构,包括操作系统。

    虽然标准可能需要某些不可能在所有体系结构上实现的东西(我考虑的是非常有限的平台,例如嵌入式系统),但这些可能被视为边缘情况。

  • .NET 是Microsoft的CLI主要实现,仅在Windows系统上运行。因此,.NET 独立于平台。

    更新(2015年8月):截至2014年底,微软宣布计划逐步开源.NET Framework部分(特别是那些与服务器端应用程序相关的部分) )。 .NET Core的结果为.NET Foundation

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

答案 2 :(得分:5)

取自wiki

  • 否。 DotNet与平台无关。
  • Microsoft .NET本机在Windows上运行。但是,开源实现Mono允许它在开源系统上运行。但是,它不支持所有.NET类,因此不要指望任何东西可以在那里完全运行。
  • 众所周知,在.NET中,有不同的编译器,如C# - CSC VB - VBC等。在您的代码编译完成后,它将转换为独立的MSIL代码。这个MSIL代码将转到CLR&这个CLR是依赖于平台的,即对于Unix平台,你应该有Unix类型的CLR,对于Windows也是这样,所以我们可以说.NET代码是独立于平台的。

答案 3 :(得分:3)

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

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

答案 4 :(得分:2)

有一个名为“mono”的跨平台实现。 Microsoft的原始.NET版本仅限Windows。

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

答案 5 :(得分:2)

DotNet不是独立于平台的,也可能是部分独立的,而Java是完全平台的 因其JVM(java虚拟机)而独立。 理解java独立性的最好例子你可以在你的" car"中运行一个java程序。微波炉,洗衣机或任何一台计算机(如果安装了JVM(java虚拟机))。 Java字节代码是独立的,当我们使用mac,windows,unix时无关紧要。

答案 6 :(得分:1)

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

答案 7 :(得分:1)

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

答案 8 :(得分:1)

只要您坚持.Net 2.0,<。> .Net在MacOSX和Linux上运行良好。一些较新的功能,如LINQ,C#3.0等也已实现。您需要考虑到文件路径,文件权限等在不同平台上不能100%相似。

忘记提及我说的是Mono。

答案 9 :(得分:0)

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

答案 10 :(得分:0)

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

答案 11 :(得分:0)

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

答案 12 :(得分:0)

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

如果 Platform = Operating System ,则.NET Framework与平台无关,而.NET Core与平台无关。

如果平台=独立系统/ PC ,则是.NET Framework是平台独立的,这是因为CLR / CLI(就像Java的JVM)一样。

答案 13 :(得分:-1)

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

答案 14 :(得分:-1)

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