2006年05月29日

我们不得不承认,Mono 项目对于开发者来说,已经成为在开源项目中最引人期待渴望的项目了。它的出现使得.NET framework可以首次在Linux和其它的平台上运行。把应用程序的部署扩大到了更大的范围。


最近,Mono项目的Beta3版已经发布。在这篇文章里,我希望可以使你了解到如何去得到Mono 的Beta3 版,并且如何使它在你的linux 系统中运行,还有如何通过Mono平台运行你的第一个.NET应用程序。

如果你是一个Windows 平台下的开发者,如果你正在考虑用 Linux作为你 .NET 应用程序的主机。那么Mono beta版提供了一个很好的办法,使你可以预先在Linux 平台上对您的应用程序进行测试和调试。

提醒:
Mono Beta 3仅仅是被用来测试,并不推荐当作一个产品去使用。
我们用Red Hat 9.0作为我们这次文章讲解的平台来安装和配置Mono。如果你现在还没有Red Hat 或者其它版本的Linux服务器,那么,你可以从here下载Red Hat 的ISO文件安装。

但是,如果你没有空闲的计算机或者服务器去运行RedHat,你可以在你的计算机上安装一个双启动,或者,你可以通过软件做一个虚拟机,例如像VMWare。不过请注意看?Red Hat.安装说明。

当你安装好Red Hat并成功运行了Red Hat后,你下一步需要做的就是下载Mono Beta3从Go-Mono Web site.请注意,针对不同的操作系统的

Mono有不同的版本。

?Red Hat 9.0/x86
?Fedora Core 1/x86
?Fedora Core 2/x86
?SLES 8/x86
?SUSE 9/x86
?SUSE 9.1/x86
?Windows (2000 and above)
?Mac OS X
针对这篇文章,你需要下载的版本是Red Hat 9.0/x86 version.。有两种不同的下载途径。一种是比较大尺寸的zip格式文件,这个文件里包含了所需的所有RPM文件。另外一种是单独下载你所需的每个独立的RPM文件。

关于RPM
如果你是一个Linux的新手,是否对RPM 感到陌生。RPM 是“Red Hat Package Manager”它是一个标准的文件格式。通常在Linux 上的文件管理格式都是RPM。你可以学习到更多的RPM在here.

当然,最方便的方法还是下载包含所有你所需RPM文件的zip文件。当你下载,并解压缩了那个zip包后。你就会看见很多独立的RPM文件。这时你可以双击每一个RPM文件逐个去安装。但是这种做法需要注意安装的从属关系,先后次序。所以,一种比较简单的安装方法是通过命令的方式对RPM文件进行一次统一的安装。


首先你要保证你是用root的身份登陆的,然后输入如下命令一次安装所有的这些packages文件。
rpm -Uvh –nodeps *.rpm

如果在这个时候,你已经安装了一部份package文件,也不要紧你可以使用下面的命令一次性的重新安装所有的Mono package。

rpm -Uvh –nodeps –force *.rpm

技巧,在对 RPM文件进行操作的时候,如果不记得命令,可以输入RPM –help 或者查看这个文档here.。

