当前位置:编程学习 > C#/ASP.NET >>

江湖救急,“C#”可以“跨平台”的疑问,Why???

1、“C#”为什么可以实现“跨平台”??? 



2、不是用“C#”就必须要有“.NetFrameWork”的吗?   


3、而且“IOS”与“Android”下是安装不了“.NetFrawork”的,为什么用“C#”开发的应用程序可以运行在它们上面呢? 


4、“C#”的执行效率比“Javascript”高,“Javascript”跨平台可以理解,但“C#”是需要“运行时”的啊? 


5、“Mono编译器“到底做了什么?   不需要”Runtime“就可以运行”C#“应用了??? --------------------编程问答-------------------- C#跨平台,Mono开源。 --------------------编程问答-------------------- 1,3是谁说的?从没听说过这个说法

5,就是mono的开发者极度喜欢.net,但是因为在linux下无法跑.net所以自己做了一个支持.net在linux下的类似.netframework的平台库 --------------------编程问答-------------------- 3、Unity3D  开发语言  C#或者javascript   就是不支持object-c和java --------------------编程问答-------------------- 哈哈,楼上是玩WOW的。 --------------------编程问答-------------------- Microsoft Silverlight中文名“微软银光”,是一种新的Web呈现技术,能在各种平台上运行。借助该技术,您将拥有内容丰富、视觉效果绚丽的交互式体验,而且,无论是在浏览器内、还是在桌面操作系统(如Windows和Apple Macintosh)中,您都可以获得这种一致的体验。Microsoft .NET Framework3.0(Windows 编程基础结构)中的呈现技术XAML(可扩展应用程序标记语言)遵循WPF(Windows Presentation Foundation),它是Silverlight呈现功能的基础。[1]
对于互联网用户来说,Silverlight是一个安装简单的浏览器插件程序。用户只要安装了这个插件程序,就可以在Windows和Macintosh上多种浏览器中运行相应版本的Silverlight应用程序,享受视频分享、在线游戏、广告动画、交互丰富的网络服务等等。
对于开发设计人员而言,Silverlight是一种融合了微软的多种技术的Web呈现技术。它提供了一套开发框架,并通过使用基于向量的图像图层技术,支持任何尺寸图像的无缝整合,对基于asp .net、AJAX在内的Web开发环境实现了无缝连接。Silverlight使开发设计人员能够更好的协作,有效地创造出能在Windows和Macintosh上多种浏览器中运行的内容丰富、界面绚丽的Web应用程序——Silverlight应用程序。
简而言之,Silverlight是一个跨浏览器、跨平台的插件,为网络带来下一代基于.NET媒体体验,和丰富的交互式应用程序。对运行在Macintosh和Windows上主流浏览器,Silverlight提供了统一而丰富的用户体验,通过Silverlight这个小小的浏览器插件,视频、交互性内容,以及其他应用能完好的融合在一起。[2] --------------------编程问答--------------------
引用 2 楼 shawn_yang 的回复:
1,3是谁说的?从没听说过这个说法

5,就是mono的开发者极度喜欢.net,但是因为在linux下无法跑.net所以自己做了一个支持.net在linux下的类似.netframework的平台库


