.NET平台是独立的吗?

6 .net platform-independent

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

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

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

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

但是,问题是,我们不具备OS独立的通用开发平台!

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

Cum*_*yah 18

这真的是你如何定义"平台"的问题.

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

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

  • .NET 和Java 平台有很大不同,因为.NET 包含特定于Windows 的功能(例如System.Windows.Forms),而Java 没有特定于平台的功能。由于这个原因,除了 Microsoft 操作系统之外,没有任何完整/兼容的 .NET 实现(Mono 不完全完整/兼容)。Java、OTOH 确实具有针对多个操作系统的完整且兼容的实现。 (2认同)

sta*_*ica 10

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

  • CLI(简称通用语言基础结构)是一种标准,因此它被设计为主要平台无关.这里,平台是指底层计算机体系结构,包括操作系统.

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

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

    更新(2015年8月):截至2014年底,Microsoft宣布计划逐步开源.NET Framework部分(特别是那些与服务器端应用程序相关的部分).其结果是.NET的核心.NET基金会.

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


Sac*_*hag 5

来自维基:

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