2006年08月28日

MonoDevelop 是用于 Mono 和 Gtk# 开发的全功能型 IDE,主要特性有:代码自动完成,类管理,内嵌帮助,工程管理,支持插件等。新版本加入了对于 .NET 2.0 的编译支持,并在打开文件对话框中增添了文件类型过滤功能,同时也修正了若干 Bug。
  此程序的使用依赖包括:GTK+ 2.6.x、Mono、GTK#、GtkSourceView#、Gecko#、Mono debugger(可选)、IKVM(可选)、Boo(可选)。
  下载 MonoDevelop 0.11 :

 

http://go-mono.com/sources/monodevelop/monodevelop-0.11.tar.gz

9月26日,著名的“Mono之父”,Nat Friedman先生将做客CSDN的嘉宾聊天室,与大家展开面对面的思想和技术交流!欢迎大家积极的发表意见和提出问题,我们将会专门的收集大家的反馈,以期更好的与大师进行交流。

时间:2005年9月26日下午14:30至16:30,地点:CSDN网上聊天室 http://chat.csdn.net:8892/

聊天活动此刻正在进行中,热烈的讨论正如火如荼。大家纷纷提出自己的疑惑,建议和看法。期待获得“Mono之父”的详细解答。

现场照片:

聊天室现场
Nat Freidman

近照
与翻译交谈

Nat Freidman签名
与工作人员合影

活动圆满结束!

近距离接触

主持人 :
本次聊天的主题是:研究Mono技术感受SuSE Linux魅力
[2005-9-26 14:15:00]

主持人 :
如果您有问题想问嘉宾,请直接向JDMBA提问,我们的工作人员会收集问题和提交给嘉宾。
[2005-9-26 14:26:00]

主持人 :
我们的聊天活动稍后马上开始。
[2005-9-26 14:33:00]

主持人 :
各位网友,大家好,我们现在正式开始了。
[2005-9-26 14:36:00]

主持人 :
各位网友大家好,我们今天的主题是感受Mono的魅力。我们请来了胡欣蔚先生,他是Novell中国的专家,现在各位网友可以提出问题,并将我们的问题提交给主持人。下面是我们这次活动收集的一些问题。 第一个问题是Mono项目现在不但表明了开源社区是力量非常强大,同时体现了联通一切的思想,Mono项目被认为是开源界的平台,请问一下Mono项目会对将来开发产生哪些深远的影响?
[2005-9-26 14:40:00]

主持人 :
我们已经有了新的编译器,为了吸引更多的开发人员进入这个社区我们需要一个功能更简单、内容更丰富、编程更容易,不容易出错的编辑语言,这就是在创办公司的时候就提出了这个计划,利用Mono可以更简单的使用已经有的开源的那些东西来进行开发,他们已经用到Mono做很多的软件。利用Mono可以更容易的把Windows下的程序员吸引过来,也便于Windows的程序员向Linux下迁移。
[2005-9-26 14:47:00]

主持人 :
在SUSE Linux Mono10会给大家带来什么新的更酷的特性?
[2005-9-26 14:48:00]

Nat Friedman:在SUSE Linux Mono 10里面会带一个全新版本的Mono,大概是1.2正式版本,因为我本身是做Linux桌面的,所以其中有很多特性非常好,第一个特性是新版面Mono有更好的垃圾收集机,1.2版本升级的时候可以对内存进行压缩,可以保证桌面应用,在随机操作时不会占用太多的物理内存。
[2005-9-26 14:50:00]

Nat Friedman:SQL server就有数千个客户端连上来进行各种各样的操作,可以确认Mono在这方面的性能越来越好。 还有一点,很令人激动的是有了一个完整实现的系统实现,在Windows和Linux上是完全一样的界面。还有很多的增强,Mono 1.2应该是一个很重要,并将是一个很吸引人的版本。
[2005-9-26 14:55:00]

网友:Linux的发展瓶颈一直是应用比较少,一直以来Linux java是比较喜欢选择的方案,现在Linux 和Mono又成了人们选择的一种方式。
[2005-9-26 14:56:00]

Nat Friedman:如果利用Java的简单的来说比较有名,它可以支持多种语言的,因此没有必要把Java分的那么清楚,因此我们有一些相应的技术可以实现。第二个有点Java底下如果要调用编码的话是非常难用的,而Mono提供的机制就简单得多,这样可以很容易把Linux平台上存在的成千上万的C或者C++更有效的利用起来。最后一点就是相对于Java来说,Mono是一个真正完全开放源代码的项目,如果真正需要一个完全开放的系统来做你的应用的话,那么Mono比Java更合适。
[2005-9-26 14:57:00]

网友:Mono本身是一个非常成功的项目,它的成功之路被认为是给开发者带来了RED的体验还是能帮助开发者开发出更安全的代码,跨平台性能更好的软件。
[2005-9-26 14:58:00]

Nat Friedman:Mono成功的一个最重要的原因是让开发过程变得容易和更加有趣。一般刚开始学习开发的时候比如说有一个小程序,能出现一个小窗口,是很有乐趣的,但是随着开发的程序越来越大,项目设计的内容越来越多,可能要花成倍的时间解决代码里面的Bug,这样让开发过程变得越来越误区,如果你使用Mono这项技术就可以最大程度的减少类似的问题,可以保证开发者的开发乐趣,我认为这是Mono成功的原因。 另外一个创始人在招人上面很有一套,能够招到最好的程序员做这件事情。
[2005-9-26 15:02:00]

网友:目前是否有大型的Web运行在Mono之上,如果把一个跑在Asp.net迁移到Mono上面需要多少工作量、迁好已经稳定性如何?
[2005-9-26 15:03:00]

Nat Friedman:你刚才说把一个ASP连接到一个程序上是不需要任何资源拿过来就可以用的,事实上上个月对开发中的1.1版本有很大的增强,实际上Novell和相当多基于Asp.net的企业开发合作,事实上Novell的Asp.net的实现是非常完整的,开发者可以很容易的把他的迁移到Mono上来。
[2005-9-26 15:03:00]

网友:我初学Linux的桌面开发需要什么样的步骤?
[2005-9-26 15:04:00]

Nat Friedman:这取决于你想做哪方面的应用。 第一部分就是你不一定完全写程序,事实上现在有很多很多的桌面应用,这些应用都是开源的,所以有一个很大的好处就是把这些应用直接集成起来,不一定要开发,事实上现在市场有这样的产品,使用Linux把桌面应用都整合起来就成为了一个完整的解决方案,那也是很好的事情。
[2005-9-26 15:07:00]

Nat Friedman:如果想成为一个Linux平台下的好程序员就是尽量多读和多写代码,至少每天得写近千条代码,才可以保证你在这方面收获。从读代码来说,读代码可以帮助你学习别人的代码,更重要的是可以训练你对代码里存在的各种模式更加熟悉,如果你要贡献到其他某一个已经有的程序里面,你首先要做的就是先阅读程序,看有没有里面在里面进行修改或者修定这个程序存在的某一个Bug,这样可以很快认识到这个程序里面存在的模式。
[2005-9-26 15:09:00]

