このドキュメントは対象とする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も開発されています。

§1 Monoのインストール (Windowsの場合)

ここでは、Windows上にMonoをインストールしたときの手順を示します。

  1. Monoのダウンロードページに行き、Windows用のインストーラをダウンロードする(Windowsのロゴと、Windows installerという風に書かれている部分)。
  2. ダウンロードしてきたインストーラを起動する。
  3. 「Welcome to the Mono Setup Wizard」の画面で「Next」をクリック。
  4. 「Choose Install Location」の画面でインストール先を選択した後、「Install」をクリック。
  5. インストールが実行される。
  6. 完了。

§2 Monoのインストール (RedHat Linux 9の場合)

ここでは、RedHat Linux 9上にMonoをインストールしたときの手順を示します。 今回はRPMパッケージを用いてインストールしました。

  1. RedHat Linux用のMonoパッケージのダウンロードページに行き、以下のパッケージをダウンロードする。 ([]内はパッケージのサイズ)
    1. 「Mono Runtime and C# compiler」の項目
      1. mono-core-0.91-0.ximian.6.3.i386.rpm [4.2M]
      2. mono-core-devel-0.91-0.ximian.6.3.i386.rpm [511.5k]
      3. mono-runtime-devel-0.91-0.ximian.6.3.i386.rpm [14.0M]
    2. 「Dependencies」の項目
      1. icu-2.6.1-1.ximian.6.5.i386.rpm [228.8k]
      2. libicu-devel-2.6.1-1.ximian.6.5.i386.rpm [462.5k]
      3. libicu26-2.6.1-1.ximian.6.5.i386.rpm [4.4M]
    3. 「Cairo and its dependencies」の項目
      1. cairo-0.1.22-0.ximian.6.2.i386.rpm [72.2k]
      2. cairo-devel-0.1.22-0.ximian.6.2.i386.rpm [885.5k]
      3. libpixman-0.1.1-0.ximian.6.0.i386.rpm [36.3k]
      4. libpixman-devel-0.1.1-0.ximian.6.0.i386.rpm [133.1k]
    4. 「Mono Stack」の項目
      1. mono-posix-0.91-0.ximian.6.3.i386.rpm [16.2k]
    5. 「Optional locales」の項目
      1. mono-locale-cjk-0.91-0.ximian.6.3.i386.rpm [229.8k]
  2. 次の順でパッケージをインストールする。
    1. libicu26-2.6.1-1.ximian.6.5.i386.rpm
    2. libicu-devel-2.6.1-1.ximian.6.5.i386.rpm
    3. icu-2.6.1-1.ximian.6.5.i386.rpm
    4. libpixman-0.1.1-0.ximian.6.0.i386.rpm
    5. libpixman-devel-0.1.1-0.ximian.6.0.i386.rpm
    6. cairo-0.1.22-0.ximian.6.2.i386.rpm
    7. libpixman-devel-0.1.1-0.ximian.6.0.i386.rpm
    8. mono-posix-0.91-0.ximian.6.3.i386.rpm, mono-core-0.91-0.ximian.6.3.i386.rpm (このインストールは同時に行う必要があるので注意。)
    9. mono-runtime-devel-0.91-0.ximian.6.3.i386.rpm
      1. インストールコマンド
        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
        
  1. 完了

§3 コンパイラの動作テスト

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

§4 Hello, Mono!を表示させる

コンパイラが無事動作したら、試しに「Hello, Mono!」と表示するプログラムを作ってみます。 HelloMono.csというファイルを作成し、次のようなコードを記述します。

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!

このように出力されれば、問題なく実行されています。

§5 Monoと.NET Framework

mcsでコンパイルして出来たファイルは、MonoだけでなくWindows上の.NET Frameworkでも動作します。 試しに先ほど作ったHelloMono.exeを.NET Framework上で実行させてみます。

> HelloMono.exe
Hello, Mono!

この実行結果から分かるとおり、Monoでコンパイルしたアセンブリは.NET Framework上でもそのまま動作します。 また、次のようなVB.NETのコードをコンパイルし、それがMonoで動作するかも試してみます。

HelloMono.vb
Imports System

Public Class HelloMono

    Public Shared Sub Main()

        Console.WriteLine( "Hello, Mono!" )

    End Sub

End Class
vbcでコンパイルし、monoで実行
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でも同じように動作します。

§6 MonoでWindowsアプリケーション (Windowsの場合)

mcs ではWindows Formsをコンパイル出来ますが、パッケージとでインストールされる物だけでは実行は出来ません。 Windows Formsを使ったアプリケーションを実行するには、WineLibが必要なようですが詳しく調べていません。 わかり次第追記します。

§7 MonoでWindowsアプリケーション (RedHat Linux9の場合)

実行するにはWineやGDI+など、いくつかパッケージを追加インストールしなければなりません。 ダウンロードするパッケージを含め、インストール方法を説明します。

  1. RedHat Linux用のMonoパッケージのダウンロードページに行き、以下のパッケージをダウンロードする。 ([]内はパッケージのサイズ)
    1. 「Microsoft .NET stack」の項目
      1. mono-drawing-0.91-0.ximian.6.3.i386.rpm [247.0k]
      2. mono-window-forms-0.91-0.ximian.6.3.i386.rpm [526.2k]
      3. libgdiplus-0.3-0.ximian.6.1.i386.rpm [70.6k]
      4. libgdiplus-devel-0.3-0.ximian.6.1.i386.rpm [2.1M]
    2. 「Microsoft .NET stack」にある「Preview components」の項目
      1. wine-20040408-1rh9winehq.i386.rpm [9.3M]
      2. winelib-0.2-0.ximian.6.2.i386.rpm [26.5k]
    3. 次の順でパッケージをインストールする。
      1. libgdiplus-0.3-0.ximian.6.1.i386.rpm
      2. libgdiplus-devel-0.3-0.ximian.6.1.i386.rpm
      3. mono-drawing-0.91-0.ximian.6.3.i386.rpm
      4. wine-20040408-1rh9winehq.i386.rpm
      5. winelib-0.2-0.ximian.6.2.i386.rpm
      6. mono-window-forms-0.91-0.ximian.6.3.i386.rpm
  2. インストール
    1. インストールコマンド
      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
      
  1. 完了。

インストールが終わったところで、試しに次のようなコードをコンパイル・実行してみます。

WinForms.cs
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

うまく実行されれば次のように表示されると思います。