Mono是一个集体的, 自发的开发项目, 旨在开发一个开放源代码的, Linux版的Microsfot.NET 开发平台. 作为一个有机的.NET整体, 它包括一个C#编译器, 一个公用语言运行时环境, 以及相关的一整套类库. Mono项目将使开发者开发的.NET应用程序不仅能能在windows平台上运行, 也能在任何支持Mono的平台上运行, 包括Linux, Unix. Mono项目将使大家能开发出各种跨平台的应用程序, 并能极大提高开源领域的开发效率.
  Microsoft.NET是一套强大的GUI应用程序开发和Web Services (.NET开发框架)开发工具;一个提供给最终用户应用程序(比如web服务和大量其他企业产品)的用户身份识别和验证系统("Hailstorm"). .NET开发工具包括C#编译器, 公用语言构架(CLI). 它能使程序员用C#或其他语言编写的程序运行在非windows系统之上. Microsoft和Corel最近宣布他们将在遵守Microsoft的"代码共享"许可下, 合作在FreeBSD平台上实现.NET.
  随着C#以及CLI被提交给ECMA和W3C标准化组织, "代码共享"许可的局限性将限制开发者的开发工作, 包括在其他平台上的商业开发。比如Linux,Unix, Solaris。
  与此相对, Mono项目为开放源代码的开发者提供了一个真正的"创建一次,随处部署"的工具包, 并能充分利用Microsft.NET的各项优点. Mono项目遵守GPL和LGPL的各项条款, 开发者能自由地编写, 并发布商业的或个人的应用程序. 而这些, Microsoft的"代码共享"许可是做不到的.
  Mono在他的开发构架中将提供三个关键部件, 以帮助开发者快速的在linux平台上开发, 部署, 运行.NET的兼容程序: 一个延伸自GNOME平台的C#编译器, 他将使开发者能创建.NET相兼容的应用程序. 这些开发者还将能在开放源代码的系统上使用和Microsoft CLI相兼容的类库来进行最终用户程序开发和web服务开发. Mono还有一个Linux版的Microsfot公用语言运行时环境(CLR)的及时编译(JIT)引擎. 这样, Linux上就能运行在Windows, Linux, 或Unix平台上编写的程序了. 在广大的开放源代码志愿者的支持下, 这些类库和工具已经能提供下载和试用: www.go-mono.com.
开放源代码协会通过Linux软件开发公司Ximian开始了一个旨在将微软.Net平台移植到Linux上来的项目。这个叫做Mono工程的项目包括创建一个开发平台允许人们为基于Linux和基于Windows系统的.Net开发应用程序。
据Ximian公司的首席技术官员Miguel de Icaza说Mono项目的起因是GNOME社团特别是Ximain公司对于一个改进的开发工具的需要。
但是Mono项目的影响却是更加深远的,因为这些开发工具是基于CLI(通用语言架构)和微软提交给欧洲计算机制造协会(ECMA)的C#实现标准的。如果Mono能够创建完成一套基于这些标准Linux开发工具集的话,开发者将能够编写同时在Windows和Linux上运行的.Net程序,这些程序甚至还可能在其它非Windows的操作系统上运行,比方Unix。
除了实际的开发过程,Mono项目的工具必须在开放源代码社团的内部完成而不能违反微软的知识产权专利--这实际上意味着开发者们必须基于标准重新构造这些工具而不能查看微软的任何源代码。
Mono项目包括三个核心的部分:一个C#语言的编译器,一个CLI和一个类库。 CLI是包含了类加载器的虚拟机,实时的编译器,和一个运行时环境的垃圾收集器。CLI这个组件将允许用C#编写的应用程序能够在象Linux这样的非Windows操作系统上运行。这与Java世界中Java虚拟机能够让一个应用程序在不同的操作系统上运行是类似的。
Mono项目的类库能够让应用程序完成核心的诸如XML处理,文件输入输出,和连接网络之类的任务。它将会和微软的CLI兼容(与微软在.Net 框架中发布的东西紧密的配套),还有一点就是将由开放源代码团体编写的额外的类库也将和CLI兼容。
Ximian公司的de Icaza希望在年底到达项目的一个里程碑,这时编译器将能够编译类库了。图形用户界面组件--创建GUI程序所需的类库--将在明年中完成。 “我们在这个方面工作的原因是希望升级我们的开发平台来创建我们的Evolution桌面应用程序,”de Icazo说。Evolution是Ximian公司的电子邮件客户端及个人和工作组信息管理程序。“当我们看见.Net framework的时候,我们觉得这些就是我们将用来开发我们下一代产品要使用的工具,”他说。
Ximian并不将Mono和它自己看作是给Linux开发者一种途径在可用的开发工具方面赶上Windows。其实,Linux开发者将更喜欢用他们目前使用的工具来编写的编译应用程序。Ximian 将另一个开放源代码项目,SharpDevelop看作是用来提供与微软Visual Studio .Net类似的集成开发环境的一种途径。
通过以开放源代码的方式开发Mono,这个项目包含了许多对开发过程拥有广泛兴趣的人们。虽然Ximian可能希望找一些改进的开发工具来加速它的应用程序的开发过程,但其它的开发者可能是希望找到能够让他们在Windows上编写程序然后在Linux系统上运行它们的开发工具。
其中的一个大问题是如何避免微软的知识产权保护。“我们避免知识产权保护的方法是坚持非研究性的主题并使用现有的技术实现其功能,”de Icaza说。例如,Mono JIT编译器没有使用任何先进的JIT编译器技术,而是基于老的JIT技术。
De Icaza还声称Mono必须“着眼大处”还不仅仅是去年ECMA规定了些什么。也就是说,Ximian计划参与标准的制定过程并创建类库来提高.Net 框架的薄弱之处,比方说电子邮件管理。
据Giga Information Group的副分析师Stacey Quandt称,微软不太可能支持Mono因为其授权是与GNU 通用公众证书为C#的授权和GNU弱公众证书为类库和运行库的授权联系在一起的。
但即使微软不支持Mono,Mono的存在也证实了微软对于.Net能够移植到其它平台的声明是正确的。
Quandt说面向更广泛的开发团体是Mono面临的另一个挑战。例如IBM和Sun都在Java上花费了巨额的投资,自然也就很难容忍竞争行为。
要得到更多的Mono的信息,请访问:
http://www.go-mono.com/