Nat Friedman:另外现在在Linux桌面上已经有一些基于某种终端应用包括X-box这是做相机的处理软件,包括媒体播放软件,你可以先看这些软件来训练自己。另一方面写代码总是要的,你要尽可能的多写代码。我另外推荐一下你看下“tom boy”的程序,那个代码写的非常干净。
[2005-9-26 15:12:00]

网友:参与开源项目在中国已经成为一个热潮,但是还处在起步阶段,有一定的盲目性,很多开源项目也因此夭折,能不能给大家一个更好的建议,如何实施开源项目?
[2005-9-26 15:13:00]

Nat Friedman:实际上这不仅是软件开发的问题,很多时候人们说做这件事情,但是没有切实实行它。对于参加开源软件来说可以从最基础的做起,可以从很多方面,包括可以帮助创建很多项目的网页、软件列表,帮助做代码的分支管理,诸如此类的事情都是可以的。
[2005-9-26 15:14:00]

Nat Friedman:另一方面可能因为一些个人的需要去开发软件,也可能是对软件的需要,目前的软件可能没有适合你的,你可能自己写一个,重要的是你写目前软件的时候遇到了一个问题,你就可能解决这个问题,你是否把源代码的软件下载过来,你是否去编译的时候可能遇到各种各样的问题,你可能询问很多人,最后搞定如何编译,这样你可以找出之前发现的问题所在的地方,这时候读代码的训练就显得非常重要,这样可以更快让你找到整个程序的架构,并可以找到隐藏在哪儿,这样你可以为程序写一个小补丁,不定可能很简单也可能很复杂,比如为了提高性能可能需要把某些数据结构调整一下或有关算法,不管怎么样通过这样的方式来参与一个开源的项目。
[2005-9-26 15:16:00]

Nat Friedman: 当你在自己的系统上可以把应用的补丁运行起来以后,还可以进一步考虑,因为你发现这个问题可能别人已经发现了,可以考虑把你修补的地方写成补丁,发给维护应用的那个人,或者是正在写应用的那个人,他可能会给你比较积极的回复,比如他愿意把这个补丁收入他的应用,也有可能他不愿意或者希望你对补丁做进一步的修改,或者使用这种方式再重写这个补丁,诸如此类的事情,你或者是按照作者的要求来做的或者是你放弃了,这都不管紧要,做开源工作重要的工作是第一点是下载源代码,第二是用编辑器打开代码并且读这些代码,很多人在论坛里面发一些帖子,发表很多言论,这对开源编码是没有作用的,最重要的就是下载、编译、修改。
[2005-9-26 15:21:00]

Nat Friedman: 作为一个成功的Linux黑客的话,至少得有这样几种品质,首先必须要聪明,能够有一些有创意的想法或者能够很快的领会别人的意思。其次,他必须有一些品味,不然的话做出的应用只有他自己喜欢使用,但是最重要的一点就是坚持,如果没有坚持的话,前面两点都没有什么用处,一开始做一个应用的时候可能遇到很多挫折,包括开发,包括说服别人接受它,包括推广的时候只有坚持下来才能把项目做起来,所以坚持是这三点中最重要的一点。
[2005-9-26 15:22:00]

Nat Friedman:再举一个例子,在Linux下面以前有一个很流行的方法,其实现在还比较流行。某位开源技术大师是非常聪明的人,但是他的程序代码就不是非常好,他用了一些并不是很受其他程序员欢迎的技术,他不主动释放管理器占用的内存,但是他依然非常坚持,他非常花时间研究这些代码,但是缺乏非常好的通用性,所以项目并不能算非常成功。
[2005-9-26 15:27:00]

网友:目前桌面搜索是非常热的话题,Beagle项目在2002年就进行了这方面的开发,请讲一下目前这方面的?
[2005-9-26 15:28:00]

Nat Friedman: Nat Friedman:Beagle是一个桌面搜索的工具,就在大概一个半星期之前,刚刚发布了Beagle的0.1版本,虽然这个版本号很少,但是因为开源软件和软件采取的版本号命名方式不一样。 对Beagle的版本号命名方式是从0.1开始然后往上涨,实际上0.1版本已经做了一年多的时间了,如果你用“SUSE Mono 10”的话它里面已经继承了Beagle的工具,所以它现在可以索引,包括的邮件、媒体邮件、MP3可以搜索更多的文档,包括更多的文本、网页或者word文档或者PDF或者是其他文档。现在在Beagle上的重点工作是做一个更好的用户界面,这几天正在IRC频道正在讨论这件事儿,正在着力解决这方面的问题,如果你留意的话在网上会看到一些新的Beagle的用户界面,非常漂亮。
[2005-9-26 15:30:00]

网友:现在很多中国政府正在大力推动使用Linux,请问一下Novell公司将会为中国的政府部门提供一个什么样的Linux的解决方案。
[2005-9-26 15:31:00]

Nat Friedman:我们在明年的时候会有一个针对桌面的产品叫做NLD10,这个是到时候最好的Linux的作品,其中包括各种各样对系统的增强,还包括各种各样的应用基于Novell或者企业里面应用比较广泛的,NLD10会有非常本地化的工作,并不是一个针对政府的产品,是一个针对所有桌面Linux用户的一个产品。
[2005-9-26 15:33:00]

网友:Mono现在相当于.net的框架,是不是打算也开发出一个增强框架增强它的能力。
[2005-9-26 15:38:00]

Nat Friedman:现在在开发工具上,一方面在做工作,是给ECLIPSCE,现在主要是用来做Java的IDE环境,我们通过给ECLIPSCE开发插件,支持Mono这是一方面的工作。另一方面有一个基于JJK下的开发工具,里面包括Mono的调试器,图形界面的设计环境都有,这是我们在这方面做的工作。我自己是使用EMAC。
[2005-9-26 15:39:00]

网友:现在很多人采用了Linux平台以后都发生了知识产权纠纷,在Mono这个版本上会不会解决这个问题?
[2005-9-26 15:39:00]

Nat Friedman:从美国的《知识产权法》来说,我相信世界各地也不会差得太多,说知识产权实际上有四个方面的内容,第一个方面是版权,第二个方面是专利,第三个方面是商标,第四个方面是商业机密。所有开源的代码主要是针对版权这一个方面,所以设开源的软件也一样会有其他的知识产权的问题。
[2005-9-26 15:40:00]

Nat Friedman:在这样的基础上,实际上是一个开源软件接受外援代码的时候可能有潜在的风险,包括贡献代码的人本身可能并不拥有那个代码,他本身没有一角那部分代码的版权,因此不管是Novell或者是开放源代码基金会这样的组织,在你向他们贡献源代码的时候都要求你签一份协议,声明你本人是这部分代码的原作者,并且把这部分代码移交给开发源代码基金会或者什么机构,并且让他们使用。 从Novell来说,其中最核心的部分会要求所有参加开发的人员都来签这样一份协议,而且所有补丁都必须通过相应的代码维护人,代码维护人会维护相应的版权问题。所以Mono的核心部分我们是非常注意的,但是它的外围就非常多了,所以在这方面没有做太多的工作。
[2005-9-26 15:42:00]

