Впервые писав обзор по MonoDevelop в июне 2009 г., я фокусировался на возможностях среды IDE, предназначенной для работы в Ubuntu Linux. В то время некоторые разработчики уже занимались переносом MonoDevelop на платформу Windows, но этот проект еще не был завершен. Теперь он закончен, и после выхода версии 2.2 можно официально заявить, что в Windows есть поддержка MonoDevelop. Новый продукт и выглядит, и работает превосходно.

Пользовательский интерфейс четко продуман. Программа отличается высоким быстродействием и проста в освоении. Редактор исходного кода достоин всяческих похвал, в нем есть всё, чего можно ожидать от современного редактора такого рода, включая автоматическое цветовое выделение синтаксических конструкций и всплывающее меню, подсказывающее завершение начатой конструкции. Это меню, в частности, содержит имена функций, переменных и членов классов из вашей собственной программы (это означает, что данный инструмент аккуратно проводит синтаксический разбор вашего кода).

Имеется окно Solution, в котором показаны все файлы, входящие в ваш проект, есть также полноценный отладчик, предоставляющий стандартные средства типа точек останова и инспекторов контроля состояния. Отладчик даже позволяет помещать выражения в окно просмотра, что, вообще говоря, может вызывать побочные эффекты, поскольку помещение выражения в это окно приводит к вызову данного выражения для исполнения. Иными словами, если вы пишете средство доступа к свойствам объектов и, к примеру, задействуете его в окне просмотра, то при наличии у этого средства побочных эффектов они проявятся в результате вызова кода. Но при аккуратном написании кода, исключающем побочные эффекты, данная функция может стать очень мощным и полезным инструментом отладки.

Можно ли говорить о конкуренции с Visual Studio?

Конечно, у разных читателей этой статьи ожидания относительно продукта вроде MonoDevelop будут разные. Кто-то надеется получить полноценную замену Visual Studio и в результате окажется разочарованным. В Visual Studio есть потрясающая функциональность, которой пока нет в MonoDevelop, — например, непосредственный доступ к SQL Server с возможностью редактирования структуры и содержимого таблиц и хранимых процедур прямо из среды IDE. Так что рассчитывать на бесплатную и адекватную замену Visual Studio не следует (в таком случае скорее имеет смысл обратить внимание на версию Visual Studio Express, которая распространяется бесплатно; но и у нее имеются ограничения по сравнению с полной версией Visual Studio).

А вот если вам нужен удобный инструментарий IDE для разработки .Nnn-приложений, ориентированных на среду GTK или Mono и портируемых на другие ОС, то вы будете довольны. Вы, в частности, сможете создавать продукты для .NET таким образом, чтобы конечным пользователям не нужно было устанавливать Mono у себя. Это тоже неплохая возможность.

Ориентация одновременно на .NET и Mono

Чтобы запустить MonoDevelop 2.2 в Windows, вам сначала придется загрузить и инсталлировать GTK# — пакет, обеспечивающий привязку .NET к GTK+, открытому кроссплатформенному инструментарию для создания ГИП (этот инструментарий широко используется в мире Linux и на ряде других платформ). Инсталляция проходит быстро и без проблем. После этого вы можете загрузить и установить MonoDevelop 2.2, что также не требует много времени и усилий (если вы пишете программы, ориентированные на .NET, а не на Mono, то собственно пакет Mono вам устанавливать не надо).

Имея MonoDevelop, вы можете создавать программы как для Mono, так и для среды Microsoft .NET. Когда вы запускаете откомпилированную программу, появляется меню, позволяющее выбрать платформу, на которой программа должна работать. Правда, чтобы воспользоваться этим, вы должны будете загрузить и инсталлировать полную среду времени исполнения Mono (в противном случае в упомянутом меню не будет ничего кроме Microsoft .NET).

Впрочем, при выборе платформы вы не меняете свою разработку в техническом плане — в любом случае исполнимый файл остается тем же. Единственное, что меняется, — это режим исполнения: либо файл программы функционирует сам по себе (в среде .NET), либо он запускается как параметр вызова программы Mono.exe (на платформе Mono). Для обеих сред исполнимый код компилируется и компонуется одинаково. Дело в том, что этот код фактически представляет собой сборку для .NET, в которой содержится скомпилированный байт-код, хранимый как данные. При запуске исполнимого файла .NET начинает функционировать специальный код запуска, присутствующий и в исполнимой программе, который запускает модуль .NET времени выполнения и затем активирует байт-код, хранящийся в области данных.