由于富有竞争力的价格和易于使用,MySQL在市场占有率方面逐步提升。开放源代码社区为了扩展MySQL的使用范围,开发出了.Net框架(.NET Framework)中可以使用的数据库连接器。我们就来学习一下如何在.Net应用程序中使用MySQL。

  每周三发布的TechRepublic的.NET通讯,包含有网络服务, ASP.NET, ADO.NET, 和 Visual Studio .NET相关的实用技巧与代码实例. 现在就自动订阅!

  MySQL渐渐的成为了在选择数据库平台时一个切实可行的数据库方案。能够证明这一点的就是许多公司都选择mySQL作为他们的数据库平台,例如 Google、美联社(The Associated Press) 以及美国国家航空宇航局( NASA)。虽然对于一个开放源代码来说,低廉的价格常常被当作主要优点来说服客户,但是对于象Google那样的大规模的组织来说,他们不会放心的把非常有用的信息存放在一个只有价格优势的数据库产品中。MySQL真正的实力远远的超过了他的价格优势,他提供了丰富的来自开放源代码社区和商业化的附加工具。

  和.NET的数据整合

  MySQL 社区已经开发出了MySQL的数据接口,他提供了连接数据源和程序代码的基本功能。在Windows平台上,有如下的MySQL连接器:

  * MySQL Connector/Net 1.0 (之前被称为ByteFX.Data):是一个为MySQL设计的开放源代码.NET数据接口。它是完全用C#来开发的,我们可以在在 MySQL.com网站上找到它。(注意:在本文的例子中,我们都会使用MySQL Connector/Net 1.0这个数据接口来连接数据库,利用Windows安装程序即可轻易安装它,它的代码实例和文档也包含其中。)

  * MySQLDirect .NET Data Provider: 是一个由 Core Lab 开发的商业数据接口。他的价格由购买的许可证的类型决定,但是我们可以下载它的试用版。

  如果你使用 Mono,那么在 Mono网站上可以找到PHP连接器的下载。如果你在Windows平台上运行Mono的话,你下载的连接器包含了安装程序。如果不是的话,那就要根据你的操作系统的种类去下载合适的连接器了。

  使用MySQL数据接口

  安装好MySQL的数据接口后,你必须在你的代码中引入它才能使用。你可以使用 MySql.Data.MySqlClient这个名空间来连接 MySQL 服务器。在C#中,可以使用using语句来引入MySQL数据接口:

  using MySql.Data.MySqlClient;

  另外,你也可以在一个ASP.NET的网页表单(Web Form)中通过使用导入(Import)指令来引入MySQL数据接口:

  

  或者,你也可以在你的代码里在使用这个名空间时,写全一个类的完整路径,但是这样的话会比使用Import指令来导入输入更多的字符,浪费更多的字节。指定了名空间后,我们就可以和MySQL数据库进行数据交互了。 MySql.Data.MySqlClient这个名空间提供了许多用于处理MySQL数据的类。下面是这些类的一个样本:

  * MySqlConnection: 管理和 MySQL 服务器/数据库的连接;

  * MySqlDataAdapter: 一套用于填充DataSet对象和更新MySQL数据库的命令和连接的集合;

  * MySqlDataReader: 让你能够从一个 MySQL 数据库读取数据。它是一个单向的数据流;

  * MySqlCommand: 提供向数据库服务器发送指令的功能;

  * MySqlException: 当发生问题时提供例外处理。

  我们会使用其中的一些类去和我们的范例数据库进行数据交互。

  连接 MySQL 数据库

  使用MySQL数据库的第一步是要通过MySQLConnection类和数据库建立连接。通过一个连接字串,MySqlConnection 将会被实例化成一个示例。连接字符串将告诉代码到哪里去找MySQL服务器以及其他一些选项。

  一个连接字串告诉代码使用指定的用户名和密码去连接一个名为MySQLTestServer的MySQL服务器,并进入techrepublic数据库。我在我的测试机上设定了允许匿名登陆(这样的设定有非常大的安全漏洞,所以不建议你在生产服务器上也这么做),所以在范例中将会使用如下的连接字串:

  "server=localhost; database=sitepoint;"

  指定了连接字串后, MySqlConnection 对象的Open方法就被调用并打开连接。连接建立后,你就可以给MySQL数据库发送命令或从数据库获得数据了。

  ASP.NET和MySQL的组合

  让我们更深入的讨论一下结合MySqlConnection类和其他的类来生成一个MySQL服务器上的数据库列表。表 B列出了一个使用C#写的ASP.NET的网页表单。它建立了一个连接,接着给服务器下了一个指令(SHOW DATABASES),然后通过MySqlReader对象把结果显示出来。

  用 MySqlCommand 对象向MySQL服务器发送 SHOW DATABASES 命令和直接在 MySQL 管理工具中输入这个命令得结果是一样的。唯一的区别是,我们在代码中必须使用另一个对象来获取结果集。MySqlDataReader 对象在获取结果时被实例化(通过 MySqlCommand 类的 ExecuteReader 方法)。MySqlDataReader 对象的 GetString 方法被用于通过ASP.NET的标签控制来显示结果集中的数据。GetString 方法的指针0指定了显示结果集的当前行(在while循环中)的第一列数据。

  Mono提示

  如果你使用开放源代码的Mono开发平台,例子中的代码只需要做小小的改动就能正常的运行。MySQL的数据接口在 ByteFX.Data.MySqlClient 这个空间名里,而不是Windows上的MySql.Data.MySqlClient空间名。事实上 MySQL 的数据接口原来是由 ByteFX公司开发的,但是后被MySQL公司收购。所以如果你使用Mono的话,你必须这样声明空间名:

  using ByteFX.Data.MySqlClient;

  结语

  MySQL 和 .NET 的组合提供了一个强大的开发平台。MySQL在开源社区得到了强大的技术支持,.NET也通过 Mono 而被开放源代码社区所接受。这样的组合提供了一个在Windows,及其他语言如UNIX或Linux,环境下高度灵活的开发平台。