Release notes for MonoDevelop 0.12

MonoDevelop 0.12 has been released. MonoDevelop is a GNOME IDE primarily designed for C# and other .NET languages.

This release contains lots of improvements, new features and bug fixes. Read below.

Installing MonoDevelop

MonoDevelop Dependencies

Compiling the following order will yield the most favorable response.

  • Gtk# 2.4.2
  • Gtksourceview#-2.0 0.10
  • Monodoc 1.0 (requires gtk-sharp 1.0)
  • Gecko#-2.0 0.10
  • MonoDevelop 0.12 Source

You can download MonoDevelop 0.12 source from here. The Mono download site contains packages for everything for many popular distros. You can also check the mono redcarpet channel.

This release of MonoDevelop needs at least Mono 1.1.10 to run.

New Features

Code completion and text editor improvements

Code completion now is more stable and supports the C# 2.0 syntax (including generics), thanks to the new parser based on NRefactory. This parser is already integrated in the C# language binding (Matej Urbas).

There are other nice improvements:

  • When the code completion window is shown and the parser database is still being generated, the completion window will now show a message saying that class information is being gathered.
  • The editor now shows a tooltip with identifier information when hovering over the source code.
  • Class information is now shown using the correct language syntax. That is, if you are editing a Boo file, method documentation will be shown using the Boo syntax (Philip Turnbull)
Code completion with generics The parser database is being generated Source code tooltip

“Open With” menu

The new “Open With” menu allows opening a project file using different internal editors or external applications.

Open With menu

Autotools add-in

The Autotools add-in (contributed by Scott Ellington) can create a complete set of autotools scripts for a solution. It provides the capabilities to configure and build as well as the ‘make install’, ‘make uninstall’, ‘make clean’, ‘make dist’, and ‘make distcheck’ commands. Additionally, solutions can be deployed directly to a distributable tarball from within MonoDevelop.

Other features:

  • solution configurations are preserved. For example, ‘./configure –enable-debug’ would build based on the settings for the ‘Debug’ configuration within the solution.
  • A pkg-config (pc) file is created and deployed for every library (dll) in the solution. (This can be disabled)
  • A single pkg-config (pc) file can optionally be created which lists all libraries (dlls) in the solution. (This is disabled by default)

The autotools add-in

New deployment infrastructure

MonoDevelop has a new extensible deployment infrastructure, which allows specifying deploy targets for solutions and projects. In this release there is a simple deployment target which copies the project files to a specified directory, and a more complex one which generates a tarball for the project (based on the Autotools add-in).

The deployment service is extensible, and we’d like to provide more deployment targets in the future.

Deployment configuration The deploy commands

Add-in management

There are two useful improvements in the add-in engine:

  • Enabling/disabling add-ins: It is now possible to disable add-ins using the add-in management window.
  • Add-in directories: new add-in directories can now be easily registered and unregistered. New directories can be registered using the setup tool: mdtool setup dir-link /usr/lib/myaddin
    You can use ‘dir-unlink’ to remove a directory, or ‘dir-list’ to see registered directories. In the future MonoDevelop will have add-ins with native dependencies, and those add-ins will need to be installed using its own package. The ‘dir-link’ command is a convenient way of installing add-ins in directories other than the default MonoDevelop directory.

Disabling an add-in

Support for multiple text file encodings

MonoDevelop can now read and write files using encodings other than UTF-8. The Open and Save file dialogs now have a ‘Character encoding’ combo box which allows selecting the encoding to use.

By default, MonoDevelop will auto-detect the encoding. However, only some pre-selected encodings will be checked for auto-detection. Those encodings can be selected using the Encoding Selector dialog shown when clicking on the “Add or Remove” command.

Encoding options in the file open dialog Encoding selection dialog

ASP.NET support

This release of MonoDevelop contains a stable subset of the ASP.NET support implemented by Michael Hutchinson, sponsored by Google as part of their Summer of Code. There is a new ASP.NET project type, with a selection of file templates, available for all of the .NET languages supported by MonoDevelop. This project type recognises CodeBehind files, autogenerates fields in CodeBehind classes when compiling the CodeBehind dll, and can preview the application in a web browser using XSP.

Nemerle add-in

Alejandro Serrano has contributed a Nemerle language binding for MonoDevelop. It supports creation of Nemerle projects, compilation and code completion. This add-in requires Nemerle from HEAD, and it is not included in the binary packages. To try it, you’ll need to build MonoDevelop from source using the –enable-nemerle configuration option.

Other features

  • New commands for converting text to uppercase or lowercase (David Makovský)
  • New build action for project files. In the solution pad, when a file is set to “Deploy” in the Include submenu, it will be copied to the output directory. It’s an useful option for deploying configuration files together with the binaries.
  • New file template which generates the skeleton of an unit test.
  • The “Go to declaration” command now works for local variables.
  • mds and mdp files will now launch MonoDevelop when opened from desktop.