Если же вы запускаете программу в Mono.exe, передавая ее этой среде в виде параметра, то код запуска не выполняется. Mono.exe сама запускает модуль времени выполнения, он считывает тот же самый байт-код и запускает его. Вот и всё. (Между прочим, вы можете взять почти любой исполнимый файл .NET и запустить его в Mono, попросту передав среде Mono.exe имя файла в качестве параметра.)

Отличный дизайнер интерфейса

Редактор пользовательского интерфейса весьма хорош. Как и в Visual Studio или другом пакете типа RAD (средство быстрой разработки приложений), например Delphi, вы работаете с окном и инструментальной панелью, причем элементы интерфейса можно перетаскивать с этой панели в окно, а уже затем задавать их свойства. Внизу окна с исходным кодом для классов окон имеются две вкладки — Source Code (исходный код) и Designer (дизайнер). Это не означает, что одни и те же объекты можно увидеть в двух разных режимах. Designer служит для компоновки элементов, Source Code показывает соответствующие фрагменты кода (например, функции обработки событий, связанных с кнопками).

По какой-то причине в Designer по умолчанию у меня не были показаны окна Toolbox (инструментальная панель) и Properties (свойства). Однако их оказалось легко найти в меню View. Если вы привыкли работать с Visual Studio, вас может смутить то, что здесь вы работаете в GTK#, а не в знакомом мире WinForms из Visual Studio. По умолчанию в MonoDevelop целевой платформой является GTK#, и инструментарий настроен соответствующим образом.

Механизм компоновки элементов интерфейса подчиняется правилам GTK#. Нельзя просто перетащить и бросить на форму значок кнопки, сначала необходимо перетащить схему компоновки, а уж потом переносить таким образом отдельные элементы управления. Точно так же, к примеру, невозможно создать новый обработчик событий для кнопки простым щелчком на кнопке, размещенной на форме (такой щелчок ничего не даст). Нужно перейти к окну свойств и выбрать вкладку Signals (в мире GTK принято оперировать понятием сигнала, но по сути сигнал — не что иное, как событие). Но все это не составляет труда: вы двойным щелчком активизируете событие (т. е. сигнал), присваиваете ему имя, после чего программа вызовет окно с кодом и автоматически вставит функцию обработки, которую вы затем можете заполнить нужным кодом.

Если вы внимательно следили за рассказом, то, вероятно, обратили внимание на одну странность, касающеюся GTK# и .NET. Я упомянул, что вы создаете исполнимый файл .NET, который содержит код запуска и откомпилированный байт-код. А что если вы используете GTK#? Ведь при этом вы не имеете дело с компонентом .NET, правда? Да, но проблемы здесь нет: GTK# может выполняться в среде .NET не хуже, чем в Mono. Это значит, что вы скомпилировали приложение с пользовательским интерфейсом GTK#, работающее как в .NET, так и в Mono. Конечно, тут надо соблюдать осторожность: если вы планируете развертывать свое приложение, то должны убедиться, что на соответствующих компьютерах имеется установленный пакет GTK# (хотелось бы потребовать от Microsoft включать GTK# во все комплекты поставки Windows — размечтался, да?).

Разные типы проектов

В числе прочего я смог быстро создать приложение ASP.NET с помощью соответствующего шаблона проекта. Хотя MonoDevelop для Windows пока не поддерживает инструментарий для ASP.NET (такая поддержка, наверное, появится в будущей версии), вы тем не менее можете пользоваться в своем коде всеми обычными серверными элементами управления ASP.NET

Надо признаться, что, будучи разработчиком, использующим платформу ASP.NET, я очень редко задействую инструментальную панель в Microsoft Visual Studio. По большей части код я пишу в файлах C#, так что мне панель в общем-то и не нужна. Впрочем, я знаю, что многие из работающих с ASP.NET не согласились бы со мной в этом вопросе и предпочли бы иметь полноценную инструментальную панель.

А вот из положительных моментов отмечу удобную функцию завершения синтаксических конструкций. Если вы, редактируя файл .aspx, наберете в строке “Вот перечень того, что имелось в Windows-версии MonoDevelop на момент написания статьи: C# (консольное приложение и приложение с интерфейсом GTK# 2.0), ASP.NET (Web-приложение или ASP.NET MVC), Moonlight (пока бета-версия, но уже вполне работоспособная), NUnit, так называемые образцы (для проектов Glade# и Gnome#), IL (промежуточный язык), средство упаковки проектов и проекты для VB.NET, схожие с проектами для C# (в том числе для ASP.NET, но не для MVC).