Nat Friedman:以我本人的经验来说,我曾经在微软工作过,我又和伙伴一起创建了一个做开源软件的公司,所以根据我自己的了解和观察,实际上参与开源的程序员比只开发专有程序员对授权知识产权更敏感,开发专用程序员在网上看到一个授权下载就使用。
[2005-9-26 15:45:00]

Nat Friedman:从专利的角度来说,专利设计的问题很多,实际上有各种各样的软件专利,并且专利一旦被批准以后会成为让对手非常难受的东西。 比如说你已经写了数万行或者数十万行的软件代码,可能有人认为其中侵犯了他的某一项专利是很难处理的事情。我们Mono是基于开放标准的,因为微软已经把标准提交给了委员会。 另一方面作为.net框架本身没有什么开创性的东西,我们认为所有在.net里面能够看到的特性在之前我们都见到过,所以它也不会有专利。我们知道Java框架是有专利的,所以以后开发中如果认为在.net里面有一些专利,认为我们应该遵守的话,我们会考虑做工作绕开它,一方面是利用其他方式实现,最坏的情况是我们可能取消某些东西。
[2005-9-26 15:47:00]

网友:大部分人使用Linux的时候都觉得它的界面不是很好,请问SUSE Linux 10中会不会有非常酷的表现呢?
[2005-9-26 15:48:00]

Nat Friedman:在SuSE Mono 10里面有非常多的酷的特性,包括现在的Windows系统都没有的一些特性,你利用这样的桌面会让很多伙伴非常羡慕。
[2005-9-26 15:50:00]

网友:微软即将发布C#3.0的标准,Mono有没有跟进的计划,是不是打算自己开发出一套语言出来?
[2005-9-26 15:51:00]

Nat Friedman:我参加了今年微软的PEC的大会,感觉C#3.0的特性挺不错,我们会尽可能早地实现但是不是现在,因为现在实现3.0的特性没有用户用它。我们现在某种程度上已经支持了C#2.8,我们尽可能把这个工作和支持性做好,之后再做C#3.0的工作。
[2005-9-26 15:52:00]

网友:现在在开源平台LAMT做一个大家非常喜欢的架构,还有人会选择Java+Linux,还有人会选择Mono+Linux,请问这几种选择的适用范围是什么?
[2005-9-26 15:52:00]

Nat Friedman:用什么样的技术取决于要解决什么样的问题,所以到底采用哪种还是要看情况。对于及时或者很快做成的解决方案肯定用LAMP是比较好的方法。 如果是开发企业应用的话可能会采用Java或者是Asp.net,如果使用Asp.net一般是不愿意花太多时间来开发的程序员,他可以利用“Visual Basic.Net”的方法进行应用开发。不管是Java还是Asp.net都是非常严谨的,它的语言都是分门别类做的非常仔细,但是你用脚本语言可能都没有那么细,因此不管是Java还是Asp.net都不适合于做要非常快要结果的东西,但是它们比较适合于做比较严谨或者周期比较长的项目。
[2005-9-26 15:58:00]

Nat Friedman: 一定要选择的话比较简单的做法就是看你周围的程序员在使用什么样的技术,如果你接受了微软的培训,你也在使用Asp.net,那么你可以考虑使用Mono,这是一样的。
[2005-9-26 15:58:00]

网友:在Linux华丽的界面并不是目的,性能才是最重要的,在WindowsXP下同时打开数据窗口非常快,请问在Linux下的如果打开同样的窗口是不是能保持很好的性能?
[2005-9-26 15:59:00]

Nat Friedman:开窗口取决于你开什么样的应用,比如Windows下了开了15个终端口,实际上一共就会占用20兆左右的内存,你开了第一个以后开第二个实际上净量内存是非常非常少了,而且Linux对内存的管理非常智能,实际上你开那么多的窗口根本没有什么影响,或者说你在Windows开多少窗口在Linux上也可以同样开多少窗口。这说明Linux性能是让人放心的。
[2005-9-26 16:01:00]

网友:目前国内的开发者学习新的开发技术最大的障碍是语言,Mono有没有打算出一些面对中国用户的中文主页或者中文的帮助文档,或者说有没有这样的计划?
[2005-9-26 16:02:00]

Nat Friedman:实际上Mono本身带了一个叫做“MonoDoc”的工具,现在你看的时候会显示一个按纽,比如某一个文档正在补全,你可能发现一个问题,可以直接点编辑按纽对那部分文档进行编辑,比如可以添加一些新的识别代码,你做完以后会有一个按纽可以直接提交,这样你修改或者添加的东西可以提交给一些文档的维护人员。文档的维护人员会有时间看你发过来的东西,可能某些集成以后再修改。 现在没有特别的计划要针对中文做一些工作,但是我们可以考虑在MonoDoc工具上添加一个按纽,可以让人在上面直接提供相关的包括翻译的东西,如果有谁感兴趣可以考虑做这样的工作,就是给MonoDoc添加一个翻译的功能。
[2005-9-26 16:07:00]

网友:Mono这个项目是在一个什么样的背景下产生的,如果我想加入Mono项目需要做一些什么样的事情?
[2005-9-26 16:07:00]

Nat Friedman:Mono是2001的时候开始创立的,那个时候理查德是这个项目的领导人,我主要是利用Mono开发一些桌面应用的组建,现在整个项目已经非常稳定,有超过350多个非常活跃的开发人员已经是非常大的项目了。 如果想对Mono项目有所贡献的话,只要到Mono.net上面看一眼就有一些比较有意思的工作可以做,因为Mono本身的结构非常好,所以你非常着手对其中做一些贡献,包括开发一些新的外围的软件包这些东西。
[2005-9-26 16:08:00]

网友:你当初和理查德一起开发这个项目的时候,是出于什么原因选择跟他一起做这个项目?
[2005-9-26 16:08:00]

Nat Friedman:我开始玩儿Linux大概是16岁的时候,最初我们是在RIC的聊天室里认识的,在大学的时候学校里面有一个VIC服务器,那个上面有很多在Linux非常活跃的人,有一天理查德在上面出现了,他是墨西哥人,可能英语不是很好,可能上来是学英语的,他比较有趣,后来我们俩个就认识了。他曾经在微软做过实习,有一天理查德来面试,两个人那天遇到了,聊的很开心,我们在一起做自己的事业的主要原因是因为他这个人非常有活力。
[2005-9-26 16:12:00]

Nat Friedman:一开始的时候并没有打算自己做一个公司,当时是想买一个房子,里面可以安排很多喜欢做软件的黑客,我们两个可以让他们在里面开开心心的写代码,所以开始的时候是找其他公司,希望他们愿意做这样的事情,但是没有公司愿意做这样的事情,最后只有我们自己开了这样一家公司。
[2005-9-26 16:13:00]