New features in the GTK designer

MonoDevelop new features a new menu and toolbar designer. The designer is based on the UIManager/Action/ActionGroup model, and it has been a real challenge to make easy building menus, and at the same time take advantage of all features this model provides.

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 it will select it, so 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, at the same time the designer creates Actions for each menu item. Those actions are added to the window's default ActionGroup.

This default action group is local to the window, which means that handlers for action signals will be added to the window's class, and fields for the actions will be added also to the window class. It also means that if you create another window with another menu bar, you won't be able to reuse the actions from another window. In case you want to share actions between windows, you'll need to create a global action group. In the New File dialog there is a new icon for creating global action groups. A global action group is not bound to a specific window, but it has its own class, and signals and fields are mapped there. Actions belonging to global action groups will always be shown in the palette, so you can add them to any window.

The new menu designer The toolbar designer

Stock icons

Stetic/MonoDevelop can now manage icons to be included in a project. The idea is that you select some images, give them an ID, and Stetic will generate a Gtk.IconFactory for you and will register the icons there. You can then use that ID when creating buttons or whatever that requires an stock id. There is also an improved stock icon selector.

The icon dialog

New widget toolbar

The toolbar located on top of the designer now shows some buttons for quickly setting some widget properties. Those buttons change depending on the selected widget. For example, this is what you see when a Gtk.Label is selected:

The widget bar showing commands for a Gtk.Label

Bug Fixes

