Giới thiệu về Mono – Nền tảng lập trình đa ngôn ngữ và cross-platform

Mono là một nền tảng open-source với mục đích chính là tạo những ứng dụng cross-platform trên nền .Net. Bạn có thể sử dụng Mono trên các hệ điều hành như Unix, Linux, Mac OS X, Solaris và tất nhiên là Windows. Bất kì ngôn ngữ nào được biên dịch thành mã IL thuần túy đều có thể tương thích với Mono. Ngoài ra, Mono còn cung cấp thư viện hỗ trợ rất nhiều loại ngôn ngữ lập trình khác như Java, PHP, Python, Object Pascal, Cobra… chi tiết bạn có thể coi tại đây.

Trang chủ: http://mono-project.com

Các thành phần chính

Mono runtime: cung cấp trình biên dịch Just-in-Time (JIT), Ahead-of-Time (AOT), thực thi, quản lý các tiến trình và giao tiếp với hệ thống.

C# Compiler: bao gồm các công cụ:

  • mcs: (phiên bản 1.1) hỗ trợ C# 1.0 và C# 3.0 ngoại trừ các tính năng về generic.
  • gmcs: (phiên bản 2.0) hỗ trợ đầy đủ C# 3.0
  • smcs: (phiên bản 2.1) hỗ trợ thêm Silverlight/Moonlight
  • dmcs: (phiên bản 4.0) hỗ trợ C# 4.0

Base Class Library: thư viện nền tảng để phát triển ứng dụng, tương thích với .Net framework.

Mono Class Library: Cung cấp các thư viện lập trình như Gtk+, Zip files, LDAP, OpenGL, Cairo, POSIX,…

Tải và cài đặt

Phiên bản Stable hiện tại là 2.10.1, bạn vào địa chỉ sau để chọn platform và tải về bộ cài đặt:

http://www.go-mono.com/mono-downloads/download.html

Ví dụ link tôi tải bản cho Windows:

Mono for Windows, Gtk#, and XSP

Sau khi cài đặt bạn vào thư mục C:\Program Files\Mono-2.10.1 (tên thư mục thay đổi theo version). Các công cụ nằm trong thư mục bin mà bạn cần phải chú ý trước khi bắt đầu phát triển ứng dụng với Mono. Để xem hướng dẫn về cách sử dụng, bạn hãy gõ tham số /?

ilasm Mono IL assembler, tương tự như công cụ ilasm.exe của .Net.
mcs/gmcs/smc/dmcs Mono Compiler Suite: trình biên dịch C#, hỗ trợ tất cả tham số dòng lệnh giống Microsoft C# Compiler (csc.exe).
mint Mono Interpreter: trình thông dịch để thực thi ứng dụng mà không cần JIT.
mono Trình sinh mã native và thực thi thông qua Just-in-Time và Ahead-of-Time.
xsp2 XSP server là một web server light-weight viết bằng C# dùng để chạy các ứng dụng ASP.Net

Bạn có thể đăng kí các biến môi trường dẫn đến hai thư mục con binlib để chạy các công cụ của Mono bất kì đâu. Tuy nhiên, Mono hỗ trợ sẵn tiện ích Mono Command Prompt cho phép bạn làm điều này.

*ECMA là viết tắt của European Computer Manufactures Association, một tiêu chuẩn để phát triển CLI và C#.

Làm quen với công cụ Mono Compiler Suite

Trong phần này ta sẽ làm quen với các công cụ biên dịch Mono Compiler Suite. Đầu tiên bạn mở tiện ích Mono-2.10.1 Command Prompt ra và gõ lệnh “gmcs /?” để xem các hướng dẫn sử dụng công cụ gmcs:

C:\>gmcs /?

Mono C# compiler, Copyright 2001 – 2011 Novell, Inc.

mcs [options] source-files

–about About the Mono C# compiler
-addmodule:M1[,Mn] Adds the module to the generated assembly
-checked[+|-] Sets default aritmetic overflow context
-clscheck[+|-] Disables CLS Compliance verifications
-codepage:ID Sets code page to the one in ID (number, utf8, reset)
-define:S1[;S2] Defines one or more conditional symbols (short: -d)
-debug[+|-], -g Generate debugging information
-delaysign[+|-] Only insert the public key into the assembly (no signing)
-doc:FILE Process documentation comments to XML file
-help Lists all compiler options (short: -?)
-keycontainer:NAME The key pair container used to sign the output assembly
-keyfile:FILE The key file used to strongname the ouput assembly
-langversion:TEXT Specifies language version: ISO-1, ISO-2, 3, Default, or  Future
-lib:PATH1[,PATHn] Specifies the location of referenced assemblies
-main:CLASS Specifies the class with the Main method (short: -m)
-noconfig Disables implicitly referenced assemblies
-nostdlib[+|-] Does not reference mscorlib.dll library
-nowarn:W1[,Wn] Suppress one or more compiler warnings
-optimize[+|-] Enables advanced compiler optimizations (short: -o)
-out:FILE Specifies output assembly name
-pkg:P1[,Pn] References packages P1..Pn
-platform:ARCH Specifies the target platform of the output assembly
ARCH can be one of: anycpu, x86, x64 or itanium
-recurse:SPEC Recursively compiles files according to SPEC pattern
-reference:A1[,An] Imports metadata from the specified assembly (short: -r)
-reference:ALIAS=A Imports metadata using specified extern alias (short: -r)
-sdk:VERSION Specifies SDK version of referenced assemlies
VERSION can be one of: 2 (default), 4
-target:KIND Specifies the format of the output assembly (short: -t)
KIND can be one of: exe, winexe, library, module
-unsafe[+|-] Allows to compile code which uses unsafe keyword
-warnaserror[+|-] Treats all warnings as errors
-warnaserror[+|-]:W1[,Wn] Treats one or more compiler warnings as errors
-warn:0-4 Sets warning level, the default is 4 (short -w:)
-helpinternal Shows internal and advanced compiler options

