このドキュメントは対象とするMonoのバージョンが古くなっています。 より新しいバージョンについては以下のページを参照してください。
Monoとは同名のプロジェクトによって開発されている、UNIX/Linux上で動作する.NET互換の実行環境です。 Monoオープンソースで開発されているため、誰でもソースコードを入手することが出来、自由にMonoを使うことが出来ます。 現在Beta1がリリースされていて、この時点でcorlib、 System、System.Xml、System.Web、System.Drawingなどの各ライブラリの実装率(使えるクラス・メソッドの率)は総じて90%を超えています。 また、Windows Formsも77%が実装済みとなっているのであまり特殊な機能を使ったものではない限り、ウィンドウを用いたアプリケーションも動作します。
また、Monoと同時にC#コンパイラであるMCSも公開されています。 これを利用することによってLinux上でC#コードをコンパイルし、実行するということが出来るようになっています。 また、Visual Basic .NET用のコンパイラであるmbasも開発されています。
Monoのインストール (Windowsの場合)
ここでは、Windows上にMonoをインストールしたときの手順を示します。
- Monoのダウンロードページに行き、Windows用のインストーラをダウンロードする(Windowsのロゴと、Windows installerという風に書かれている部分)。
- ダウンロードしてきたインストーラを起動する。
- 「Welcome to the Mono Setup Wizard」の画面で「Next」をクリック。
- 「Choose Install Location」の画面でインストール先を選択した後、「Install」をクリック。
- インストールが実行される。
- 完了。
Monoのインストール (RedHat Linux 9の場合)
ここでは、RedHat Linux 9上にMonoをインストールしたときの手順を示します。 今回はRPMパッケージを用いてインストールしました。
-
RedHat Linux用のMonoパッケージのダウンロードページに行き、以下のパッケージをダウンロードする。 ([]内はパッケージのサイズ)
- 「Mono Runtime and C# compiler」の項目
- mono-core-0.91-0.ximian.6.3.i386.rpm [4.2M]
- mono-core-devel-0.91-0.ximian.6.3.i386.rpm [511.5k]
- mono-runtime-devel-0.91-0.ximian.6.3.i386.rpm [14.0M]
- 「Dependencies」の項目
- icu-2.6.1-1.ximian.6.5.i386.rpm [228.8k]
- libicu-devel-2.6.1-1.ximian.6.5.i386.rpm [462.5k]
- libicu26-2.6.1-1.ximian.6.5.i386.rpm [4.4M]
- 「Cairo and its dependencies」の項目
- cairo-0.1.22-0.ximian.6.2.i386.rpm [72.2k]
- cairo-devel-0.1.22-0.ximian.6.2.i386.rpm [885.5k]
- libpixman-0.1.1-0.ximian.6.0.i386.rpm [36.3k]
- libpixman-devel-0.1.1-0.ximian.6.0.i386.rpm [133.1k]
- 「Mono Stack」の項目
- mono-posix-0.91-0.ximian.6.3.i386.rpm [16.2k]
- 「Optional locales」の項目
- mono-locale-cjk-0.91-0.ximian.6.3.i386.rpm [229.8k]
- 「Mono Runtime and C# compiler」の項目
- 次の順でパッケージをインストールする。
- libicu26-2.6.1-1.ximian.6.5.i386.rpm
- libicu-devel-2.6.1-1.ximian.6.5.i386.rpm
- icu-2.6.1-1.ximian.6.5.i386.rpm
- libpixman-0.1.1-0.ximian.6.0.i386.rpm
- libpixman-devel-0.1.1-0.ximian.6.0.i386.rpm
- cairo-0.1.22-0.ximian.6.2.i386.rpm
- libpixman-devel-0.1.1-0.ximian.6.0.i386.rpm
- mono-posix-0.91-0.ximian.6.3.i386.rpm, mono-core-0.91-0.ximian.6.3.i386.rpm (このインストールは同時に行う必要があるので注意。)
- mono-runtime-devel-0.91-0.ximian.6.3.i386.rpm
- インストールコマンド
rpm -Uvh libicu26-2.6.1-1.ximian.6.5.i386.rpm rpm -Uvh libicu-devel-2.6.1-1.ximian.6.5.i386.rpm rpm -Uvh icu-2.6.1-1.ximian.6.5.i386.rpm rpm -Uvh libpixman-0.1.1-0.ximian.6.0.i386.rpm rpm -Uvh libpixman-devel-0.1.1-0.ximian.6.0.i386.rpm rpm -Uvh cairo-0.1.22-0.ximian.6.2.i386.rpm rpm -Uvh libpixman-devel-0.1.1-0.ximian.6.0.i386.rpm rpm -Uvh mono-posix-0.91-0.ximian.6.3.i386.rpm mono-core-0.91-0.ximian.6.3.i386.rpm rpm -Uvh mono-runtime-devel-0.91-0.ximian.6.3.i386.rpm
- 完了
コンパイラの動作テスト
Monoのインストールが完了したら、mcsコンパイラが正しく動作するかテストしてみます。 コンソール(Linux)・コマンドライン(Windows)で次のように入力します。
mcs --about
ここで、次のような結果が出力されれば問題なくインストールされています。
The Mono C# compiler is (C) 2001, 2002, 2003 Ximian, Inc. The compiler source code is released under the terms of the GNU GPL For more information on Mono, visit the project Web site http://www.go-mono.com The compiler was written by Miguel de Icaza, Ravi Pratap and Martin Baulig
Hello, Mono!を表示させる
コンパイラが無事動作したら、試しに「Hello, Mono!」と表示するプログラムを作ってみます。 HelloMono.csというファイルを作成し、次のようなコードを記述します。
using System;
public class HelloMono
{
public static void Main()
{
Console.WriteLine( "Hello, Mono!" );
}
}
ソースコードが完成したら、コンパイルしてみます。 コンパイルするには次のようにコマンドを入力します。
mcs HelloMono.cs
コンパイルに成功すると「Compilation succeeded」と表示されます。 次に完成したアセンブリを実行してみます。 実行する場合は「mono (アセンブリ名)」とします。
$ mono HelloMono.exe Hello, Mono!
このように出力されれば、問題なく実行されています。
Monoと.NET Framework
mcsでコンパイルして出来たファイルは、MonoだけでなくWindows上の.NET Frameworkでも動作します。 試しに先ほど作ったHelloMono.exeを.NET Framework上で実行させてみます。
> HelloMono.exe Hello, Mono!
この実行結果から分かるとおり、Monoでコンパイルしたアセンブリは.NET Framework上でもそのまま動作します。 また、次のようなVB.NETのコードをコンパイルし、それがMonoで動作するかも試してみます。
Imports System
Public Class HelloMono
Public Shared Sub Main()
Console.WriteLine( "Hello, Mono!" )
End Sub
End Class
D:\>vbc HelloMono.vb Microsoft(R) Visual Basic .NET Compiler version 7.10.3052.4 for Microsoft(R) .NET Framework version 1.1.4322.573 Copyright (C) Microsoft Corporation 1987-2002. All rights reserved. D:\>HelloMono.exe Hello, Mono! D:\>mono HelloMono.exe Hello, Mono!
この通り、VB.NETのコードをコンパイルしたものであっても、Monoでも.NET Frameworkでも同じように動作します。
MonoでWindowsアプリケーション (Windowsの場合)
mcs ではWindows Formsをコンパイル出来ますが、パッケージとでインストールされる物だけでは実行は出来ません。 Windows Formsを使ったアプリケーションを実行するには、WineLibが必要なようですが詳しく調べていません。 わかり次第追記します。
MonoでWindowsアプリケーション (RedHat Linux9の場合)
実行するにはWineやGDI+など、いくつかパッケージを追加インストールしなければなりません。 ダウンロードするパッケージを含め、インストール方法を説明します。
-
RedHat Linux用のMonoパッケージのダウンロードページに行き、以下のパッケージをダウンロードする。 ([]内はパッケージのサイズ)
- 「Microsoft .NET stack」の項目
- mono-drawing-0.91-0.ximian.6.3.i386.rpm [247.0k]
- mono-window-forms-0.91-0.ximian.6.3.i386.rpm [526.2k]
- libgdiplus-0.3-0.ximian.6.1.i386.rpm [70.6k]
- libgdiplus-devel-0.3-0.ximian.6.1.i386.rpm [2.1M]
- 「Microsoft .NET stack」にある「Preview components」の項目
- wine-20040408-1rh9winehq.i386.rpm [9.3M]
- winelib-0.2-0.ximian.6.2.i386.rpm [26.5k]
- 次の順でパッケージをインストールする。
- libgdiplus-0.3-0.ximian.6.1.i386.rpm
- libgdiplus-devel-0.3-0.ximian.6.1.i386.rpm
- mono-drawing-0.91-0.ximian.6.3.i386.rpm
- wine-20040408-1rh9winehq.i386.rpm
- winelib-0.2-0.ximian.6.2.i386.rpm
- mono-window-forms-0.91-0.ximian.6.3.i386.rpm
- 「Microsoft .NET stack」の項目
- インストール
-
-
インストールコマンド
rpm -Uvh libgdiplus-0.3-0.ximian.6.1.i386.rpm rpm -Uvh libgdiplus-devel-0.3-0.ximian.6.1.i386.rpm rpm -Uvh mono-drawing-0.91-0.ximian.6.3.i386.rpm rpm -Uvh wine-20040408-1rh9winehq.i386.rpm rpm -Uvh winelib-0.2-0.ximian.6.2.i386.rpm rpm -Uvh mono-window-forms-0.91-0.ximian.6.3.i386.rpm
-
- 完了。
インストールが終わったところで、試しに次のようなコードをコンパイル・実行してみます。
using System;
using System.Drawing;
using System.Windows.Forms;
public class Test : Form
{
private Button button;
private CheckBox checkBox;
private RadioButton radioButton;
private Label label;
private PictureBox pictureBox;
public Test()
{
this.ClientSize = new Size( 640, 480 );
this.Text = "Windows forms";
button = new Button();
button.Location = new Point( 10, 10 );
button.Size = new Size( 100, 25 );
button.Text = "Click me";
button.Click += new EventHandler( Button_Click );
label = new Label();
label.Location = new Point( 10, 40 );
label.Size = new Size( 200, 20 );
label.Text = "Windows Forms";
radioButton = new RadioButton();
radioButton.Location = new Point( 300, 10 );
radioButton.Size = new Size( 200, 20 );
radioButton.Text = "Radio button";
radioButton.Checked = true;
checkBox = new CheckBox();
checkBox.Location = new Point( 300, 50 );
checkBox.Size = new Size( 200, 20 );
checkBox.Text = "Check box";
checkBox.Checked = true;
pictureBox = new PictureBox();
pictureBox.Location = new Point( 30, 120 );
pictureBox.Size = new Size( 240, 180 );
pictureBox.Paint += new PaintEventHandler( PictureBox_Paint );
Controls.AddRange( new Control[]
{
button,
label,
radioButton,
checkBox,
pictureBox
}
);
}
public static void Main()
{
Application.Run( new Test() );
}
private void Button_Click( object sender, EventArgs e )
{
MessageBox.Show( "clicked", "test" );
}
private void PictureBox_Paint( object sender, PaintEventArgs e )
{
e.Graphics.DrawRectangle( Pens.Red, new Rectangle( 10, 10, 50, 50 ) );
e.Graphics.DrawRectangle( Pens.Blue, new Rectangle( 40, 40, 120, 80 ) );
e.Graphics.DrawString( "Windows forms", Control.DefaultFont,
Brushes.Green, new PointF( 30.0f, 20.0f ) );
}
}
コンパイル・実行は次のようにします。
$ mcs -r:System.Windows.Forms -r:System.Drawing WinForms.cs Compilation succeeded $ mono WinForms.exe
うまく実行されれば次のように表示されると思います。