网友:Mono项目成立了时候主要目标是什么?现在是否实现了目标或者离目标还有多远?
[2005-9-26 16:13:00]

Nat Friedman:实际上创建Mono项目主要有两个目标一个是让Linux开发项目的开发人员开发更有效率,另一方面是吸引一些Windows程序员过来尝试在Linux环境下进行开发。现在已经做到了一些,但是还是有一些差距。
[2005-9-26 16:14:00]

Nat Friedman:实际上创建Mono项目主要有两个目标一个是让Linux开发项目的开发人员开发更有效率,另一方面是吸引一些Windows程序员过来尝试在Linux环境下进行开发。现在已经做到了一些,但是还是有一些差距。
[2005-9-26 16:15:00]

主持人:最后,按照CSDN聊天室的惯例,请Nat Friedman先生送给广大中国网友一句祝福的话。
[2005-9-26 16:16:00]

Nat Friedman:希望中国的程序员能够积极性参与到开源社区的构建活动当中。因为现在的开源社区在全球都有,我们不希望看到在中国有一个自己的开源社区,在美国有一个、印度有一个、欧洲有一个,所以希望大家在一起合作,尽可能的把所有的开源社区的人融入到一起,形成一个全球化的开源社区。
[2005-9-26 16:16:00]

主持人:本次聊天活动已经结束,让我们再次感谢Nat Friedman先生的光临。再见!

对不知道的人来说,开放源代码Mono项目(将.Net转向Linux)后面的基本理念有些难于抓住,微软的.Net开发平台的所有含义就是要让Windows程序员工作更加便利,这样一个东西如何被用来编写Linux应用,因为Linux是微软讨厌的东西。

  在三年的辛苦工作以后,Lcaza作为Mono项目的发起人,已经设法将一些微软的印记带给了Linux阵营。在去年收购了Ximian公司之后,现在Novell已经接管了Mono的工作。对开放源代码的狂热追求者而言,Mono已经不再只是惊奇,它具有更多的潜力。

  Mono不是一个开发工具,比如微软的VisualStudio,它是构成微软开发工具的端口和入门。这些开发工具包括微软的C#开发语言、预写代码库和微软运行时间通用语言,其功能是允许程序员整合一个单一应用程序中用不同语言编写的代码。

  在公司销售Mono1.0版不久之前,Lcaza对媒体谈论了他的看法,以下是采访摘要

  问:既然Mono1.0版已经完成,你是否能够做你以前不能做的事情?

  答:Unix对程序员来说是一个痛苦世界。基本上我们得到了非常现代的用于其他平台开发软件的集成开发环境(IDEs)。

  例如在Novell,这个选择我真的没有涉足,但是它们研究了Mono技术,并且发现了所需要执行这个东西准确含义,就是iFolder3.0,这个新版本具有许多新特点,就像长角牛的WinFS可以对数据、备份资料和所有有趣的东西进行同步。当Novell收购了Ximian之后,他们就选择了在Windows和Linux上运行同一软件的计划。

  所以今天他们用同样的工具基础支持Windows、Linux和MacOS等不同的操作系统。它有助于让开发商更集中于自己所做的工作,而不是关注特殊平台的繁杂事项。Mono具有许多新的开发特点,我们的中心思想是,Mono是我们内部的开发平台。

  问:在Mono成为技术标准,微软已向欧洲计算机制造商协会提交标准的情况下,你将如何与微软保持一致,微软将做些什么?

  答:Mono1.0在今年中期刚刚推出,我们在三年前开始的项目。微软在一年半之前就发布了它们的产品。所以我们很晚,非常的晚,比微软晚了18个月。但是我们仍然在销售,人们也正在用它。

  总之,就向AlanCo所说的那样:自由软件总是迟到。从编写第一行代码开始,你就在编写因为你需要的东西。所以总是把事情向后推,自由软件总是如此。

  我们已经在协调.Net2.0的功能。Mono1.0版已经这样做了—通过整合完成此项任务。我们的团队已经在开发2.0版的功能。例如,我们一直在开发微软C#2.0标准。(完

M$ 在排挤了 Java 数年之后,有公司发展出一套新的工具,这套工具
可以让 .Net 的东西转换到到 Java 中。Halcyon Software 公布了第一个
Instant .Net (简称iNet) 的测试版本,这个东西是 M$ 的Visual Studio .Net 开发工具的一个嵌入程序,这个程序可以将以XML 为基础的 .Net Web Services 转成 Java 语言,并且让任何支持 Java 的应用程序服务器执行。一般企业的开发者,可以利用 Web Services 让从不同的提供厂商所提供的应用程序透过 Internet 互相沟通。例如,在 Oracle 公司内的资料,可以被 PeopleSoft 公司的 CRM 软件分享使用。

电子钱包也是另外一个 Web Services 的应用,它允许使用者在线上购买的
时候,不用敲入信用卡号码或是其它的信息。

我们可以利用不同的厂商所提供的工具来发展 Web services ,而这些web services则可以透过网络让任何执行不同操作系统的周边装置存取时, M$ 却把 .Net Web Services 锁定在他自己的平台 .Net server software 上。这个软件包含了一个执行环境,当然这个执行环境只能在M$ 的软件上执行。不过这家公司已经将部分的执行环境提交给 European Computer Manufacturers Association(ECMA) ,这是一个工业标准组织。像是 Halcyon 的执行长说的,iNet 的一个
好处是可以让那些以 J2EE 与Windows 软件为基础的公司,可以继续开发 M$ 的程序代码,但是将他们的结果放在支持 Java 的服务器上执行,这些服务器提供商包括了 M$ 的对手,像是 BEA, Sun, IBM …Linux 以及 Mac OS X 操作系统均支持 Java ,因此也可以透过 iNet 来具备执行.Net Web services 的能力。这将会让这些选择使用 .Net来开发 Web services 的公司们,有更多的选择机会。

他同时也提到,有些争论说 M$ 也许不是个部署应用程序的好地方,也许选择 Linux box 或是 Solaris box 是更好的选择,而 iNet 让这些 .Net Web Services 的开发者可以将他们的程序部署在其它的平台上。不过 M$ .Net 工具的一位发言人婉拒了对 Halcyon 的技术下评论。Microsoft 也许会对 iNet 保持沉默,因为这个软件并不会使用 Java语言来取代掉他们的技术。

