MonoDevelop is an open source integrated development environment for Linux platform users. This IDE is a replica of the original Microsoft .NET editor and also contains Windows support. The editor was primarily designed for C# and other .NET languages, but the latest version supports Java, Boo,Python,Vala, C, and C++ also. Its has the following features:
* Advanced Text Editing: Code completion support for C# 3, code templates, code folding.
* Configurable workbench: Fully customizable window layouts, user defined key bindings, external tools.
* Multiple language support: C#, Visual Basic.Net, C/C++ etc.
* Integrated Debugger: For debugging Mono and native applications.
* GTK# Visual Designer: Easily build GTK# applications.
* ASP.NET: Create web projects with full code completion support and test on XSP, the Mono web server.
* Other tools: Source control, makefile integration, unit testing, packaging and deployment, localization.
The MonoDevelop is the core runtime of MonoDevelop. Together with some basic services, it provides the Add-in engine, which is fundamental to the platform, since almost everything in MonoDevelop is an add-in. It not only provides an API for loading add-ins, but also command-line and graphical tools for managing those add-ins.
The Projects API is to develop applications that create, open, change, build and do whatever you need to do with MonoDevelop projects. The MonoDevelop IDE puts together all the previous services to offer a powerful and extensible IDE for managing development projects.
There are many kind of projects you can build upon the MonoDevelop platform. Here are some examples:
* IDE extensions: You can implement add-ins which add new capabilities to the MonoDevelop IDE. Add-ins can create new pads, file viewers, add new menus and menu options, extend the project and class tree, etc.
* Project extensions: You can provide new types of projects with custom file formats and build rules. Any application making use of the Projects API will be able to read and manage your projects.
* Development tools: If you are building a development tool and don't want to integrate it into the IDE, you can create your own GUI (or just console UI) and still take advantage of the Projects API and the add-in engine.
* Other applications: If you just want to implement an application and take advantage of the MonoDevelop add-in engine, you just need to link to the MonoDevelop Core.
There are basically three layers:
* The Core layer provides basic services for applications (not specific to development tools).
* The Projects layer implements the project object model, which development tools can use to organize files.
* The top layer is the IDE itself.
In the Core and Projects layers, GUI dependent functionality is implemented in separate assemblies.
This assembly implements the core runtime of MonoDevelop, which include:
* Add-in engine. It has two parts: the runtime engine (manages loading of add-ins and its extensions), and the add-in management API (manages installation of add-ins).
* Process management: methods for creating and controlling processes, and for creating out-of-process objects.
* Configuration properties: a service for storing configuration information.
* Progress monitoring: A set of classes and interfaces that implement a pattern for monitoring the progress of operations.
This assembly implements the following services:
* Resources: It can be used to get fonts and stock icons. The only extension point of this assembly can be used by add-ins to define new stock icons.
* MessageService: Common methods for displaying error dialogs, warning dialogs, informative dialogs and yes/no question dialogs.
* DispatchService: Provides methods which simplify the thread management in MonoDevelop (see Thread Management).
* Common dialogs to build wizards and options panels.
* Some basic progress monitors.
This assembly implements the project object model of MonoDevelop: the Project class, ProjectFile, Combine, CombineEntry etc. It provides the following functionalities:
* Loading/Saving projects.
* Building projects.
* Executing projects.
* Parse source code files and assemblies, and query class information.