Sparkie的答案得到了,让我补充一下。
“ .NET是跨平台”的说法过于含糊,因为其最初创建的框架和世界都已经发生了变化和发展。
简短的答案是:
支持.NET及其衍生产品的基础引擎(通用语言基础结构标准)是跨平台的,并且如果您想使代码进入多个平台,则需要计划在正确的平台上使用正确的API进行交付每个平台上的最佳体验。
CLI系列没有尝试过“一次编写,随处运行”的方法,因为从电话到大型机的差异太大。取而代之的是,出现了特定于平台的API和运行时功能,为开发人员提供了正确的工具,以在每个平台上创造出色的体验。
想一想:程序员不再针对Windows PC或Unix服务器。从PC到游戏机,功能强大的手机,机顶盒,大型服务器和分布式机器集群,如今,当今世界比以往任何时候都更加吸引人。 在所有平台上都只能使用一种尺码的设备,只会在小型设备上感到肿,而在大型系统上却感觉功能不足。
微软的.NET Framework产品不是跨平台的,它只能在Windows上运行。Microsoft的.NET Framework有所不同,它们可以在Windows Phone 7,XBox360和通过Silverlight的浏览器等其他系统上运行,但它们的配置文件都略有不同。
如今,您可以使用基于.NET的技术来针对所有主流主流操作系统,电话,移动设备,嵌入式系统和服务器。以下列表显示了在每种情况下都将使用哪种CLI实现(此列表并不全面,但应涵盖99%的情况):
- 基于x86和x86-64的PC计算机:
- 运行Windows->通常,您运行.NET或Silverlight,但您也可以在此处使用完整的Mono。
- 运行Linux,BSD或Solaris->运行完整的Mono或Silverlight
- 运行MacOS X->运行完整的Mono或Silverlight
- 运行Android->您运行Mono / Android子集
- ARM计算机:
- 运行Windows Phone 7:您运行Compact Framework 2010
- 运行Windows 6.5及更早版本:运行旧的Compact Framework
- Android设备:您运行Mono / Android
- PowerPC计算机:
- 您可以在完整的Linux,BSD或Unix操作系统上运行完整的Mono。
- 您为PS3,Wii或其他嵌入式系统运行嵌入式Mono。
- 在XBox360上,您运行CompactFramework
- S390,S390x,Itanium,SPARC计算机:
- 其他嵌入式操作系统:
- 您使用移动配置文件运行.NET MicroFramework或Mono。
根据您的需求,上面的内容可能足够了。您几乎不会获得相同的源代码可以在任何地方运行。例如,XNA代码不会在每个桌面上运行,而.NET Desktop软件不会在XNA或手机上运行。通常,您需要对代码进行更改才能在.NET Framework的其他配置文件中运行。以下是一些我了解的配置文件:
- .NET 4.0配置文件
- Silverlight个人资料
- Windows Phone 7配置文件
- XBox360配置文件
- Mono core配置文件-遵循.NET配置文件,可在Linux,MacOS X,Solaris,Windows和BSD上使用。
- .NET Micro Framework
- iPhone配置文件上的Mono
- Android个人资料上的Mono
- PS3配置文件上的单声道
- Wii个人资料上的Mono
- 月光配置文件(与Silverlight兼容)
- Moonlight扩展配置文件(Silverlight +完整的.NET 4 API访问权限)
因此,每个配置文件实际上都略有不同,这不是一件坏事。每个配置文件均设计为适合其宿主平台,并公开有意义的API,并删除不合理的API。
例如,Silverlight用于控制主机浏览器的API在电话上没有意义。XNA中的着色器在缺少对它的同等支持的PC硬件上毫无意义。
越早意识到.NET并不是将开发人员与硬件和本机平台的基础功能隔离开的解决方案,您的利益就会越多。
首先,一些API和堆栈可在多个平台上使用,例如ASP.NET可以在Windows,Linux,Solaris,MacOS X上使用,因为这些API在.NET和Mono上都存在。ASP.NET在Microsoft某些受支持的平台(如XBox或Windows Phone 7)上不可用,并且在Mono支持的其他平台(如Wii或iPhone)上也不受支持。
以下信息仅在11月21日之前是正确的,并且Mono世界中的许多情况可能会发生变化。
可以将相同的原理应用于其他堆栈,完整的列表将需要一个适当的表,我不知道如何在此处显示,但是此处列出了特定平台上可能不存在的技术。您可以假定这里没有列出的任何内容都可用(可以随时将我错过的内容发送给我):
核心运行时引擎[无处不在]
- Reflection.Emit支持[除WP7,CF,Xbox,MonoTouch,PS3之外的所有地方]
- CPU SIMD支持[Linux,BSD,Solaris,MacOS X;即将推出PS3,MonoTouch和MonoDroid]
- Continuations-Mono.Tasklets [Linux,BSD,Solaris,MacOS,PS3,Wii]
- 程序集卸载[仅Windows]
- VM注入[Linux,BSD,MacOS X,Solaris]
- DLR [Windows,Linux,MacOS X,Solaris,MonoDroid]
- 泛型[PS3和iPhone的某些限制]。
语言能力
- C#4 [无处不在]
- C#编译器即服务(Linux,MacOS,Solaris,BSD,Android)
- IronRuby [无处不在,执行WP7,CF,Xbox,MonoTouch,PS3]
- IronPython [无处不在,执行WP7,CF,Xbox,MonoTouch,PS3]
- F#[无处不在,执行WP7,CF,Xbox,MonoTouch,PS3]
服务器堆栈
- ASP.NET [Windows,Linux,MacOS,BSD,Solaris]
- ADO.NET [无处不在]
- LINQ to SQL [无处不在]
- 实体框架[无处不在]
- 核心XML堆栈[无处不在]
- XML序列化(除WP7,CF,Xbox之外的所有地方)
- LINQ to XML(无处不在)
- System.Json [Silverlight,Linux,MacOS,MonoTouch,MonoDroid]
- System.Messaging [Windows; 在Linux,MacOS和Solaris上需要RabbitMQ]
- .NET 1企业服务[仅Windows]
- WCF [在Windows上完整;Silverlight,Solaris,MacOS,Linux,MonoTouch,MonoDroid上的一小部分]
- Windows工作流程[仅Windows]
- 卡空间标识(仅Windows)
GUI堆栈
- Silverlight(Windows,Mac,Linux-带Moonlight)
- WPF(仅Windows)
- Gtk#(Windows,Mac,Linux,BSD)
- Windows.Forms(Windows,Mac,Linux,BSD)
- MonoMac-本机Mac集成(仅Mac)
- MonoTouch-本机iPhone集成(仅iPhone / iPad)
- MonoDroid-本机Android集成(仅限Android)
- 媒体中心API-仅Windows
- 混乱(Windows和Linux)
图形库
- GDI +(Windows,Linux,BSD,MacOS)
- 石英(MacOS X,iPhone,iPad)
- 开罗(Windows,Linux,BSD,MacOS,iPhone,iPad,MacOS X,PS3,Wii)
Mono库-跨平台,可以在.NET中使用,但需要手动构建
- C#4编译器即服务
- Cecil-CIL操纵,工作流,CIL仪表,链接器
- RelaxNG库
- Mono.Data。*数据库提供程序
- 完整的System.Xaml(用于.NET不提供堆栈的安装程序)
MonoTouch表示Mono在iPhone上运行;MonoDroid表示Mono在Android上运行;PS3和Wii端口仅适用于Sony和Nintendo合格的开发人员。
对于缺乏手续性,我深表歉意。