Java 是由 Sun 所发展的,并且成为 M$ 本身的程序技术的一个重要的竞争对手。M$将 Java 从 Windows XP 这个操作系统中移除,之后两家公司便不断在要吸引使用者来使用他们个别的程序语言。Hsi 指出, M$ 说过他们希望 .Net 可以在其它的操作系统上执行,但是他认为 M$很难忍受大家已经将 Java 运用得很成熟了。.Net Web Service 只可以在 M$ 的服务器上执行,因为他使用了一个叫做 CLI(Common Language Infrastructure) 的技术, CLI 是一个让 .NET
Web Service 执行的一个的一个核心技术。他与 JVM (Java Virtual Machine) 很相似,Java 可以被放在 client 上,并且执行 Java Application ,而 CLI 则像是 .Net 应用程序的引擎般。.Net 架构是 CLI 的商业化的实做结果,他包含了一些额外的特色,像是 class ibraries ,以及 client 端的使用者接口。

在经过约一年的测试之后, .Net 架构已经在 2/13 号公布了最后的版本。 人们希望M$ 公布它围绕着 .Net 架构设计的 Windows .Net Server ,接下来的五个月,会公布一个手持装置的执行环境的计划,而更小的运算装置也会在以后公布。Halcyon 的 iNet 工具可以替代 CLI ,这家公司使用自己的技术发展了一个执行环境,而这个执行环境可以让 .Net Web Service在 JVM 上执行。

Hsi 说,我们想要跳过整个 CLI 。

他们的作法是,程序开发者使用了 Visual Studio .Net 建立了一个.Net Web Service ,同时将他编译成一种叫做 MSIL (Microsoft Intermediate Language)。接着开发者使用 Halcyon 的 IL-to-Java (Intermediate Language-to-Java) 工具,这个工具最后可以将原来的 MSIL 转换成 Java byte code ,然后利用 Halcyon 工具包装成一个档案,接着这个档案就可以在 JVM 上面执行了。Yefim Natis 说: Halcyon 的计划有它的优点,然而当 M$ 持续的公布新的特色,以及更新 .Net 的架构之后,他们也许不会再继续维持下去。

Natis 也说,他很怀疑这会成功,以表面上来看,它非常的吸引人,因为他可以使用很棒的开发环境,像是 Visual Studio .Net ,然后却不被 M$ 的软件所局限住。由于 .Net 的架构下,包含了比JVM更多的特色,像是vital class ibraries ,以及用来显式 .Net Web Services 的使用者接口, Halcyon 必须开发额外的东西来补足这些差异。譬如,一家公司设计了Java 版本的 M$ Windows 窗体,他允许使用者建立client-side 的使用者接口(M$ ASP .Net) ,这个接口允许这个 application 被显示在 web site 上。

Natis 指出,他不会是 .Net 的真实行为以及功能面的复制,因为每次当 M$修改或是公布新的 service pack , Halcyon 将需要快速的实做这些新的特色,也就是说他总是 M$ 的表兄弟般,而且可能会缺少一些 .Net 的特色。Hsi则指出 Hylcyon 可以为 Java 重建整个 .Net 架构,不管 M$ 怎么修改这项技术,他有 90 个开发者在持续的维护他们的技术,而这项计划在 2000 年十月时就开始了这个计划。

Halcyon 也已经开发了一个产品叫做 Instant ASP (iASP),这是个Java 版本的Microsoft ASP (Active Server Pages) 技术。像是 HP 这些公司,都已经取得 iASP的授权, Hsi 说它的公司已经被证明他们具有将 M$ 的程序代码转换成 Java 的技术能力了。

当然也有其它人致力于将 .Net Web Services 带到其它非 Windows 的环境中,他们使用的是 ECMA 的标准, Ximian 公司就带了一个计划叫做 Mono ,他们正努力将 CLI移植到 Linux 以及 Unix 操作系统上。这个计画如果实现,将可以让程序开发者使用Linux Programming工具来开发.Net Web Services。

由 Corel 取得的技术支持, M$ 也开发了一个 FreeBSD 版的 CLI 。M$ 说,这个计划的目的在于证明 .Net 的一部份架构可以在开放式的标准下被复制出来。这个计划很像是 Mono ,但是他受到 M$ 的 shared source 版权的保护,也就是说这个程序代码只能以研究的目的存在,而不能被企业所商业化。

iNet 及 Halcyon 的 Java 执行环境可以免费下载,网址位于
http://www.halcyonsoft.com

主要是增加了对.Net 2.0新特性的支持,MONO C#编译器已经实现的有:

范型(Generics)、匿名方法(anonymouse methods)、迭代器(iterators)、静态类(static classes)、局部类(partial classes)、内联警告?(inline warning)

暂时还没有被实现的有:

nullable types, namespace alias qualifier, external assembly alias, property accessor accessibility, covariance and contravariance, fixed size buffers and friend assemblies

其它的无非就是修改了BUG和提高了性能,值得一提的是Asp.Net的性能比上一个版本提高了8倍,并且稳定性也大大的提高了。

Völcker Informatik AG,一家柏林的IT服务公司在MONO平台上成功的应用了一套基于.Net技术的解决方案。在柏林市的教育网络使用超过350台的SUSE LINUX服务器和40000台PC为150000学生提供了学籍管理服务。
使用MONO作为开发平台代替JAVA,Völcker打开了一个新的市场,并且减少了公司60%的测试时间,而不需要再雇佣5-10个新程序员。

By using Mono to port its software to Linux, Völcker has opened a new market to serve customers running both Windows and Linux platforms. Using Mono as its development platform, instead of Java, has reduced the company’s testing time by 60 percent and eliminated the need to hire 5-10 new programmers. Migrating to Linux is also paying off for its customers who are gaining all the benefits of an open source network, as well as an enormous reduction in server licensing costs.

这个是Novell公司的一篇带有广告性质的成功案例,但是我们从中看到了MONO正式在大型企业商业化的开发中占有了一席之地。

记得MONO刚出来的时候,有很多人对它充满了FUD。一时间,“MONO其实是水中月”、“MONO注定不能进行商业化开发”、“没有大型企业敢采用MONO”等言调到处可见,并且还长篇大论从市场经济技术等各个角度来证明论点。

当有人企图用一百万字的论文来证明世界上不存在黑天鹅的时候,MONO开发小组什么也没有说,只是放了一只黑天鹅在他面前

2006年07月09日

Microsoft .NET development platform的Linux版本(Mono)出现。

一家叫Ximian的公司在2001-07-09宣布了Mono project启动,这将是一个Microsoft .NET development platform的Linux版本,整个Mono project主要是C#的编译器、CLR和JIT,并承诺包括一整套类库。从而使得开发.NET 应用可以在Windows和Mono支持的系统(Linux,Unix)中运行,更重要的是Mono的目标是致力于建立不依赖操作系统的应用程序,同时这也被认为是开源软件的又一大光辉成就。在圣地亚哥的OReilly Open Source Convention中成为一个热点的话题和主题之一。

Microsoft .NET 的Common Language Infrastructure (CLI)使得用不同语言写成的程序能够运行在非Windows平台成为了可能,而Micorsoft目前只承诺将和Corel合作率先在FreeBSD platform上实现。普通被认为不幸的是,最近Microsoft将C#和CLI提交给了ECMA审定,一旦获得通过,那么就意味着完全免费和所有商业用途的严重限制。