Resources:

-linkresource:FILE[,ID] Links FILE as a resource (short: -linkres)
-resource:FILE[,ID] Embed FILE as a resource (short: -res)
-win32res:FILE Specifies Win32 resource file (.res)
-win32icon:FILE Use this icon for the output
@file Read response file for more options

Một vài ứng dụng Mono cơ bản

Các ví dụ sau bạn có thể sử dụng một trình soạn thảo văn bản đơn giản như Notepad và dùng các công cụ của Mono để biên dịch ở chế độ dòng lệnh. Ngoài ra, bạn có thể sử dụng IDE MonoDevelop (một phần của dự án Mono) để lập trình hiệu quả hơn (hỗ trợ đồ họa).

Xem bản gốc tại: http://mono-project.com/Mono_Basics

C# Console Hello World

Trong ví dụ này ta sẽ tạo một chương trình Console in ra màn hình chuỗi “Hello Mono World”. Bạn hãy tạo file hello.cs với nội dung sau và lưu lại:

using System;

public class HelloWorld
{
	static public void Main ()
	{
		Console.WriteLine ("Hello Mono World");
	}
}

Mở Mono Command Prompt ra và dùng gmcs để biên dịch, nếu không có thông báo gì xuất hiện tức là chương trình đã biên dịch thành công. Tiếp tục sử dụng công cụ mono để thực thi:

C:\>gmcs Hello.cs

C:\>mono Hello.exe

Hello Mono World

Gtk# Hello World

Gtk# là thư viện bắt nguồn từ bộ công cụ Gtk+ dùng để lập trình giao diện đồ họa người dùng (GUI) cross-platform.

using Gtk;
using System;

class Hello {

	static void Main()
	{
		Application.Init ();

		Window window = new Window ("helloworld");
		window.Show();

		Application.Run ();

	}
}

Để biên dịch file này, bạn phải sử dụng gmcs với tham số -pkg:gtk-sharp-2.0 để tham chiếu thêm package của Gtk#.

C:\>gmcs Hello.cs -pkg:gtk-sharp-2.0

C:\>mono Hello.exe

C# Winforms Hello World

using System;
using System.Windows.Forms;

public class HelloWorld : Form
{
	static public void Main ()
	{
		Application.Run (new HelloWorld ());
	}

	public HelloWorld ()
	{
		Text = "Hello Mono World";
	}
}

C:\>gmcs Hello.cs -pkg:dotnet

C:\>mono Hello.exe

ASP.Net Hello World

Bạn tạo file Hello.aspx với nội dung sau:

<pre><%@ Page Language="C#" %>
<html>
<head>
<title>Sample Calendar</title>
</head>
<asp:calendar showtitle="true" runat="server">
</asp:calendar>

Chạy công cụ xsp2, bạn sẽ thấy thư mục gốc của webserver tại thư mục hiện tại:

C:\ASP_Root>xsp2

xsp2

Listening on address: 0.0.0.0

Root directory: C:\ASP_Root

Listening on port: 8080 (non-secure)

Hit Return to stop the server.

Bạn mở trình duyệt và truy xuất vào địa chỉ sau để thấy kết quả: http://localhost:8080/Hello.aspx

https://yinyangit.wordpress.com

Advertisements

2 thoughts on “Giới thiệu về Mono – Nền tảng lập trình đa ngôn ngữ và cross-platform

  1. Chỉ mình cách dùng Mono để compile project C# tạo ra bởi VS 2012.
    *Mình compile: dmcs program.cs -pkg:dotnet
    *Kết quả như vầy:
    program.cs(19,33): error CS0246: The type or namespace name `Form1′ could not be
    found. Are you missing a using directive or an assembly reference?
    program.cs(19,25): error CS1502: The best overloaded method match for `System.Wi
    ndows.Forms.Application.Run(System.Windows.Forms.Form)’ has some invalid argumen
    ts
    C:\PROGRA~2\MONO-2~1.9\lib\mono\4.0\System.Windows.Forms.dll (Location of the sy
    mbol related to previous error)
    program.cs(19,25): error CS1503: Argument `#1′ cannot convert `object’ expressio
    n to type `System.Windows.Forms.Form’
    Compilation failed: 3 error(s), 0 warnings

    Phản hồi

Trả lời

Mời bạn điền thông tin vào ô dưới đây hoặc kích vào một biểu tượng để đăng nhập:

WordPress.com Logo

Bạn đang bình luận bằng tài khoản WordPress.com Đăng xuất / Thay đổi )

Twitter picture

Bạn đang bình luận bằng tài khoản Twitter Đăng xuất / Thay đổi )

Facebook photo

Bạn đang bình luận bằng tài khoản Facebook Đăng xuất / Thay đổi )

Google+ photo

Bạn đang bình luận bằng tài khoản Google+ Đăng xuất / Thay đổi )

Connecting to %s