Для чего нужен MonoDevelop?

NET-приложений в среде Linux. Проект Mono давно перестал быть всего лишь забавной пародией. Для тех, кто еще не сталкивался с этой средой, поясним: Mono — проект по созданию полноценного воплощения системы .NET на базе свободного программного обеспечения. Включает компилятор языка C# (mcs), среду исполнения .NET (mono — с поддержкой JIT и mint — без поддержки JIT), отладчик, а также ряд библиотек, в том числе и поддерживающих ADO.NET и ASP.NET.

Платформа Mono позволяет не только использовать программы, изначально ориентированные на одну операционную систему, но и создавать новые кросс-платформенные клиентские и серверные приложения, в том числе с использованием технологий, присущих UNIX/Linux-системам или по крайней мере ориентированных на них. Если запуск программы, построенной с использованием Windows.Forms в среде Linux, все еще экзотика, то создание консольных приложений на языке C# для работы с серверными службами, базами данных и т.д. давно стало реальностью.

У проекта Mono есть и почитатели, и противники. В настоящий момент разработчики платформы уже на официальном уровне координируют свою работу с сотрудниками Microsoft, хотя, как и любой OpenSource-проект, Mono начинался в духе полнейшей творческой независимости. Возможно, скоро мы увидим сборку Mono от фирмы Novell, на которой будет красоваться знакомая эмблема Microsoft.

Как известно, в Linux существует два мощных графических пакета — Qt и Gtk; оба они поддерживались и на начальной стадии проекта Mono. Пока в проекте еще не было реализации Windows.Forms, разработчику предлагалось использовать пакеты Gtk# или Qt# — оболочки, адаптирующие библиотеки, написанные на Си или C++, для платформы Mono. Чуть позднее, точно так же «вслепую», стало возможно использовать и графическую объектную модель Windows.Forms. Но такая ситуация никак не могла вдохновить программиста вести в Linux большие проекты под Mono. Тем более что на этом фоне заметно выигрывал SharpDevelop — дочерний открытый проект для Windows. Он предоставлял разработчику практически все те возможности, которые доступны Microsoft Visual Studio .NET.

Сейчас Mono поддерживает Microsoft .NET на уровне версий 1.0, 1.1 и 2.0, есть фрагментарная поддержка 3.0. Но это только начало!

Установка для Windows и Linux

Программа MonoDevelop не является частью пакета Mono, по крайней мере для его Windows-версии. В Windows можно отдельно установить SharpDevelop — среду, на удивление похожую на MonoDevelop и обеспечивающую совместимость создаваемых проектов.

Использование программы YaST для установки MonoDevelop