如果Mono获得成功,那么不仅意味着“build once, deploy anywhere”成为现实和巨大的商业意义,而且也将是对Linux,Unix平台应用程序产业的一次大的推进。

目前的Mono的最重要的运行环境已经被初步实现,也就意味着MS的CLI将被Linux系统上的解释器进行解码,然后交由JIT engine处理和运行。不过看来还有一段路要走:

“Currently the runtime has an image loader and metadata access entry points. The runtime comes with a simple interpreter that can execute very simple programs.”

完整的运行环境包括:JIT engine 、class loader、 garbage collector、 threading system 、PInvoke和 metadata access libraries.

C#编译器方面也目前还只能是象一个有C#写成的大的C#程序在实验,目前它(MCS)可以自己parse自己了。

类库方面System的命名空间正在不断的生长和进入测试,从网站上公布的情况看有超过29人在实现这些类库,共计17个大类上千个小的类,接口被实现,并且大部分已经通过测试。而且从8月3日开始,每天的10点钟会做“Daily snapshots”,你可以看到和Download到最近的进展情况。

感兴趣的可以去以下的链接获得这种资源和信息,还有最新的源代码可以下载,如果你非常非常感兴趣甚至可以申请加入。不知Mono是否值得我们期待,但一定值得我们关注。

Mono 主页:

http://www.go-mono.com/index.html

C#编译器 (MCS):

http://www.go-mono.com/c-sharp.html

Mono运行环境:

http://www.go-mono.com/runtime.html

最新的Mono Runtime 0.5 :

http://www.go-mono.com/download.html#july-29

Mono的类库情况:

http://www.go-mono.com/class-status/index.html

Daily snapshots:

http://www.go-mono.com/snapshots/

Ximian公司(原来的Helix Code, Inc.)主页

www.ximian.com

Miguel de Icaza,是Gnome、Ximian和Mono的创始人之一
专访Miguel de Icaza

在一次对他的专访中,他说:“一直以来我们使用C和C++太多了——它们很不错,但过于接近底层,我们想做的却是让普通用户也能创建Linux应用程序。在Windows上有许多工具可以解决具体问题,而在Linux上却得依靠自己去开发。所以,当Microsoft推出.NET,我们对它一见钟情,就启动了Mono。”

Interview with Miguel de Icaza, co-founder of Gnome, Ximian and Mono

专访Gnome、Ximian和Mono的创始人之一,

Miguel de Icaza出生于墨西哥城。他推动了Gnome(Linux操作系统上的一个自由桌面软件)的问世,同时还是开放源代码公司Ximian的共同创始人。Ximian公司于2003年8月被Novell公司收购。从2001年开始,他与人合作,启动了另一存志高远的项目:Mono,一个Microsoft .NET Framework的自由GNU/Linux实现。在这次访问中,Miguel谈及Mono的进展、Ximian被Novell收购的情况,以及自己害怕Longhorn的原因。

问:你怎么看待项目启动以来,Mono的变化?目前Mono的主要目标是什么?

答:Microsoft对.Net的许多处理触及我们的痛处。一直以来我们使用C和C++太多了——它们很不错,但过于接近底层,我们想做的却是让普通用户也能创建Linux应用程序。在Windows上有许多工具可以解决具体问题,而在Linux上却得依靠自己去开发。所以,当Microsoft推出.NET,我们对它一见钟情,就启动了Mono。不过,大家开始合作之后,发生了一些事情。

首先是关于创建与Microsoft .NET相兼容的API,Novell和Ximian都只将注意力放在核心库和C#语言;很多其他参与者对Windows Forms、ASP.NET、Web Services或数据库等较感兴趣。

那时,我们已经搭建了独立于Microsoft构件集之外的一套体系,其中也包括在Linux下进行GUI开发的工具(我们对此很有兴趣,且投入了大量工作)。

这样,在核心层,我们创建了Mono,而且得到两个优质的独立构件集:兼容于Microsoft的构件集,开发者利用它把应用从Windows迁移到Linux;另一个全新构件集在某些情况下是跨平台的,但在另外一些情况下却更Linux化。

问:现在Microsoft似乎并不大肆宣传.NET了。你对.NET目前的进度怎么看?它是怎么搭建一个软件编写平台的?

答:我认为在.NET上Microsoft的做法稍嫌过分。首先,.NET意味着太多东西,反而让人极度迷惑。它既是一套服务器产品,又是一个特殊的Windows版本,还是一个开发平台。我们谈到.NET的时候,实际上是指.NET Framework,那才是它的本来面目——.NET的一个组成部分。.NET Framework是非常好的开发平台。至少,它让对MFC心生厌恶的人们不再转移到Java平台。如果这些人继续走Microsoft技术路线,那么他们得到了比以前好得多的解决方案,且较易转移过去。我认为微软成功了。

可能你不怎么听到关于.NET的消息,这是因为它已经不是热点新闻,而成为了开发者的工具。还有一种可能性是微软的重造品牌战略——我认为会让事情更加复杂。他们试图把.NET Framework重新塑造为WinFX——别与WinFS相混淆。WinFX基本上是Longhorn上的.NET Framework新版本,所以它会包括WinFS、Avalon和通讯架构。整个Longhorn搭建于.NET平台之上。

问:Novell收购Ximian是Mono项目启动以来的一件大事,具体过程如何?

答:我们有一个基于Linux的产品,Red Carpet,用于管理Linux服务器和客户机之间的软件更新。图形界面非常棒,也有让管理员做计划任务的命令行工具;你能对软件更新做集中管理、分发、备份、恢复等等。该产品基于Linux,Novell拥有一个基于Windows的类似产品。于是大家坐下来谈怎么结合它们,从而使双方获益。

他们那边派了一些人来,想看看怎么定位Novell,以及如何才能把Novell服务移植到Linux上;这是一个长期计划。有一天,他们过来做了演示,然后说:“情况就是如此,我们真的想走向Linux,我想你们可以帮助我们。”

问:成为Novell的一部分,有什么好处?

答:我刚才提到,合作始于Red Carpet。Linux桌面系统对他们也深具吸引力,他们希望在这方面有所成就——我们决不愿意在服务器端画地为牢,客户端才是一切操作发生之地。Novell收购案让我们能重组团队,在桌面端继续工作,而无需在Red Carpet上持续投入。

问:Novell是否决定桌面端应采用什么形式?它会基于Gnome吗?或者会有其他元素加入?

答:我们不能从一而终——Gnome和KDE都有各自的用户。我们的计划是与Freedesktop.org合作。他们制订协议——例如桌面通知系统、系统级配置引擎、剪贴板支持、拖放等等。我们正将这些要素放入Gnome和KDE,让桌面与这些元素合为一体。

基本上Gnome和KDE都是内核的外壳(shell),在它们之上还有office套件这样的高阶应用。我们决定采用OpenOffice,浏览器采用Mozilla,Email客户端采用Evolution,即时通讯客户端采用Gaim。这样,我们需要把这些成功的开源项目组合到一起。整合工作耗力甚巨。