谢谢各位大师。是不是“Mono自己内置了一个“虚拟机”,功能和"Windows下的.NetFramework"一样”,这个虚拟机可以运行在“PC、手机、平板、智能电视”??? --------------------编程问答-------------------- 我只知道JAVA是实现跨平台比较好的解决方案。 --------------------编程问答-------------------- Mono是一个由Novell公司(由Ximian发起,并由Miguel de lcaza领导的,一个致力于开创.NET在Linux上使用的开源工程。它包含了一个C#语言的编译器,一个CLR的运行时,和一组类库,并实现了 ADO NET和ASP NET。能够使得开发人员在Linux用C#开发程序。)主持的项目.该项目的目标是创建一系列符合标准ECMA (Ecma-334和Ecma-335)的.Net 工具, 包括C #编译器和共同语言(CL 即 Common Language)执行平台(Platform).与微软的.Net不同, Mono项目不仅可以运行于Windows系统内,还可以运行于Linux, FreeBSD, Unix, Mac OS X和Solaris。 

Mono是一个由Novell公司(先前是Ximian)主持的项目。该项目的目标是创建一系列符合ECMA标准(Ecma-334 和 Ecma-335)的.NET工具,包括C#编译器和共通语言运行平台。与微软的.NET Framework不同,Mono项目不仅可以运行于Windows系统上,还可以运行于Linux,FreeBSD,Unix,OS X 和 Solaris。 
Mono现由Novell持有双重许可,这和Qt和Mozilla应用程序包的情况相似。Mono的C#编译器及其相关工具发布于GNU General Public License(GPL)之下,其运行时库发布于GNU Lesser General Public License(LGPL)之下,其类库发布于MIT License之下。这些均是开源协议因此Mono是一个开源软件。如果你打算向Mono贡献你的源码,则你须签署一个版权分派给Novell以允许它将这些代码在其它协议下再申请许可,从而允许Novell保留其双重许可的能力来持有Mono的商业协议。[1] 
微软开发了一个称为共享源码公共语言基础(Shared Source Common Language Infrastructure,Shared Source CLI)的可用于FreeBSD,Windows和Mac OS X的.NET实现版本。微软的共享源码协议并不是开源软件协议,且可能对于社区来说也是不足够的(它明文禁止了对软件的商业用途)。我们还可以见到另外一个.NET实现版本,Portable.NET项目,该项目与Mono项目有着很多相同的目标。 
Mono虚拟机包含一个实时编译引擎,该引擎可用于如下处理器:x86,SPARC,PowerPC,ARM,S390(32位模式和64位模式),x86-64,IA-64和64位模式的SPARC。该虚拟机可以将代码实时编译或者预先编译到原生代码。对于那些没有列出来的系统,则使用的是代码解释器。 

类库 
类库为应用程序开发提供一套广泛而有效的工具类。这些工具类本是采用C#编写的,但是由于.NET采用的公共语言运行时,它们可以用于任何.NET语言。类库被按命名空间进行了结构化,并被放置于称为程序集的共享库中。在我们谈到.NET framework时,我们多数是指这个类库。 
[编辑]命名空间和程序集 
命名空间是一种用于将逻辑上相似的类按层次结构分组的机制。这种机制防止了命名冲突。在这种结构化采用被点号"."分隔的单词来实现。通常最顶层的命名空间是System,例如System.IO和System.Net(完整的命名空间列表可以在 Mono文档 中找到)。当然还有别的顶层命名空间,例如Accessibility和Windows就是这样的例子。新建的命名空间还可以以开发组织的名字开头。 
程序集是这些类库的物理载体。它们跟Win32共享库一样都是dll文件,尽管不完全一样。一些程序集的例子有:mscorlib.dll,System.dll,System.Data.dll和Accessibility.dll。命名空间经常被分拆到几个程序集中,而一个程序集可以由几个文件组成。 
[编辑]公共语言基础和公共语言规范 
公共语言基础(Common Language Infrastructure,CLI),又叫公共语言运行时(Common Language Runtime),已由Mono实现。该运行时用于执行已编译的.NET应用程序。公共语言基础已被ECMA定义为标准ECMA-335。要运行一个.NET应用程序,你必须使用相应的参数调用运行时。 
在ECMA-335的第六章详细说明了公共语言规范(Common Language Specification,CLS)并定义了提供给公共语言基础的接口,例如对于枚举类型的隐含表示类型的协定。Mono的编译器负责生成符合公共语言规范的映射代码,即公共中间语言(Common Intermediate Language,CIL)。Mono的运行时将运行这类代码。ECMA标准先前还定义了一个符合公共语言规范的程序库作为应用框架。 
[编辑]托管与非托管代码 
在本地的.NET/Mono应用程序中,所有代码都是托管的,也就是说,是受管于CLI式的内存管理和线程安全管理的。其它的.NET或Mono应用程序可以通过使用System.InterOpServices库创建C#绑定来调用已存的非托管代码。很多移植到Mono的类库使用了CLI的这个特性,例如Gtk#。 
[编辑]相关项目 
现有大量与Mono相关的用于扩展Mono的项目,这些项目允许开发者在他们的开发环境中使用Mono。这些项目包括: 
Cocoa#,对原生Mac OS X工具包的一系列包装(Cocoa)。 
Gecko#,一个对在Mozilla中使用的嵌入式布局引擎的绑定(Gecko). 
Gtk#,对使用C的GTK+库的C#的外包。 
Tao,一个图形及游戏库的绑定。 
[编辑]Mono与微软的专利 

人们对于微软能否采用专利摧毁Mono项目进行了大量的争论。其实,专利问题不在于已被提交到ECMA组织的核心技术或Unix/Gnome的专有部分,而在于由微软基于.NET Framework创建的技术,例如ASP.NET,ADO.NET和Windows Forms。这些技术在Mono中至今还没有被完全地实现,事实上,在开发Mono应用程序时也不需要用到,然而,在开发基于Windows平台的程序时却是不可缺少的。Mono团队将目标定为将这些技术纳入到项目中,并制订了一个三步骤策略来处理它们: 
采用其它实现方式来实现从而绕过专利问题 
把包含专利的代码清除出项目 
找出“现有技术(prior art)”从而将专利变为非专利 
显然,第一个选项并不总是可行的。对于一些问题,例如那些与协同工作和交互相关的,可能就只有一种解决方案。由于这个相同的原因,尽管第二个选项总是可行的,它却可能导致一个开发出来的产品并不能作为.NET的替代品。第三个选项则是昂贵的,甚至不可能的,这需要一定程度的运气。 


总结:Mono就是跨平台的 “Windows 下的.Net Framework”,由于专利问题并没有实现“ASP.NET,ADO.NET和Windows Forms”。 --------------------编程问答-------------------- 楼上关于“mono由于专利问题并没有实现ASP.NET,ADO.NET和Windows Forms”是完全错误和不实的。事实是,mono不但实现了asp.net/ado.net/win forms,而且,实现得很完整,特别是asp.net和ado.net! --------------------编程问答-------------------- 这个帖子,应该加精,推荐的 --------------------编程问答-------------------- dadada --------------------编程问答-------------------- dddxixbsw --------------------编程问答-------------------- 没用过,不知道能不能? --------------------编程问答-------------------- 楼主分享 谢谢 --------------------编程问答-------------------- 跨平台跟编译是两回事情。比如说你可以把“红楼梦”翻译为爪哇文字,你能说曹雪芹写了爪哇文的红楼梦吗?

.net framework从来没有支持过Andoroid。但是mono将大部分内容在Android下实现了,并且写了一个c#编译程序,于是就移植了你的应用程序。这不是说你的应用程序和.net framework是跨平台的,而是说明mono的编译器程序比较强大。 --------------------编程问答-------------------- 比如说你的程序调用了.net framework的某个方法 asdkjfaksfak,那么以为“非微软的”编译器编译相同的程序,完全没有必要调用方法 asdkjfaksfak(而是编译成调用其它操作系统api的多条语句),或者自己做一个实现这个 asdkjfaksfak 方法的“另类”类库(与.net framework内部完全不同)。这丝毫也不设计扯淡的什么专利问题。

如果别人抄袭了.net framework内部的源代码抄的太低级了,直接翻译,那么才可能涉及专利问题。如果是重新打乱次序自己开发的,就不涉及专利问题。 --------------------编程问答-------------------- 1.c#先编译成msil 然后有解释器 可以将msil中间代码解释成目标平台的本地代码

2. 是的 .net框架实际上是个代码级虚拟机和各种库文件

3. C#如果不编译成msil 而编译成dalvik虚拟机代码的话就能生成apk 不过要有相应的编译器  ipa不太清楚 貌似里面存的是arm的汇编码 理论上应该能编译

4. js属于脚本语言 无中间代码 运行一次解释一次

5. mono之前是把c#编译成x86运行 最近的版本是把.net框架迁移到了linux上(自己在linux上写了个框架) --------------------编程问答-------------------- 感谢分享啊啊啊 --------------------编程问答-------------------- 没用过,不知道能不能?  --------------------编程问答-------------------- 实际上所以说一个编程语言“跨平台”这是严重的错误的。

可以说.net framework或者java JVM跨平台。

哪有说一个编程语言语法“跨平台”的? --------------------编程问答-------------------- 我们看一个平台能不能“跨平台”,其实就是看整个类库体系能不能跨平台。而不是看编程语言语法。

而类库体系,比如说.net的winform相关类库体系调用了大量的windows api,这就无法跨平台,因为在linux系统下实现完全相同的一整套api、基本相同的一整套winform用户体验,就算是5个微软公司加起来现在也做不到。

但是mono很伟大,他们在android下面实现了一定数量的.net framework。但是,但是,你在Android下的真正的核心,整套UI,和整套系统api机制,全都是全新的,在.net framework下没有对应的Android应用程序开发概念。

所以微软中国最近做了个宣传,我觉得比较烦。微软根本就是在Android上比较懒,没有什么拿得出手的对症下药的产品来,却要偷人家Mono的概念,羞不羞啊。 --------------------编程问答--------------------
引用 21 楼 sp1234 的回复:
我们看一个平台能不能“跨平台”,其实就是看整个类库体系能不能跨平台。而不是看编程语言语法。

而类库体系,比如说.net的winform相关类库体系调用了大量的windows api,这就无法跨平台,因为在linux系统下实现完全相同的一整套api、基本相同的一整套winform用户体验,就算是5个微软公司加起来现在也做不到。

但是mono很伟大,他们在android下面实现了一定数量的.net framework。但是,但是,你在Android下的真正的核心,整套UI,和整套系统api机制,全都是全新的,在.net framework下没有对应的Android应用程序开发概念。

所以微软中国最近做了个宣传,我觉得比较烦。微软根本就是在Android上比较懒,没有什么拿得出手的对症下药的产品来,却要偷人家Mono的概念,羞不羞啊。

涨姿势了! --------------------编程问答--------------------     所谓"跨平台",最大的特征就是某种语言写的程序,既能在A操作系统上运行,也能在不加修改,不重新编译的情况下就能在B、C操作系统上运行。
    因此,从这个意义上说,通过.net framework和mono等不同的运行基础的支持,MSIL是跨平台的,而编写这种程序的主要语言是c#,所以,我们也可以简单地认为,c#是跨平台的,就如同人们认为java是跨平台的一样。
    现在,用c#写成的程序,特别是控制台程序和ASP.NET WEB应用,在Linux上运行得很好,相对于.net framework,当前的mono已经支持.NET4.5、EF6,并自带有MVC1/2/3框架,也能运行MVC4。从实践看,Linux的ASP.NET WEB应用,如果使用Jexus web 服务器承载,非常稳健而高效,完全可以在实际工程中部署。
--------------------编程问答-------------------- 学习了,hehe --------------------编程问答-------------------- --------------------编程问答-------------------- 除 --------------------编程问答-------------------- 有这么一个跨平台的东西,可以省很多事情。 --------------------编程问答-------------------- 最跨平台的开发语言是C,其实是C++。Java,C#都属于某公司专属产品,商业性质决定
他们不可能是绝对跨平台的。Java号称一次编译,到处运行,其实只是句广告词。
--------------------编程问答-------------------- 其实是C++-》其次是C++。 --------------------编程问答--------------------    .net类库跨平台而已。不过我怀疑能用到最新的.net特性吗? --------------------编程问答-------------------- --------------------编程问答--------------------
引用 30 楼 clever101 的回复:
   .net类库跨平台而已。不过我怀疑能用到最新的.net特性吗?

都是语法糖,应该不难实现。 --------------------编程问答-------------------- 这个帖子,应该加精,强力推荐!  --------------------编程问答--------------------
引用 23 楼 j66 的回复:
    所谓"跨平台",最大的特征就是某种语言写的程序,既能在A操作系统上运行,也能在不加修改,不重新编译的情况下就能在B、C操作系统上运行。
    因此,从这个意义上说,通过.net framework和mono等不同的运行基础的支持,MSIL是跨平台的,而编写这种程序的主要语言是c#,所以,我们也可以简单地认为,c#是跨平台的,就如同人们认为java是跨平台的一样。
    现在,用c#写成的程序,特别是控制台程序和ASP.NET WEB应用,在Linux上运行得很好,相对于.net framework,当前的mono已经支持.NET4.5、EF6,并自带有MVC1/2/3框架,也能运行MVC4。从实践看,Linux的ASP.NET WEB应用,如果使用Jexus web 服务器承载,非常稳健而高效,完全可以在实际工程中部署。

我想,如果按照这一标准来看的话,没有什么语言是跨平台的。

或者说,一次编译,导出运行只不过是个笑话、噱头罢了。 --------------------编程问答-------------------- 不是程序 跨平台

是 运行环境 使然

XX电器 + 变压器A + 美国110v电压

XX电器 + 变压器B + 中国220v电压

===================================

xx电器 -> “跨平台”的程序

变压器 -> 运行环境

国家电压 -> 操作系统

=======================

另一个比喻

网页 浏览器 操作系统

没有 浏览器这个 中介  网页怎么跨平台 呈现???

--------------------编程问答-------------------- mono项目的目标是创建一系列符合标准ECMA (Ecma-334和Ecma-335)的.Net 工具,标准是跨平台的关键 --------------------编程问答-------------------- 都是大神 --------------------编程问答-------------------- --------------------编程问答--------------------
引用 3 楼 starfd 的回复:
3、Unity3D  开发语言  C#或者javascript   就是不支持object-c和java


MS妹纸,辛多雷金杖.... --------------------编程问答-------------------- 学习了! --------------------编程问答-------------------- .net就应该是windows下的东西,强行跨平台也是勉强没幸福。想必也没人会绕几个弯在linux下用mono运行asp.net服务去 --------------------编程问答-------------------- 除 --------------------编程问答-------------------- 学习了!  --------------------编程问答-------------------- 如果编译器允许,C#可以跨宇宙。 --------------------编程问答-------------------- 学习到很多跨平台技术! --------------------编程问答-------------------- 除 --------------------编程问答--------------------
引用 20 楼 sp1234 的回复:
实际上所以说一个编程语言“跨平台”这是严重的错误的。

可以说.net framework或者java JVM跨平台。

哪有说一个编程语言语法“跨平台”的?


是啊 只要懂编译原理 词法分析 写得出编译器解释器啥的。。想怎么跨怎么跨- - --------------------编程问答-------------------- delphi xe5可以开发MAX OS ,IOS,ANDROID,WINFORM,WEB --------------------编程问答-------------------- 看你怎么理解跨平台了   如果是跨平台编译  那不可能

一般说跨平台指的是跨平台运行

Javaer们吹嘘的“一次编写  到处运行”其实非常可笑  事实上是“一次编写  到处调试” --------------------编程问答--------------------
引用 21 楼 sp1234 的回复:
我们看一个平台能不能“跨平台”,其实就是看整个类库体系能不能跨平台。而不是看编程语言语法。

而类库体系,比如说.net的winform相关类库体系调用了大量的windows api,这就无法跨平台,因为在linux系统下实现完全相同的一整套api、基本相同的一整套winform用户体验,就算是5个微软公司加起来现在也做不到。

但是mono很伟大,他们在android下面实现了一定数量的.net framework。但是,但是,你在Android下的真正的核心,整套UI,和整套系统api机制,全都是全新的,在.net framework下没有对应的Android应用程序开发概念。

所以微软中国最近做了个宣传,我觉得比较烦。微软根本就是在Android上比较懒,没有什么拿得出手的对症下药的产品来,却要偷人家Mono的概念,羞不羞啊。


顶 --------------------编程问答--------------------
引用 35 楼 boy8199 的回复:
不是程序 跨平台

是 运行环境 使然

XX电器 + 变压器A + 美国110v电压

XX电器 + 变压器B + 中国220v电压

===================================

xx电器 -> “跨平台”的程序

变压器 -> 运行环境

国家电压 -> 操作系统

=======================

另一个比喻

网页 浏览器 操作系统

没有 浏览器这个 中介  网页怎么跨平台 呈现???


--------------------编程问答--------------------
引用 41 楼 sswwee 的回复:
.net就应该是windows下的东西,强行跨平台也是勉强没幸福。想必也没人会绕几个弯在linux下用mono运行asp.net服务去

C#+MySQL做的东西直接部署到Linux服务器上,很舒服。 --------------------编程问答-------------------- 真正跨平台的语言是木有滴。一次编译随处运行时需要N多前提条件滴。

倒是如果有一种语言,可以做到一次编写,随处编译那倒是牛逼得狠了。 --------------------编程问答-------------------- 不会啊 不知道啊 --------------------编程问答-------------------- web应用应该可以跨平台。 --------------------编程问答-------------------- 好多大神啊 --------------------编程问答-------------------- 我就想知道JAVA既然可以使用JVM 来跨平台,那么.NET使用MONO 来跨平台有什么问题?

 就是因为MONO没受到微软的支持?

  不管怎么样 只要MONO 没被微软搞死 那么.net就可以完整在在linux下运行。

JAVA也不是专门为Linux而生的    --------------------编程问答-------------------- mono 已经实现 可以在Linux Android IOS上运行C#开发的程序。
感谢mono。为C#跨平台作出了巨大的贡献!!! --------------------编程问答-------------------- 至于一次编译到处运行,楼主别当真,除了js类似的脚本语言以外,静态语言中那几乎只是个传说,当然不排除以后真的可能。 --------------------编程问答-------------------- --------------------编程问答-------------------- --------------------编程问答-------------------- 受教了 --------------------编程问答-------------------- --------------------编程问答-------------------- 除
补充:.NET技术 ,  C#
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,