Release notes for MonoDevelop 0.13

MonoDevelop 0.13 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

Compiling the following order will yield the most favorable response.

  • Gtk# 2.4.2
  • Gtksourceview#-2.0 0.10
  • Monodoc 1.0
  • Gecko#-2.0 0.10
  • MonoDevelop 0.13 Source

You can download MonoDevelop 0.13 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

Version Control Add-in

The version control add-in has been greatly improved, both in features and stability. The highlights of the new add-in are:

  • It now supports the Checkout and Commit commands, which can be used to import projects into a version control repository, and to get a project from a repository. There is a new repository selector which allows registering common repository locations.
  • The add-in is now fully pluggable, so new version control system can be implemented as add-ins.
  • Improved status view, which allows entering commit comments for files. Comments are stored on disk, so if you close MonoDevelop and start it again, the status window will show the comments you entered.
  • ChangeLog files (when available) will automatically be updated using the commit comments.
  • Version control is fully integrated in the solution pad, so operations like renaming, deleting or moving files or folders will be handled by the version control system.

The status view

(Lluis Sanchez)

Task view

MonoDevelop now has a new Task pad, which can show two kind of tasks:

  • Tasks entered by the user. Those tasks will be stored in the project directory.
  • Tasks obtained by parsing comment tags in the source code files of projects. Comment tags are fully configurable. The default configuration includes some of the most commonly used tags: FIXME, TODO, HACK.

Compilation errors and warnings are now shown in a new Error List pad.

(David Makovský)

The new task pad

Code completion improvements

There are many improvements and new features in code completion:

  • Fixed support for is/as completion, which will now show a list of available subclasses of the type being checked.
  • Completion of new (although not yet supported in all contexts). 500px
  • Completion of override, which will show a list of overridable methods and will create a method skeleton when one of them is selected. 700px
  • Full support for generic types. Instantiated generic types will be shown in the completion list using the actual parameter types.
  • Completion of compiler directives.
  • Added support for overloaded operators in the parser.
  • There is a new method parameter information window which is shown when you start typing a method call. It will show the parameters that the method takes.

(Lluis Sanchez)

Native support for Visual Studio 2005 Projects

MonoDevelop now 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 now offer the possibility of converting it to the native MonoDevelop format or to the VS2005 format.

(Ankit Jain)

Custom Commands in projects

Users can now provide custom commands to be executed before, after or as a replacement of project and solution operations such as build, clean or execute. It is also possible to define new custom operations which will be shown in the project or solution context menu. Commands can be specified per-configuration in the project/solution options dialog.

(Lluis Sanchez)

The custom command configuration panel

Integration with Makefiles

MonoDevelop now supports integration with Makefiles for projects. This integration covers the following features:

  • Delegating build, clean and/or execute operations to Makefiles
  • Keeping the monodevelop project in sync with the Makefile wrt:
    • List of files (code, resources, deployable files and others).
    • List of references (only for .NET projects). It can correctly handle package references specified in a configure.in file.

Beware that this integration will not work for all makefiles, only for those which follow some specific rules.

  • Lists of files and references must be defined in individual makefile variables.
  • The values obtained from the variables cannot reference local makefile variables (they are not resolved, simply ignored).
  • You can specify a ‘prefix’ which MD can remove from the value to get the usable value. Eg. for references, the values might be of the form -r:System then ‘-r:’ should be used as the prefix.
  • The following autoconf variables are supported : srcdir, top_srcdir, top_builddir. So, for eg. FILES = $(srcdir)/Foo.cs is valid and will be correctly handled. These variables are supported only when a corresponding configure.in is specified in the options.
  • Sync’ing resources: a resource Id is appended to the resource filename if it is different from the filename (Eg. in case of a VS2005 project)
  • Sync’ing references:
    • Distinct variables may be specified for Package, Assembly and Project references. You can also use the same variable for some or all of them.
    • Package references like -pkg:foo are supported. The add-in will add all the assemblies from such a reference to the project, so you can get code completion for them.

The add-in allows specifying the regular expressions to be used for parsing compiler errors and warnings. This is especially useful when integrating with non-.net makefiles.

(Ankit Jain)

Makefile integration configuration panel

New Generic Project type

This new Generic Project type (available in the MonoDevelop category of the new project dialog) can be used in a solution to create projects for languages not natively supported by MonoDevelop. For example, it would be possible to create a project which builds a C library, or one for handling translation files.

This new project type is specially useful in combination with Custom Commands (so you can specify what needs to be done for building/cleaning/executing) and with the Makefile integration (so you can keep the file list in sync with a makefile).

(Lluis Sanchez)

Deployment infrastructure

There are several new deploy targets that can be used for deploying projects:

  • Install to a prefix.
  • Execute a command or script.
  • Combination of deploy targets (allows executing several deploy operations together).

(Lluis Sanchez, Michael Hutchinson)

Web References Add-in

MonoDevelop now features a Web References add-in. This add-in provides a new “Add Web reference” command, which can be used to create a reference to a web service. The add-in will generate the proxy classes needed to access the selected web service.

