Setup ASP.NET MVC 4 on MonoDevelop 4.1
Newer instructions for ASP.NET MVC 5
I have newer instructions for newer tech over at Setup ASP.NET MVC 5 on MonoDevelop 4.2.
Instead, maybe you should try Visual Studio for Mac.
UPDATE (4 February 2014)
Monodevelop 4.1 was a beta release and, as such, has been removed from the available distributions. In the following sections, just use MonoDevelop 4.2.
Back to the old article…
I don’t particularly like programming on Windows because of my hands’ muscle memories use the Command, Option, and Control keys, not the CTRL and ALT keys. To continue Web programming, I try to do as much ASP.NET MVC 4 programming on Mac OS X rather than Windows. I use Xamarin Studio neé MonoDevelop to do that. It can hurt to get it all set up, so I present the instructions here.
This post assumes you do not have any mono or mono-related components on your system. If you do, fire up a VM. If you don’t, fire up a VM. Do all of this in a VM. It keeps your real development environment pristine.
Note: In this post, when I mention MonoDevelop 4.1, that also means Xamarin Studio 4.1. You won’t see MonoDevelop 4.1 in your Applications folder, so just accept the fact that I use the terms interchangeably.
Install MonoDevelop 4.1 and Mono MDK 3.2.3
You can get them from the MonoDevelop Web site. Make sure that you get MonoDevelop 4.1 and Mono 3.2.3 Mono MDK installer.
Install them as you do programs on your system. On Mac OS X, run the MDK PKG to install Mono. Then, mount the Xamarin Studio DMG and drag the app into the Applications directory.
Configure MonoDevelop 4.1 Updates
Open MonoDevelop 4.1. If you sit and wait a moment, it will tell you that it has downloaded a “new” version of MonoDevelop. It’s not new. It’s 4.0. We need to turn that off unless you like it telling you that upgrading really means downgrading.
Under the “Xamarin Studio” application menu, click the “Check for updates…” menu item. Change the value of the “Update Channel” selector from “Stable” to “Alpha”.
You can decide on enabling or disabling the “Check automatically” checkbox.
Install the MonoDevelop 4.1 NuGet Package Manager Addin
Matt Ward maintains a GitHub repository for the NuGet Addin for the MonoDevelop IDE. He publishes the addin from a custom MonoDevelop addin repository.
Under the “Xamarin Studio” application menu, click the “Add-in Manager…” menu item.
On the ensuing dialog, click the “Gallery” tab. Choose the “Manage Repositories…” item in the “Repository” selector.
In the ensuing dialog, click the “Add” button.
In the ensuing dialog, paste the following URL into the “Url:” text field.
http://mrward.github.com/monodevelop-nuget-addin-repository/4.1/main.mrep
Click the “OK” button. Click “Close” button.
Expand the “IDE extensions” disclosure triangle and select the “NuGet Package Management” tree item.
Click the “Install…” button that appears in the detail box to the right of the tree view.
In the ensuing dialog, click the “Install” button. Wait for that operation to complete and the dialog to dismiss itself.
Click the “Close” button.
Create an ASP.NET MVC 3 Application
Click the “New…” button in the “Solutions”.
In the tree view, expand “C#” if you have to and select the ASP.NET item in the tree.
Choose whatever ASP.NET MVC 3 kind of project that you want to use. I will choose the “ASP.NET MVC 3 (Razor) with Unit Test Project” because it requires the most changes to get it to work correctly. Subsets of the changes in the following sections will work for the other types of MVC 3 projects available to you.
Enter the name of the Project and/or Solution and click the OK button.
(Try to) Build and (Definitely) Upgrade the Project
Yeah, out of the box: broken. Let’s fix that and make it MVC 4 at the same time.
Right- or Control-click the “References” tree item under your MVC project. Click the “Manage NuGet Packages…” context menu item.
In the ensuing dialog, ensure that the “Available” tab is active. Type “ASP.NET MVC 4” into the search field. Click the search button to the right of the input field. Scroll down until you see the package named “Microsoft ASP.NET MVC 4”. Select it by clicking on it. Then, click the “Add” button below the details pane to the right of the packages list.
In the ensuing dialog, read all of the licenses (yeah, right!) and click the “OK” button.
Click the “Close” button.
Right- or Control-click the “References” tree item under your test project. Click the “Manage NuGet Packages…” context menu item.
Activate the “Recent” tab. Select the “Microsoft ASP.NET MVC 4” package. Click the “Add” button. Click the “Close” button.
Now, you can build and run the default unit test to make sure everything things seem ok.
Things may not be ok ಠ_ಠ
Try running it from the “Run” menu and clicking the “Start Debugging” menu item (or by the Command + Enter key combination). If you’re on Mac OS X, you may see an exception like this:
System.UnauthorizedAccessException Access to the path “/Library/Frameworks/Mono.framework/Versions/3.2.3/etc/mono/registry” is denied.
It seems that the ASP.NET debugger requires access to the registry that mono installs because the CLR expects a registry. This is easy to fix. Open Terminal and type (or paste) the following commands:
1 | sudo mkdir /Library/Frameworks/Mono.framework/Versions/3.2.3/etc/mono/registry |
Now it can access the registry and everything is ok.
Things are not ok ಠ෴ಠ
If you try running it, now, you will see an exception similar to the following:
System.InvalidOperationException Conflicting versions of ASP.NET Web Pages detected: specified version is “1.0.0.0”, but the version in bin is “2.0.0.0”. To continue, remove files from the application’s bin directory or remove the version specification in web.config.
Part of our upgrade process added new assemblies but did not change the .config files. Open the Web.config file in the root of the MVC project and change the line that reads
<add key=”webpages:Version” value=”1.0.0.0” />
to
<add key=”webpages:Version” value=”2.0.0.0” />
That fixes that! Give it a run.
Man, still not ok! ᕙ(⇀‸↼‶)ᕗ
Now we get an exception about not finding a view. It’s there! I promise! We have yet to update the MVC Web.config and that causes problems. Open the Web.config under the Views folder in your MVC project. Do the following find and replace steps:
- Find and replace the value “System.Web.WebPages.Razor, Version=1.0.0.0” with the value “System.Web.WebPages.Razor, Version=2.0.0.0”
- Find and replace the value “System.Web.Mvc, Version=3.0.0.0” with the value “System.Web.Mvc, Version=4.0.0.0”
Run it.