MonoDevelop 1.0 Released
The MonoDevelop team is proud to announce the release of MonoDevelop 1.0.
MonoDevelop is a GNOME IDE primarily designed for C# and other .NET languages. MonoDevelop enables developers to quickly write desktop and ASP.NET Web applications on Linux and Mac OS X. MonoDevelop makes it easy for developers to port .NET applications created with Visual Studio to Linux and Mac OS X and to maintain a single code base for all three platforms.
The main features of MonoDevelop are:
- Customizable workbench, including custom key bindings, custom layouts, and external tools.
- Support for several languages, with C#, VB.NET and C/C++ support included, and Boo and Java (IKVM) support available as separate add-ins.
- Support for code completion and type information tooltips.
- Refactoring operations to simplify changes like renaming types and type members, encapsulating fields, overriding methods, or implementing interfaces.
- Code navigation operations such as jumping to variable definitions and finding derived classes.
- Easy to use GUI designer for Gtk# applications, also supporting the creation and management of custom Gtk# widget libraries.
- Integrated source code version control, with support for Subversion.
- Integrated unit testing based on NUnit.
- Support for ASP.NET projects, allowing web projects can be built and tested on XSP.
- Integrated database explorer and editor (beta).
- Integration with Monodoc, to provide documentation about classes.
- Support for makefiles, both generation and synchronization.
- Support for Microsoft Visual Studio project formats.
- Packaging system that allows generating tarballs, source code and binary packages.
- Command line tools for building and managing projects.
- Support for localization projects.
- Extensible add-in architecture.
The IDE Workbench
MonoDevelop has a highly customizable workbench, based on the traditional user interface model used by most IDEs. The workbench is composed of several pads, which can be moved around by the user and docked in any place. The user can choose which pads to show, and pads can be set to auto-hide mode or floating mode. Other features include:
Projects and Languages
The following table shows the languages supported by MonoDevelop:
|Language||Compilation||Code Completion||Class tree||Refactory Operations||Visual Designer|
|Visual Basic.NET||Yes||Yes (no generics)||Yes||No||No|
|C/C++||Yes||Yes (based on ctags)||Yes (based on ctags)||No||No|
|Boo||Yes||Yes (no generics)||Yes||No||No|
|Other (Generic Project)||Yes||No||No||No||No|
Managed Language Projects
MonoDevelop allows creating different types of managed executables and libraries. Here is a list of the most important features:
- There are several templates for the different kind of projects: Console project, library, Gtk# application, etc.
- The build is fully configurable and it is possible to create different build profiles or configurations with specific build options.
- The Edit References window allows selecting the assemblies that the project requires. The window shows a list of assemblies from all packages installed in the system.
- Satellite assemblies for localized resources are automatically generated.
- Support for assembly signing.
- MonoDevelop allows targeting different runtime versions: 1.1, 2.0 and Moonlight.
The C/C++ project type allows compiling C or C++ code using the GNU gcc or g++ compilers. The compilation and linking is fully configurable, including warning level, optimization level, target type (executable, static or shared library), define symbols, linked libraries, library paths, include paths and arbitrary additional arguments.
Integration with pkg-config enables installed packages such as GTK+ and SDL to be easily added as references. Library projects can also export pkg-config packages for consumption by other projects or for distribution.
The class pad is fully supported (via exuberant ctags), and can be used to browse the defined symbols and jump to their declaration with a simple double-click. This also provides limited code completion in the text editor.
Precompiled headers and dependency tracking are used to speed up the compilation process, and ccache may be used for an additional speed boost.
Source Code Editing and Navigation
MonoDevelop integrates many tools, commands and automations to simplify the editing and browsing of the code. Here is a list of the most important ones:
Visual Designer for GtkSharp
Easy to use GUI designer for Gtk# applications. Supports the creation and management of custom Gtk# widget libraries.
|Integrated Visual Designer
The GTK# visual designer is integrated in the IDE workbench. It provides a customizable widget toolbox, a property grid for editing wiget properties, and a widget tree for browsing the structure of a window. The designer generates the required code behind the scenes, using partial classes.
See screencast: Creating a simple user interface with MonoDevelop.
|Menu and toolbar designer
The menu and toolbar designers are based on the UIManager/Action/ActionGroup model. Building a menu is really easy and 'visual'. You only need to add a menu bar to the window and start writing options. The menu designer looks like a regular menu, but clicking on a menu item makes it selected, so that you can change its properties using the Properties pad. Clicking again on the menu item when it is selected will start the editing mode of the menu item, in which you can change the label or the icon.
When you are creating menu items in this way, the designer creates Actions for each menu item at the same time. Those actions are added to the window's ActionGroup.
MonoDevelop can manage icons to be included in a project. The idea is that you select some images, give them an ID, and MonoDevelop will generate a Gtk.IconFactory for you and will register the icons there. You can then use that ID when creating buttons or anything that requires a stock id.
The toolbar located on top of the designer shows some buttons for quickly setting some widget properties. Those buttons change depending on the selected widget.
MonoDevelop allows creating custom widget libraries. Widgets from widget libraries will be shown in the toolbox, and can be dropped to any window just like the stock widgets. Custom widgets can be created using the visual designer, or by just creating a subclass of a stock GTK# widget (in the latter case, the widget must be explicitly exported in the project options dialog).
See screencast: Creating custom widgets with MonoDevelop.
|Support for targeting multiple GTK# versions
MonoDevelop supports targeting GTK# versions other than the ones installed in the system. For example, in a system running GTK# 2.10 it is possible to select GTK# 2.4 as target version, and the generated application will be linked against the 2.4 libraries.
Support for those additional GTK# versions must be installed using the add-in manager.
MonoDevelop provides support for creating ASP.NET based web sites. Although there is no visual designer for the web pages, the IDE provides a specific project type which simplifies the development of this kind of web sites.
Working with Makefiles is easy with MonoDevelop:
Visual Studio Support
MonoDevelop has native support for Visual Studio 2005 solutions/projects. You can directly load VS2005 solutions/projects and work with them. Any changes made are written back to the project files. Currently it supports loading C# (.csproj) and VB.NET (.vbproj) projects.
This support is limited to Files, References, Configurations and Compiler options. No custom msbuild tasks are supported.
This native support is not available for Visual Studio 2003 projects. When opening a VS2003 project, MonoDevelop will offer the possibility of converting it to the native MonoDevelop format or to the VS2005 format.
MonoDevelop integrates support for several common version control operations. Right now only Subversion repositories can be used.
See the screencast Using Version Control in MonoDevelop for a live demonstration of the main features, which are:
MonoDevelop features integrated unit testing based on NUnit:
Packaging and Deployment
MonoDevelop provides several options for packaging and deploying projects.
|Create Package Command
The Create Package command allows creating packages for an existing project. It supports three kinds of packages:
See screencast: Building packages with MonoDevelop
A packaging project can be added to a solution and can define several packages to be built for the solution. Each package can be of different kind (archives, tarballs) and can include different project selections.
The packaging system takes advantages of the extensible deployment model implemented in MonoDevelop, which allows specifying the target directory of project files. For example, it is possible to specify that a file needs to be copied to the libs directory, or to the shared directory.
MonoDevelop includes options to easily integrate applications in the Linux desktop. It can automatically:
The localization add-in simplifies the work of generating and maintaining translations of projects based on gettext.
The add-in provides a new type of project: a Translation Project. It can be added to a solution to provide localization support to all projects in the solution. Adding, compiling and updating the translations is done via the context menu of the translation project in the project browser. When running the Update command, all source files are scanned for translatable strings, and all language files are updated. The add-in also provides a simple .po file editor.
Documentation about class libraries is provided by Monodoc. The F1 help key is context sensitive, and will show the documentation, for the type upon which the text cursor is positioned, in MonoDoc.
Command line tools
Several MonoDevelop features are available as command line tools. All tools can be executed using the command 'mdtool'.
Instructions about how to get MonoDevelop are available in MonoDevelop’s Download page.
Aaron Bockover, Alberto Paro, Alejandro Serrano, Alexandre Gomes, Alex Graveley, Andrés G. Aragoneses, Andre Filipe de Assuncao e Brito, Antonio Ognio, Ankit Jain, Ben Maurer, Ben Motmans, Christian Hergert, Daniel Kornhauser, Daniel Morgan, David Makovský, Eric Butler, Erik Dasque, Franciso Martinez, Geoff Norton, Gustavo Giráldez, Iain McCoy, Inigo Illan, Jacob Ilsø Christensen, James Fitzsimons, Jeff Stedfast, Jérémie Laval, Jeroen Zwartepoorte, John BouAnton, John Luke, Joshua Tauberer, Jonathan Hernández Velasco, Levi Bard, Lluis Sanchez Gual, Marc Christensen, Marcos David Marín Amador, Martin Willemoes Hansen, Marek Sieradzki, Matej Urbas, Maurício de Lemos Rodrigues Collares Neto, Michael Hutchinson, Miguel de Icaza, Mike Krüger, Muthiah Annamalai, Nick Drochak, nricciar, Paco Martínez, Pawel Rozanski, Pedro Abelleira Seco, Peter Johanson, Philip Turnbull, Richard Torkar, Rolf Bjarne Kvinge, Rusty Howell, Scott Ellington, Thomas Wiest, Todd Berman, Vincent Daron, Vinicius Depizzol, Wade Berrier, Yan-ren Tsai and Zach Lute.
This list may not be complete, some contributors who sent patches by email or via our bugzilla may be missing. Your work is still greatly appreciated. If your name was left off the list, it was not intentional, please send an email to the MonoDevelop mailing list and it will be corrected as soon as possible.
|Catalan||Jonathan Hernández Velasco, Jordi Mas i Hernández|
|Danish||Martin Willemoes Hansen, Jacob Ilsø Christensen|
|German||Gustav Schauwecker, Martin Dederer|
|Spanish||Antonio Ognio, Alejandro Serrano, Andrés G. Aragoneses|
|French||Vincent Daron, Nicolas Favre-Félix|
|Galician||Ignacio Casal Quinteiro|
|Italian||Alberto Paro, Milo Casagrande|
|Portuguese||Vitor Hugo Barros|
|Portuguese (Brazil)||Mauricio de Lemos Rodrigues Collares Neto, Andre Filipe de Assuncao e Brito, Rafael Teixeira|
|Russian||Maxim Krentovskiy, Semyon Soldatov, Daniel Abramov|
|Chinese (China)||Yu Lindong, Funda Wang|
|Chinese (Taiwan)||Yan-ren Tsai|
To all of our wonderful testers, who had the patience to use unstable versions of MonoDevelop for everyday use, and managed to post nice bug reports.
To Mike Krüger and the rest of the AlphaSierraPapa team for giving us a great codebase to start from, and continuing improvements.
To Pedro Abelleira, Todd Berman, John Luke, and other early contributors who started this adventure 4 years ago, and who believed in the feasibility of the project.
To all of the active and not so active (we miss you!) MonoDevelop developers.