问:你们在GNU/Linux桌面和开源桌面之间做了选择,请详细解释一下。

答:某种程度上我们一直在开发与Linux桌面紧密相关的工具,且只能运行于Linux之上。我看到有两个相当成功的项目:Mozilla和OpenOffice,都是跨平台的。所以,如果我们打算开发需要时间较多的新项目,例如视频编辑——这类工具目前在企业级桌面系统上并不存在跨平台问题,但愈接近软件客户,跨平台需求可能性愈大。我们喜爱Linux,但并非所有用户都能顺利迁移到这个平台。尽管如此,我们仍能够降低他们的总体成本。也许你不再需要Office、不再需要IE,或者不再需要Final Cut Pro等等。我们应当考虑创建跨平台应用,让它可以运行于Windows和MacOS之上。

问:Novell何时会迁移至GNU/Linux桌面?

答:我们正在努力。我想今年10月整个公司会迁移到OpenOffice,明年六月能够整体迁至Linux——不要指望迁移6000人的工作一蹴而就。

我们现有的相当一些用户也在考虑迁移到Linux桌面,在此过程中也出现一些问题,这些问题正是我们可供借鉴的。例如,Extramadura和Andalucia开始动作两年,现在他们已经在200,000台计算机上部署了Linux、Gnome、Mozilla和OpenOffice,到明年夏末这个数字会增长至400,000台。这是两个极大的部署项目,也许是目前为止最大的Linux桌面系统部署项目,使用者包括孩子和老奶奶们。

问:如果继续走开源路线,你认为将会面临的最大危险是什么?

答:微软意识到Linux闯入自己享用多年的牧场,成为自己的竞争者;我认为Longhorn是微软争夺失地的一大兵器。Longhorn包括一项令人惊恐的技术:Avalon,配合另一项成为XAML的技术,将是极具威胁的。它们基本上是HTML的替代品,如同编写HTML一样容易,这意味着每个人都能使用文本编辑器创建内容。

基本上这是下一代的HTML。更多工具、更具灵活性、更丰富的用户体验——你能在本地机上感受到如同Web一般的形式。你开发如此极尽丰富的应用,但分发起来又像Web般简易。和点击URL一样:访问google,网页出现,而且工作正常。分发模型大体如此,但用户界面的高度交互性令人着迷。

当然,不利之处在于,新的交互机制被紧缚到.Net和WinFX上。所以我们认为它是一个极大的危险。大量用户无法迁移到Linux或是Mozilla,是因为许多企业的内部站点只支持IE扩展。想想看,只能使用XAML的世界,将会变成怎样?

一、Mono简介
  Mono是由Novell公司(著名的Suse Linux就是其产品)开发的一款开源的.net程序运行平台。长期以来,.net因为有微软这棵大树,还是颇受推崇的,包括我个人也很推崇。不过由于不具备跨操作系统平台的能力,比如说将程序由Windows移植到Linux上,因此也颇遭诟病。Mono所应对的正是这一情况。
  Mono不仅提供了基本的.net类库,也有自己的扩展。但Mono现在还不太完善,更多的时候只能用于技术尝试,不过毕竟实现了.net程序跨平台。现在Mono最新版本是1.1.13.2,可以从http://www.mono-project.com/Downloads上下载,本文使用的是1.1.12.1(安装到了本机的C:\Program Files\Mono-1.1.12.1文件夹下,但没有安装.net环境)。Mono提供了包括C#(mcs)和VB.net(mbas)等在内的多款编译器,还提供了一个XSP服务器,能够运行ASP.net程序了。但这里将只会用到C#。
二、NUnit简介
  NUnit是一款堪与JUnit齐名的开源的回归测试框架,供.net开发人员做单元测试之用,可以从www.nunit.org网站上免费获得。本文使用的是Mono自带的NUnit 2.2.0。
三、编写用于测试的类
  用于测试的类很简单,名为Book,只有id和name两个属性,这两个属性将分别用于两个用例当中。由于我没有在当前的系统中安装.net环境,自然也无法使用Visual Studio.net、Delphi或是SharpDevelop这些开发工具,只好用记事本了。
  打开记事本后,首先将该文件保存,我保存在了本机的G:\MDZPCK\Mono\NUnit文件夹下,文件名Book.cs。然后输入代码,如下:
  using System;
  
  namespace NUnitCS
  {
    public class Book
    {
      private string pid = null;
      private string pname = null;

      public string id
      {
        get
        {
          return pid;
        }

        set
        {
          pid = value;
        }
      }

      public string name
      {
        get
        {
          return pname;
        }

        set
        {
          pname = value;
        }
      }
    }
  }
至此,用于测试的类编写完成了。
四、编写测试用例
  这里只用了一个类进行测试,名为BookTest,以前这样的类可能需要继承NUnit.Framework.TestCase类,但现在只需要对该类使用TestFixture属性进行标识即可,而无须继承了。BookTest类包含两个用例,分别对应该类的testId和testName方法,即每个方法实现了一个测试用例。注意,在NUnit中,这些用来实现测试用例的方法有两种手段进行标识:一个是以testXXX的格式来命名,一个是使用Test属性进行标识。此外,BookTest还有Init和Dispose这两个方法,并分别使用TestFixtureSetUp和TestFixtureTearDown属性来进行标识,前者在每个测试方法开始之前执行,多用来做初始化;后者在每个测试方法完成之后执行,多用来清理资源。注意,这两个方法的名称并没有什么限制,但必须用TestFixtureSetUp和TestFixtureTearDown属性进行标识。下面开始编写BookTest。
  在记事本中新建文件,与Book.cs保存在同一目录下,文件名BookTest.cs。然后输入代码,如下:
  using System;
  using NUnit.Framework;

  namespace NUnitCS
  {
     [TestFixture]
    public class BookTest
    {
      Book book = null;

      [TestFixtureSetUp]
      public void Init()
      {
        Console.WriteLine("测试开始!");
        book = new Book();
        Console.WriteLine("book对象被初始化!");
      }

      [Test]
      public void testId()
      {
        book.id = "001"; //设置id属性的值为001
        //使用Assert查看id属性的值是否为001
        Assert.AreEqual("001", book.id);
        Console.WriteLine("id属性被测试!");
      }

      [Test]
      public void testName()
      {
        book.name = "ASP"; //设置name属性的值为ASP
        //使用Assert查看name属性的值是否为JSP,这是个必然出现错误的测试
        Assert.AreEqual("JSP", book.name);
        Console.WriteLine("name属性被测试!");
      }

      [TestFixtureTearDown]
      public void Dispose()
      {
        Console.WriteLine("book对象将被清理!");
        book = null;
        Console.WriteLine("测试结束!");
      }
    }
  }