Here is a list of all bugs fixed in this release:

  • 76813 Monodevelop 0.8/0.9 crashes at startup (initializing Gecko.WebControl)
  • 78590 The Application “MonoDevelop” has quit unexpectedly
  • 79089 Monodevelop crashes during startup on Ubuntu Edgy
  • 78622 Null reference exception when deleting TreeView
  • 78581 project references are empty when building
  • 76854 Monodevelop freezes when opening ‘new project/solution’ dialog.
  • 78582 Switching runtime from 1.1 to 2.0 on existing project eats a lot of memory and not freeing any
  • 78707 Error while opening some files in the source code editor
  • 79101 Parsing Queue is not cleared when closing solution
  • 79144 Crashing when finding in project
  • 77516 Some tooltips of some toolbar buttons are not localizable
  • 78798 Crash on signal connect when P/Invoke is last thing in class
  • 78774 Mono Chrashes on Startup due to Unix Transport Error
  • 78617 Adding a circular reference causes unhandled exception
  • 78443 No auto-completion for static class members
  • 77603 iconified docks get docked into the notebook
  • 78658 mixing 2.0/1.0 assemblies causes completion db code to loop forever
  • 78853 Crash when drag&drop a Button over a HButtonBox
  • 78909 RadioButton Groups are not saved (Stetic-Designer)
  • 78956 Button responses aren’t registered automatically
  • 78938 cut & paste a container with widgets inside doesnt work
  • 78966 Button Icon is not shown in designer
  • 78955 Autocompletion needs to check for cursor visibility after insertions.
  • 76141 Unable to add files to a solution when “Solution” dock is not part of the main window
  • 78588 code completion not working for 2.0 (generics)
  • 79038 clearing recent solutions with recent item which has no group causes exception
  • 79043 Problem with getter/setter in new widgets
  • 79045 Droparea is drawn in wrong direction on HBoxes
  • 79044 Can’t use an arrow in a button
  • 79099 Project references not being removed
  • 77710 Completion window not using Language Bindings
  • 78552 Entering invalid char in project name leads to compilation failure
  • 78620 The combo box for selecting the widgets doesn’t get updated correctly
  • 78631 Error dialog will not close when invalid assembly is referenced
  • 78174 Exception when trying to add a cyclic dependency
  • 78447 Dependancy assemblies aren’t cleared
  • 77450 New project dialog has a duplicate accellerator key
  • 75400 MonoDevelop (v0.7) file->Recent Solutions broke
  • 78579 URI problem in the WelcomePage Add-In when using special characters
  • 78824 Crash when creating new project with Gtk#2.10
  • 76715 Closing out a dock causes a Gecko.WebControl based widget’s contents to clear
  • 79016 Building projects: System.NullReferenceException
  • 77474 Differing logos
  • 78387 Last character of string truncated in “Application Output” window
  • 78910 GTK-Error on RadioButton groups
  • 78814 Faulty translation makes new templates show ${Time
  • 78432 Error messages should be selectable
  • 78160 GUI designer HBox child positioning problem
  • 78668 MonoDevelop crashes with GUI Stetic Designer with System.NullReferenceException.
  • 78021 Boo binding doesn’t build
  • 78004 Projects not marked as dirty if files/resources changed outside of MD
  • 78867 Freezes when try Ctrl+N editing an Accelerator for an Action
  • 78550 Cant disable Monoquery build
  • 77037 Custom icon for Documents
  • 79108 New projects have Debug config in solution Release config
  • 79195 Cannot use a custom component from a dll

API and implementation changes

  • MonoDevelop is now built using gmcs, that is, using the 2.0 runtime. It means that .NET 2.0 API can be used to implement add-ins. However, be careful with that since not all 2.0 API is available and stable in Mono.
  • Optional extensions. MonoDevelop add-ins can now specify extensions which will only be loaded if some dependencies are present. For example, the C# add-in has extensions for the Autotools add-in. Those extensions will only be loaded if that add-in is installed and enabled.
  • Support for run-time add-in loading and activation. The add-in engine has been improved to better support add-in installation and loading at run-time. You can now install an add-in and it will start working, without having to restart MonoDevelop.
  • Support for language agnostic project templates (Michael Hutchinson). It is now possible to create project templates which are not bound to a specific language. For example the ASP.NET project template will be available for any language supporting CodeDom.
  • Serialization fallback types. The serializer used by MonoDevelop to read and write projects now supports fallback types to handle missing types when loading. The most common case is when a project containing some add-in specific data is loaded in a system where this add-in is installed. For example, a project might contain a deploy target to be handled by an add-in which is not installed. In this case, it is possible to specify a fallback type (for example a UnknownDeployTarget), so all deploy targets of unknown type will be deserialized using this class. It has many benefits: it will still be possible to load the project, the UI can easily handle the UnknownDeployTarget case, and the project data which could not be deserialized won’t be lost (the serializer will store the raw xml data in the fallback object and will write it back to the file).
  • Secondary views (Michael Hutchinson). With secondary views it is possible to attach new views to existing display bindings.
  • MonoDevelop.DesignerSupport add-in (Michael Hutchinson). This add-in provides basic functionality to be used by visual designers. The ASP.NET editor will use it, and the Gtk# designer too.
  • Improvements in the ambience service (Philip Turnbull). The ambience service has a new API which is easier to use and extend.

Known issues

The boo add-in needs to be compiled using a boo compiler which targets the 2.0 runtime. If you are compiling boo from a tarball, just provide the option when compiling. If you installed it from a package, you can create a configuration file for booc.exe which will force mono to use the 2.0 runtime. This file should be named booc.exe.config and be placed next to booc.exe:

<?xml version="1.0"?>
 <configuration>
    <startup>
        <supportedRuntime version="v2.0.50727" />
    </startup>
</configuration>

Credits

Contributors

The following people contributed in this release:

Lluis Sanchez, David Makovský, Alejandro Serrano, Scott Ellington, Matej Urbas, John Luke, Michael Hutchinson, Philip Turnbull, Jacob Ilsø Christensen

This is the list of all project contributors:

Alberto Paro, Alejandro Serrano, Alexandre Gomes, Alex Graveley, Andrés G. Aragoneses, Antonio Ognio, Ben Maurer, Ben Motmans, Christian Hergert, Daniel Kornhauser, Daniel Morgan, David Makovský, Erik Dasque, Franciso Martinez, Gustavo Giraldez, Iain McCoy, Inigo Illan, Jacob Ilsø Christensen, Jeroen Zwartepoorte, John BouAnton, John Luke, Joshua Tauberer, Jonathan Hernández Velasco, Levi Bard, Lluis Sanchez Gual, Martin Willemoes Hansen, Marek Sieradzki, Matej Urbas, Michael Hutchinson, Miguel de Icaza, Nick Drochak, Muthiah Annamalai, Pawel Rozanski, Pedro Abelleira Seco, Peter Johanson, Philip Turnbull, Richard Torkar, Scott Ellington, Todd Berman, Vincent Daron, Wade Berrier and Yan-ren Tsai.

This list is not complete, it is missing some contributions sent in to the list and via our bugzilla. Your work is still greatly appreciated. If your name was left off the list, it was not intentional, please send an email to the list and it will be corrected as soon as possible.

Translators

  • ja_JP - Atsushi Eno
  • fr - Vincent Daron, Nicolas Favre-Félix
  • es - Antonio Ognio, Alejandro Serrano, Andrés G. Aragoneses
  • da - Martin Willemoes Hansen, Jacob Ilsø Christensen
  • pt_BR - Mauricio de Lemos Rodrigues Collares Neto, Andre Filipe de Assuncao e Brito, Rafael Teixeira
  • cs - David Makovský
  • it - Alberto Paro
  • zh_TW - Yan-ren Tsai
  • pl - Marek Sieradzki
  • zh_CN - Yu Lindong, Funda Wang
  • ru - Maxim Krentovskiy
  • sl_SI - Matej Urbas
  • ca - Jonathan Hernández Velasco

Thanks

All of our wonderful testers who put up with the insane dependencies, the constant breakage and still managed to post nice bug reports.

Mike Krueger and the rest of the AlphaSierraPapa team for giving us a great codebase to start from, and continuing improvements.

All of the active MonoDevelop developers.