Note: Web references can only be added to projects which target the 2.0 runtime (you can change the target runtime in the project options).

(Gideon de Swardt)

Project Reloading

MonoDevelop now detects changes in project files and can reload individual projects without having to close and reopen the entire solution. This is specially useful when updating code from a version control repository, since modified projects will automatically be reloaded and the solution pad will show the updated file list.

The solution loading process has also been improved, and it won’t be aborted anymore when one of the projects can’t be loaded. Instead, the project will be shown with an error message in the solution pad, and the user will have the option to reload it.

(Lluis Sanchez)

New features in the Gtk# designer

The Gtk# designer has significant improvements:

  • Use of partial classes to separate user code from generated code. Described in the section below.
  • Support for Undo/Redo.
  • Support for Gettext. There is a new option in the project options dialog (Gtk# settings section) for enabling Gettext support in the designed windows. It is also possible to specify the Gettext class to be used to get the strings.
  • Gtk.Fixed has been added to the widget palette.

The designer now makes use of partial classes to separate user code from generated code. The class generated by the designer contains fields for all widgets and menu actions, so those will be directly accessible from the user code (which means that the infamous “Bind to Field” button is not needed anymore, since all widgets are automatically bound to fields).

MonoDevelop still supports the old way of generating code without partial classes, and this mode will be used to keep old projects buildable, and to support languages which don’t have partial classes.

So, old projects should still build without errors, since MD will use the old mode. HOWEVER, MD will now always generate one file for each window in the gtk-gui folder. If your project is under version control, don’t forget to add it to your repository.

In case you want to convert your project to the partial class mode, you’ll have to do some manual changes:

  • Open the .mdp file of your project in a text editor, look for the GtkDesignInfo xml element, and add a partialTypes attribute like this:
    <GtkDesignInfo partialTypes="True">
      <ExportedWidgets />
    </GtkDesignInfo>
  • After this change, open the project in MD, and for each window/dialog/custom widget do the following:
    • add the “partial” keyword to the class
    • replace the call to Stetic.Gui.Build(…) call by a simple this.Build() call (without parameters).
    • Remove all fields bound to widgets (since those are now generated in the partial class).

(Lluis Sanchez)

Other features

Here is a list of other interesting new features in MonoDevelop 0.13:

  • The NUnit add-in now supports NUnit 2.2.9. This NUnit version is now distributed together with MonoDevelop (Lluis Sanchez).
  • F1 help for classes. When pressing F1 in the text editor, MonoDevevlop will now show the corresponding help page in an external Monodoc browser (you’ll need the latest Monodoc release for this to work).
  • Support for Win32Icon and Win32Resource options in C# projects (Lluis Sanchez).
  • New Layout toolbar which includes a combobox for fast layout switching (David Makovský).
  • Support for files outside of a project directory. It is now possible to add files to a project which are not under the project directory. Those files are now shown in a special External Files folder. (Lluis Sanchez)
  • Editor wrap mode selector. A new option in the text editor preferences can be used to specify the wrapping mode (Atsushi Enomoto).
  • File viewer selector. When opening a file, it is now possible to select the file viewer to use if there is more than one that can handle that type of file (Lluis Sanchez).
  • Improvements in ASP.NET support: added a new option that can be used to disable compilation-time CodeBehind verification for different configurations. Several important stability fixes in AspNetEdit. Improvements to toolbox, now includes default items with icons. (Michael Hutchinson)
  • New Go to Type dialog, for easily jumping to a class defined in a project (Jacob Ilsø Christensen).

Bug Fixes

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

  • 79363 - Multiline tooltips are not shown correctl
  • 79543 - Parsing of compiler output very slow
  • 79296 - Unable to “link” to files outside of project directory
  • 79199 - No WinExe compile target
  • 79410 - “Save all” should be grayed out
  • 80009 - the changelog depends on the optional version control addin
  • 79857 - autotools addin generates broken configure script
  • 79505 - ‘make run’ from SVN doesn’t guess mozilla installation directory
  • 79526 - MonoDevelop hangs and uses 100% CPU when using Find Next Selection
  • 79825 - Build error in MonoDevelop 0.12 with single file build
  • 79766 - Underscores in window titles are not escaped
  • 80112 - Autotools configuration files bad generated
  • 80312 - NullReferenceException in subversion add-in
  • 80311 - Null reference exception when trying to build a solution
  • 79947 - monodevelop crashes on startup after changing layout
  • 78030 - Projects which depend on the Stetic Add-in can’t be compiled using the command line tool mdtool
  • 80412 - Compilation failure of generated.cs lines code > 24k version 0.12
  • 78801 - Subversion AddIn Segfaults while fetching log
  • 80022 - Exception when updating from SVN repository
  • 75209 - MonoDevelop hangs when accessing SSH through fileselector
  • 79382 - Code completion for indexer
  • 77418 - Issues with ResolveIdentifier
  • 78809 - Non-UTF-8 files/projects
  • 80595 - Code completion for indexers offered by generic types (generics)
  • 79464 - Code completion confused by some expressions
  • 78577 - Code completion doesn’t recognize child namespaces
  • 80088 - Code completion confuses enum typed properties with enums itselves
  • 79316 - CodeCompletion shows 2.0 API in a 1.1 project
  • 79538 - non-existing directory in file browser causes hang
  • 79439 - Cannot delete NUnit assemblies
  • 80610 - Subversion Log does not work
  • 79360 - Slow task list population
  • 80087 - Info tooltip and ‘Go to declaration’ option not working in a special case
  • 80088 - Code completion confuses enum typed properties with enums itselves
  • 79102 - Solution view: entries count not updated after Project deletion
  • 80178 - Removing a project from the gui doesn’t update CurrentSelectedProject
  • 80248 - C# parser does not recognise “using foo = bar; “
  • 80691 - Find all references throws exception
  • 79122 - Version control contextual menu should be more descriptive
  • 80645 - Ctrl+C / Ctrl+V stop working after a while
  • 79100 - autogen fails: MOZILLA_EXTENSION_TYPE_TEXTFILE undefined
  • 80133 - Associate the ascx.cs file to the ascx in the project tree
  • 80386 - MonoDevelop GUI mis-resolves relative paths
  • 79223 - After/Before Build scripts cannot be defined with relative path
  • 79902 - MD crashes when trying to get the log of a folder
  • 79591 - Searching in the entire solution doesn’t look into resource files
  • 80124 - Editor should automatically go to column one for ‘#’
  • 80648 - Cannot compile GTK C# app - gtk references missing
  • 79937 - NUnit Addin fails to initialize
  • 80679 - Code completion not working perfectly for the “new” keyword
  • 80608 - Code completion not working when there is text after the cursor
  • 79364 - Class browser leaves invalid old entries on dir rename
  • 78442 - Show prototype while typing the method’s arguments
  • 78437 - Smarter auto-completion for class-constructors
  • 79248 - nunit 2.2.6 changes
  • 76855 - Bookmark icon size
  • 78589 - Statusbar resizing with small fonts
  • 80717 - Indent/Unindent selection doesn’t work for one line
  • 80720 - “Go to base” should be disabled for classes which do not inherit
  • 80318 - GUI freezes (and NullReferenceException) when retrieving a specific version of a file
  • 80058 - Monodevelop doesn’t boot anymore after updating gtk+
  • 76646 - Monodevelop crashes on gnome desktop theme change
  • 80705 - When selecting a file (in the tab pane) that is a resource, the solution treeview does not select it
  • 79200 - MD should contain an icon embed option
  • 79763 - navigation to class declaration fails in C# editor
  • 80629 - Code completion not working just after a constructor
  • 80841 - Tooltips and code completion not working for primitive types
  • 80840 - Tooltip about type doesn’t work for generic types
  • 79137 - Installed launchers should not require env vars
  • 80868 - Autocomplete is confused with `using’ statement
  • 80716 - Crash when saving project leaves project file empty and project unloadable

API and implementation changes

  • Text editor extensions. The new TextEditorExtension class allows add-ins to implement custom behavior for the key press event. This is very useful to language bindings for providing language-specific code completion or formatting rules. (Lluis Sanchez)
  • New pluggable FileService. Add-ins can plug into it to provide custom behavior for some file operations (it’s being used right now by the Version Control add-in). (Lluis Sanchez)
  • Project Service extensions. Add-ins can create ProjectServiceExtension subclasses to provide custom behavior for project operations such as build, clean or execute. (Lluis Sanchez)
  • The Document class now has a new GetContent method for getting a specific interface implementation from a view. It’s better than just casting the view to a specific interface (this is what was done until now) because the view can in this way implement interfaces in classes other the main view. It simplifies the work in views which are composed by multiple views. (Lluis Sanchez)
  • Improved support for custom controls in MonoDevelop.DesignerSupport (Michael Hutchinson).
  • Several fixes to make MonoDevelop run in Windows, although it’s not yet 100% possible (Levi Bard).

Credits

Contributors

The following people contributed in this release:

Lluis Sanchez, Ankit Jain, Jacob Ilsø Christensen, Michael Hutchinson, Andrés G. Aragoneses, David Makovský, Atsushi Enomoto, Levi Bard, Scott Ellington, Gideon de Swardt, Wade Berrier, Peter Johanson, Thiago Becker, Rafael Giorgetti

This is the list of all project contributors:

Alberto Paro, Alejandro Serrano, Alexandre Gomes, Alex Graveley, Andrés G. Aragoneses, Ankit Jain, Antonio Ognio, Atsushi Enomoto, Ben Maurer, Ben Motmans, Christian Hergert, Daniel Kornhauser, Daniel Morgan, David Makovský, Erik Dasque, Franciso Martinez, Gideon de Swardt, 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, Rafael Giorgetti, Richard Torkar, Scott Ellington, Thiago Becker 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, Milo Casagrande
  • 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, Jordi Mas i Hernández

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.