MonoDevelop is a free GNOME IDE primarily designed for C# and other .NET languages, although open to any kind of language. However, MonoDevelop hopes to be more than just an IDE: it intends to be an extensible platform upon which any kind of development tool can be built.
MonoDevelop was originally a port of the SharpDevelop IDE to Gtk#, but it has evolved a lot since the initial port.
There are numerous goals that MonoDevelop hopes to achieve. Some of these are:
MonoDevelop is licensed under the GPLv2 which can be read at [1]. All the source code is available through the Subversion file repository. Read the Download page for directions on downloading the source.
A unique platform like Mono deserves a unique IDE like MonoDevelop that can take full advantage of the framework capabilities. Features like code completion, integrated unit testing, class browser, etc. would be much more difficult to implement for example in a C based IDE.
The Mono platform also provides some features that are ideal for the development of an IDE. Thanks to Mono, MonoDevelop offers:
Moreover, Gtk# rocks.
MonoDevelop 0.10 and later has an integrated GUI designer based on Stetic.
Yes. MonoDevelop can be built and run on Mono on Windows, although it is still unstable and some features may not be available. We are currently working on a Windows installer that will be soon be available.
Yes, it its included in the latest installers on the Mono website.
Yes. Right click on your project, select 'Options'->'Runtime' and select '2.0' from the drop-down list.
The Addin manager can be launched independently with the command 'mdtool gsetup'
Yes. As of MonoDevelop 0.13, Visual Studio 2005 projects can be opened, manipulated, and saved.
Bacause MonoDevelop does not look for assemblies in the GAC. MonoDevelop uses pkg-config to locate installed packages and get the list of assemblies that each package provides. A package specifies this list of assemblies in a .pc file which has to be installed in the standard pkg-config directory.
If you are developing a library, MonoDevelop can automatically generate a .pc file for your project (in the project options dialog, select "Linux Deployment Settings", and check the "Generate .pc file" option).
The binary Linux installer is not supported anymore. Please install MonoDevelop using your distro's packages.
MonoDevelop uses a shared process remoting facility named mdhost. This inter-process communcation tool requires that your network settings are correctly configured.
First of all, the loopback device (127.0.0.1) be up and functional. You can check this with the following command.
user@host$ ifconfig lo
If the device is up and functional, you should see a line similar to the following. Check for UP in the output.
lo
inet addr:127.0.0.1 Mask:255.0.0.0
UP LOOPBACK RUNNING MTU:16436 Metric:1
You may also get this error message if your eth0 devide is configured with an incorrect IP address. There is a known issue with zeroconf and the ifup utility (from Debian). See http://bugs.debian.org/cgi-bin/bugre...cgi?bug=351540.
When the network is not properly configured you will see an exception similar to the following during startup. This is fatal and will prevent MonoDevelop from starting.
System.TypeInitializationException: An exception was thrown by the type initializer for MonoDevelop.Ide.Gui.IdeApp ---> System.ApplicationException: Couldn't create a remote process.
in <0x00126> MonoDevelop.Core.Execution.ProcessHostController:CreateInstance (System.String assemblyPath, System.String typeName)
in (wrapper remoting-invoke-with-check) MonoDevelop.Core.Execution.ProcessHostController:CreateInstance (string,string)
in <0x0005e> MonoDevelop.Core.Execution.ProcessService:CreateExternalProcessObject (System.Type type, Boolean shared)
in <0x00035> MonoDevelop.Projects.Parser.AssemblyCodeCompletionDatabase:GetExternalHelper (Boolean share)
in <0x0006c> MonoDevelop.Projects.Parser.AssemblyCodeCompletionDatabase:.ctor (System.String baseDir, System.String assemblyName, MonoDevelop.Projects.Parser.ParserDatabase parserDatabase)
in <0x00071> MonoDevelop.Projects.Parser.ParserDatabase:Initialize ()
in <0x00029> MonoDevelop.Projects.Parser.DefaultParserService:CreateParserDatabase ()
in <0x00107> MonoDevelop.Ide.Gui.ProjectOperations:.ctor ()
in <0x00031> MonoDevelop.Ide.Gui.IdeApp:.cctor ()--- End of inner exception stack trace ---
in <0x00000> <unknown method>
in <0x00770> MonoDevelop.Ide.Gui.IdeStartup:Run (System.String[] args)
This is due to a bad interaction between Mono 1.1.13 and Boo.
To fix this problem, you have three options:
This is the stack trace :
System.Runtime.Remoting.RemotingException: Unix transport error.
Server stack trace: in <0x0008f> Mono.Remoting.Channels.Unix.UnixMessageIO:ReceiveMessageStatus (System.IO.Stream networkStream, System.Byte[] buffer) in <0x0017c> Mono.Remoting.Channels.Unix.UnixClientTransportSink:ProcessMessage (IMessage msg, ITransportHeaders requestHeaders, System.IO.Stream requestStream, ITransportHeaders responseHeaders, System.IO.Stream responseStream) in <0x00252> Mono.Remoting.Channels.Unix.UnixBinaryClientFormatterSink:SyncProcessMessage (IMessage msg)
Exception rethrown at [0]:
---> System.Runtime.Remoting.RemotingException: Connection closed
in <0x0006c> Mono.Remoting.Channels.Unix.UnixMessageIO:StreamRead (System.IO.Stream networkStream, System.Byte[] buffer, Int32 count) in <0x00044> Mono.Remoting.Channels.Unix.UnixMessageIO:ReceiveMessageStatus (System.IO.Stream networkStream, System.Byte[] buffer)--- End of inner exception stack trace ---
in <0x0008f> Mono.Remoting.Channels.Unix.UnixMessageIO:ReceiveMessageStatus (System.IO.Stream networkStream, System.Byte[] buffer) in <0x0017c> Mono.Remoting.Channels.Unix.UnixClientTransportSink:ProcessMessage (IMessage msg, ITransportHeaders requestHeaders, System.IO.Stream requestStream, ITransportHeaders responseHeaders, System.IO.Stream responseStream) in <0x00252> Mono.Remoting.Channels.Unix.UnixBinaryClientFormatterSink:SyncProcessMessage (IMessage msg)
The NUnit addin requires mono 1.1.9+. This is do to some cross-appdomain bug fixes. Debian users currently also have another particular problem in that NUnit packages are separated from Mono, and do not include the proper pkg-config files.
Configure monodevelop with the following command.
./configure --enable-nunit
Debian users only
Install the nunit and libnunit-cil packages (requires unstable at this moment). Due to the separate packaging of nunit, we need to make a symlink so that monodevelop knows where to find the pkg-config file.
ln -s /usr/lib/pkgconfig/nunit.pc /usr/lib/pkgconfig/mono-nunit.pc