Ugh, the evil "Instance 0 of role is initializing" when deploying to Azure. Turns out MVC3 isn't installed on the Azure VMs.  The issue is the same as getting PHP installed into Azure: the Azure virtual machines don't have MVC3 installed by default, so it is up to you to get it on the box. Beware -- just changing the references to MVC3 in your project to "Copy Local" = true will not do the trick, as the MVC references rely on additional assemblies.  So, you have to manually add these assemblies:

  • Microsoft.Web.Infrastructure
  • System.Web.Helpers
  • System.Web.Mvc
  • System.Web.Razor
  • System.Web.WebPages
  • System.Web.WebPages.Deployment
  • System.Web.WebPages.Razor

Which can be found in the C:\Program Files\Microsoft ASP.NET\ASP.NET Web Pages\v1.0\Assemblies\ directory.

The other options are to use the WebPI command line tool to install MVC for you, which is the same idea as my PHP deployment solution.  O, you can send up the MVC installer with your website.  I'm not too keen on that solution, as it means deploying an additional 18MB with each deployment.

Steve Marx goes into all of this more in this post.

I don't get why they can't provision the Azure VMs with the latest/greatest shipping Microsoft runtimes and assemblies to avoid this problem, just as I think the Azure VMs should be provisioned with PHP by default.  That's what you can expect from the top tier ISPs so why not Azure? I suppose the counter argument is that the VMs get bloated with runtimes that aren't used. But the cost is only disk space. Really, I think it comes down to classic IT vs. Dev conflict. I expect IT to have boxes provisioned; that's their job.  But Azure makes it my job as a developer.  And they probably think the exact opposite.