Так вот, установка Mono (вместе с Gtk#) для Windows не представляет никаких проблем, тогда как установка тех же пакетов для Linux зачастую несет с собой море неприятных неожиданностей.

Сейчас многие сборки Linux уже содержат какую-то версию Mono, как правило, не самую последнюю, а иногда и совсем старую. В таком случае придется переустанавливать или доустанавливать необходимые пакеты, а может быть, и собирать их из исходных текстов. Отделаться малой кровью и получить самую свежую конфигурацию для разработки приложений в среде Mono под Linux можно, используя операционную систему openSuse (10.3) . Дело в том, что у openSuse Linux и Mono один и тот же влиятельный родитель — компания Novell, которая и поддерживает оба проекта. Достаточно сказать, что на данный момент готовый пакет бинарных файлов MonoDevelop существует только для этого дистрибутива. Конечно, сама платформа Mono будет прекрасно себя чувствовать и в Fedora, и в Gentoo, и во многих других сборках, только вот для разработки новых приложений с использованием Mono эти сборки менее пригодны: в них отсутствует оперативная поддержка всех последних изменений для Mono и MonoDevelop. Итак, уточним еще раз работающую связку софта: Suse Linux 10.3 (установленная с образа DVD), Mono версии 1.9.1 и MonoDevelop 1.0.0.0.

Чтобы обновить в Suse Linux версии Mono и MonoDevelop, можно воспользоваться удобной программой YaST, перед этим указав ей источник для новых пакетов. К примеру, для x86 (32bit): http://ftp.novell.com/pub/mono/download-stable/suse-103-i586.

Все это можно узнать из инструкций на сайте http://www.go-mono.com/.

По умолчанию система openSuse 10.3 содержит среду Mono 1.2.5 и MonoDevelop 0.13, что никак не соответствует нашей теме. Поэтому, если вы верно указали для YaST путь к хранилищу новых версий, то для установки или обновления Мono останется набрать в консоли:

yast--update mono

Затем, после прохождения диалога установки нового ПО, проделать похожую операцию:

yast--update monodevelop

Создание нового решения в MonoDevelop

На самом деле на сайте http://www.go-mono.com/ находится целая куча пакетов для Mono, и при необходимости можно явно указать программе YaST любой из них (с ключом--update или --install).

Скорее всего в ближайшее время положение изменится, и в следующих подверсиях Suse Linux уже по умолчанию будут присутствовать вполне пригодные к профессиональному использованию Mono и MonoDevelop. Но гарантий, что эти же версии быстро появятся в виде rmp-пакетов для других вариантов Linux, пока нет.

Здравствуй, мир!

Рассмотрим простой пример — короткую программку с использованием Gtk# для Mono (листинг 1).

Окно установки дополнительных модулей для MonoDevelop

Листинг 1

using System;

using Gtk;

namespace test

{

class MainClass

{

public static void Main (string[] args)

{

Application.Init ();

MainWindow win = new MainWindow ();

Button btn = new Button (“Нажми на кнопку!”);

btn.BorderWidth = 14;

win.Add(btn);

win.ShowAll();

Application.Run ();

}

}

}

MonoDevelop в режиме дизайна

Здесь новая кнопка добавляется на форму динамически, хотя в режиме дизайна в MonoDevelop главная форма как бы живет своей жизнью и на ней можно не торопясь размещать необходимые виджеты (Widgets — графические элементы управления) и контейнеры (Containers) примерно так, как это делается в Delphi или Visual Studio .NET.

И еще раз подчеркнем: в MonoDevelop 1.0 можно создать и запустить на сборку и выполнение проект для Windows.Forms, но только без возможностей визуального редактирования формы.

Кстати, в самом начале работы с MonoDevelop 1.0 меня приятно поразило наличие русского языка во всей оконной системе, начиная с меню и заканчивая различными диалоговыми окнами.

Работа с базой данных

Кроме самой возможности работы на платформе со всеми общеизвестными источниками данных, ради удобства программиста в нее добавлена функция просмотра структур баз данных и выполнения SQL-скриптов непосредственно из MonoDevelop.

Просмотр базы данных из MonoDevelop

В качестве примера приведем фрагмент простейшей программы (листинг 2) для вывода в окно данных одной из системных таблиц базы «postgres» (тестовая БД для сервера PostgreSQL, входящая в пакет MonoDevelop).

Листинг 2

//Обрабатывается событие нажатия на кнопку

protected virtual void OnButton1Clicked

(object sender, System.EventArgs e)

{

NpgsqlConnection conn = new

NpgsqlConnection(“Server=127.0.0.1;Port=5432;

User Id=postgres;Password=qwerty;Database=postgres;”);

conn.Open();

IDbCommand comm = conn.CreateCommand();

comm.CommandType = CommandType.Text;

comm.CommandText = “SELECT typname FROM pg_type;”;

IDataReader dr;

dr = comm.ExecuteReader

(CommandBehavior.SingleResult);

int i=0;

while (dr.Read()) {

this.textview3.Buffer.Text = this.

textview3.Buffer.Text + i.ToString()+

“:”+dr[0]+System.Environment.NewLine;

i++;

}

conn.Close();

}

 

Для выполнения этого примера надо загрузить свежий драйвер, обеспечивающий связь с postgresql из Mono (Npgsql2.0beta3-bin-mono2.0.zip).

Все остальные действия по настройке проекта (добавление в проект ссылки на готовую сборку и т.д.) практически те же, что и в Visual Studio .NET.

В результате при нажатии кнопки получим список значений интересующего нас столбца.

Конвертация проекта для других IDE

Версия MonoDevelop 1.0 позволяет экспортировать проект в форматы Visual Studio .NET 2005 и SharpDevelop. Таким образом, вся концепция, заложенная в проект Mono, обеспечивает разработчику совместимость на трех уровнях: бинарные модули, исходные тексты программ и проекты.

* * *

С выходом инструментария для быстрой разработки приложений MonoDevelop 1.0 можно уже уверенно говорить о вступлении всего проекта Mono в зрелую стадию.

Что читать

  • Schoenig H.-J., Geschwinde E.
  • Mono Kick Start.
  • Рихтер Д. CLR via C#. Программирование на платформе
    Microsoft .NET Framework 2.0 на языке C#. СПб.: Питер, 2007.

http://www.monodevelop.com/Сайт, посвященный программе MonoDevelop
http://www.mono-project.com/Сайт проекта Mono
http://www.opennet.ru/docs/RUS/gtk_mono/Сайт проекта Mono
http://www.gtk.org: Сайт проекта Gtk+
http://software.opensuse.org/openSuse Linux
http://www.realcoding.net/article/view/2420: Вводная статья по Mono и Gtk#