这里Init和Dispose方法没什么好说的,就是执行了对book对象的初始化和清理,不过testId和testName需要说明一下。前者是在对book的id属性进行测试,首先赋值为”001”,然后使用Assert的AreEqual方法查看id属性中存放的值是否是期待的值,由于我的期待值也是”001”,所以执行后这个用例应该是成功的;后者则是对book的name属性进行测试,也是首先赋值为”ASP”,然后使用Assert的AreEqual方法查看其值是否是期待的,由于我特意将期待值设定为根本不可能的”JSP”,因此这个用例执行后会出现一个错误。但请注意,由于我是特意要让测试出现错误,所以将期待值设定成了不可能的值,如果你是测试人员,请千万不要这么做,否则如果别的地方导致了错误,很容易给自己造成不必要的麻烦。
  下面简单介绍一下上边用到的静态类NUnit.Framework.Assert。该类主要包含7个方法:
  1.AreEqual()方法,用来查看对象中存的值是否是期待的值,与字符串比较中使用的Equals()方法类似;
  2.IsFalse()和IsTrue()方法,用来查看变量是是否为false或true,如果IsFalse()查看的变量的值是false则测试成功,如果是true则失败,IsTrue()与之相反;
  3.AreSame()方法,用来比较两个对象的引用是否相等,类似于通过“Is”或“==”比较两个对象;
  4.IsNull()和IsNotNull()方法,用来查看对象是否为空和不为空;
  5.Fail()方法,意为失败,用来抛出错误。我个人认为有两个用途:首先是在测试驱动开发中,由于测试用例都是在被测试的类之前编写,而写成时又不清楚其正确与否,此时就可以使用Fail方法抛出错误进行模拟;其次是抛出意外的错误,比如要测试的内容是从数据库中读取的数据是否正确,而导致错误的原因却是数据库连接失败。
  下面,还需要用记事本再编写一个文件,该文件中将包含main函数,以做为程序的入口点,我将该文件保存为Class1.cs。代码如下:
  using System;

  namespace NUnitCS
  {
    class Class1
    {
      static void Main(string[] args) {}
    }
  }
至此,编码完成。
  下面用Mono提供的mcs来编译程序。不过在编译之前,请确认Mono安装目录(我的安装目录是C:\Program Files\Mono-1.1.12.1)下的bin文件夹是否被配置到了环境变量path中。虽然这不是必须的,但编译程序时会方便一点。配置好后,打开命令行工具,将路径定位到保存源码文件的文件夹下,然后运行如下命令:

mcs –r:nunit.framework.dll –out:NUnit.exe Class1.cs Book.cs BookTest.cs

如下图所示:

这里第一行命令对环境变量path做了临时配置,以防有人不会配置。不过这么做只是临时的,关掉命令行窗口后该配置就会遗失,但也没办法,要是通过“我的电脑”来配置,演示起来太麻烦了。下面简单介绍一下这里所执行mcs命令:
  1. 参数-r,用来调用动态连接库。这里调用的nunit.framework.dll就是Mono自带的NUnit类库。
  2.参数-out,要输出的文件的名字,需要加扩展名。
执行后,在保存源码的文件夹下生成一个名为NUnit.exe的可执行文件。
五、运行NUnit
  编码完成后,就可以使用NUnit进行测试了。Mono自带的NUnit只提供了控制台工具,执行命令如下:

nunit-console NUnit.exe

执行结果如下:

执行结束后,目录下会生成一个TestResult.xml文件,该文件以XML格式保存了测试结果信息。
六、小结
  与半年前相比,Mono已经有了很大进步,至少对中文的支持就比以前强多了,而且现在学习Mono的人也越来越多,资料也相对容易获得,不过与Sun的Java、MS的.net相比还是有些弱小。但任何事物也不是一蹴而就的,Java能有今天也要走过十年,而.net则更是由于有了微软这棵大树,因此对于Mono,我有着更多的期待。

高手就不要浪费时间看了。

本文只是写给linux新手see see的,xixi!!~÷~

为了在linux机上跑.net程序,下载了mono-beta2及monodevelop0.4。资源见:
http://www.go-mono.com 、http://monodevelop.com和http://ximian.zeelandnet.nl

先下载所需rpm包,基本安装方法:
********************************
rpm -ivh *.rpm
./configure –prefix=/usr
make
make install
*********************************

由于玩linux时间不久,更是第一次在linux下配置安装开发环境,只好摸石头过河了。
经过一番尝试,基本摸清了安装循序:(以linux企业版AS3 和mono-beta2为例)(注:安装前请检查rpm文件是否完备,缺失的文件请到http://ximian.zeelandnet.nl 查找或update系统。)

1. libicu26*.rpm
2. libicu-devel-*.rpm
3. icu26*.rpm
4. mono-core-0.95*.rpm
5. mono-peapi-0.95*.rpm
6. mono-core-devel*.rpm
7. mono-runtime*.rpm
8. perl-xml-libxml-common*.rpm
9. perl-xml-NameSpaceSupport*.rpm
10.perl-xml-NodeFilter*.rpm
11.perl-xml-SAX*.rpm
12.perl-xml-libxml-1.54*.rpm
13.gtk-sharp-gapi-0.93*.rpm
14.mono-ziplib*.rpm
15.gecko-sharp-0.4*.rpm
16.mono-locale-cjk*.rpm
17.mono-locale-mideast*.rpm
18.mono-locale-other*.rpm
19.mono-locale-rare*.rpm
20.mono-ms-enterprise*.rpm
21.wine-20040505rh9*.i386*.rpm
22.winelib*.rpm
23.mono-posix*.rpm
24.mono-nunit*.rpm
25.mono-ikvm*.rpm
26.mono-novell*.rpm
27.mono-directory*.rpm
28.ikvm*.rpm
29.mono-xml-relaxing*.rpm
30.mono-data-0.95*.rpm
31.mono-data-oracle*.rpm
32.mono-data-sqllite*.rpm
33.mono-data-sybase*.rpm
34.mono-web-forms*.rpm
35.mono-web-service*.rpm
36.mono-ms-extras*.rpm
37.mono-preview*.rpm
38.mono-remoting*.rpm
39.mono-basic*.rpm
40.libpixman-0.1.1*.rpm
41.libpixman-devel*.rpm
42.slim-*.rpm
43.libpixregion*.rpm
44.cairo-0.1.23*.rpm
45.cairo-devel*.rpm
46.libgdiplus-0.8*.rpm
47.libgdiplus-devel*.rpm
48.mono-drawing*.rpm
49.mono-winform*.rpm
50.libgtkhtml-3.0_4*.rpm
51.gtk-sharp-0.93*.rpm
52.get-sharp-gapi-0.93*.rpm
53.monodoc*.rpm
54.gtksourceview-0.8*.rpm
注: (1)./configure –prefix=`pkg-config –varialib=prefix ORBit-2.0`
(2)类似

55.gtksourceview-sharp*.rpm
56.monodevelop*.rpm

注: (1)export PKG_CONFIG_PATH="/usr/lib/pkgconfig"
(2)./configure –prefix=/usr
(3)类似

安装完毕!