I've been using MonoDevelop on Ubuntu this weekend, because it just doesn't feel right to use it on Windows. If you have Windows and need to write C# code, I'm sorry you're going to use Visual Studio, period.
Sun VirtualBox (VBox) has been instrumental in getting a Mono environment setup. VBox just rocks, but I did have one hickup. Initially I started with Suse Linux 11.2 because that's officially supported by MonoDevelop, but it kept throwing segmentation faults on bootup when trying to load the NIC driver. I tried several reinstalls, 32 bit, 64 bit, KDE, Gnome, different NICs inside VBox; nothing worked, so I gave up and went back to my tried and true friend Ubuntu. I never did figure out the root cause.
Instead of compiling MonoDevelop from SVN or from the latest release tarballs (like I did last time) I just grabbed the latest and gratest version of MonoDevelop (v 2.0) out of the multiverse, which to my surprise is pretty new. This took a LOT less effort and was much more stable.
I was actually able to make some changes to my command line library and for the most part get the tests to pass in Linux/Mono. The SVN integration worked perfectly. The MonoDevelop usability was pretty good. No hard crashes. No super strange compilation errors, everything pretty much worked right out of the gates.
I did have a few issues:
- Rename method or property fails and shows an exception dialog.
- Adding a NUnit test class automatically references the NUnit.Core and NUnit.Framework Mono package - which causes a compilation error: Duplicate TestFixture attributes. Removing the auto added NUnit package references fixes this, but this was less than obvious.
- Find Usages works most of the time, but also displays the declaration in the results.
- Go to declaration doesn't always appear on a method.
- No (obvious) way to interactively debug an NUnit test. Maybe there's a way to do this, but the only way I could find was to create a console app which runs an NUnit suite.
- The syntax highlighting is pretty monotone (at least the default scheme)
- The ability to automatically add a using statement when a used type isn't imported would be super handy. I've been using Re# far too long to NOT have this.
I will continue to use MonoDevelop, because its good enough and runs on Linux. Clearly it has a ways to go to compete with Visual Studio on Windows or many other Java or Ruby IDEs, but if you need to write C# code on Linux it'll certainly do. I'm hopeful the development experience with MonoDevelop will only get better in 2010.