There are a number of web frameworks that are quite popular these days (Rails for Ruby, Django for Python, Yii or a number of others for PHP) but I have to say that even after working with all of those, ASP.NET MVC is probably my favorite. I’ve been writing C# for a number of years and have worked with ASP in everything from classic ASP in vbscript, to WebForms in C# and VB.Net and now to .Net MVC in C#. I’ve also been using Linux as a server platform for many years and I’m of the (possibly controversial) opinion that unless it’s *NIX, it doesn’t belong on a server. I’ve maintained Windows servers and I know how to do it, I just think there’s too much that the GUI and Registry try to hide from you in Windows. Give me /etc/ any day!
For awhile I stuck with web frameworks that were traditionally run on Linux for my personal projects (PHP, then Rails) but I just haven’t felt at home with them like I have with .Net MVC recently. I’m not sure if it’s because that’s what I work with on a daily basis at the office and I’m more familiar with it or what. Back at the end of 2012 (October 22, to be exact) the Mono Project released version 3. This is a significant release because Mono now supported C# 5.0 with asynchronous support and (here’s the part that I cared about most) they’re now shipping the open-source Microsoft frameworks with it by default. This means if you’re running Mono 3, you don’t need to do anything special to get MVC4 and EntityFramework 6. At that point I decided to try running my MVC4 apps in Linux so I’d be able to use a web framework I’m very familiar with on my personal projects.
The biggest problem I ran into, though, is that Mono 3 doesn’t actually seem to be getting into any stable package managers. It’s near impossible to find Mono 3 releases on the project website for Linux and at times I begin to wonder if it’s actually been released at all. Eventually I decided to buckle down and build it from source (from the GitHub repositories). It was a little more confusing than I had hoped the first time, so I figured I would write up a post on how to do it both because it will be a handy reference when I need to build it again and Brandon was asking for it. :)