Для чего нужен 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 и обеспечивающую совместимость создаваемых проектов.
Так вот, установка 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
На самом деле на сайте http://www.go-mono.com/ находится целая куча пакетов для Mono, и при необходимости можно явно указать программе YaST любой из них (с ключом--update или --install).
Скорее всего в ближайшее время положение изменится, и в следующих подверсиях Suse Linux уже по умолчанию будут присутствовать вполне пригодные к профессиональному использованию Mono и MonoDevelop. Но гарантий, что эти же версии быстро появятся в виде rmp-пакетов для других вариантов Linux, пока нет.
Здравствуй, мир!
Рассмотрим простой пример — короткую программку с использованием Gtk# для Mono (листинг 1).
Листинг 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 главная форма как бы живет своей жизнью и на ней можно не торопясь размещать необходимые виджеты (Widgets — графические элементы управления) и контейнеры (Containers) примерно так, как это делается в Delphi или Visual Studio .NET.
И еще раз подчеркнем: в MonoDevelop 1.0 можно создать и запустить на сборку и выполнение проект для Windows.Forms, но только без возможностей визуального редактирования формы.
Кстати, в самом начале работы с MonoDevelop 1.0 меня приятно поразило наличие русского языка во всей оконной системе, начиная с меню и заканчивая различными диалоговыми окнами.
Работа с базой данных
Кроме самой возможности работы на платформе со всеми общеизвестными источниками данных, ради удобства программиста в нее добавлена функция просмотра структур баз данных и выполнения SQL-скриптов непосредственно из 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#