Some BackgroundWe support two ways for you to install and use the assemblies that implement ASP.NET MVC 3 on a machine:
- Have the ASP.NET MVC 3 assemblies installed in a central place on a machine, and have web projects reference/use the assemblies from there
- Copy the ASP.NET MVC 3 assemblies into the \bin folder of your web project, and have your web project reference/use the assemblies from there
The second approach is also fully supported, and has the benefit of not requiring ASP.NET MVC 3 to be explicitly installed on a machine in order for it to be used. Instead you can just copy/ftp your web application onto a server (with the ASP.NET MVC assemblies contained within the \bin directory of the application) and it will just work. You should use this second approach if your web hosting provider hasn’t explicitly installed ASP.NET MVC 3 yet on their servers.
Approach 1: GAC Based Referencing of ASP.NET MVC AssembliesWhen you install ASP.NET MVC 3 on a machine, a number of assemblies are automatically registered in the GAC (global assembly cache) as part of the installation process. The GAC provides a central place that .NET assemblies can be installed and serviced (via Windows Update). Because it provides an easy way for us to update/service assemblies, ASP.NET MVC projects - by default - reference the assemblies that implement ASP.NET MVC 3 from it.
If you copy a vanilla ASP.NET MVC 3 project – that uses the default approach of referencing the ASP.NET MVC 3 runtime assemblies using the GAC – onto a machine that has not had ASP.NET MVC 3 installed on it, then you will see an error message like below when you run your application:
The above error indicates that one of the assemblies required to run ASP.NET MVC 3 from the GAC cannot be found. Installing ASP.NET MVC 3 on the machine will fix it and allow your application to be run.
Approach 2: \Bin Directory Based Referencing of ASP.NET MVC AssembliesThe alternative approach your projects can use is to distribute and reference the ASP.NET MVC 3 runtime assemblies from the \bin directory of your web application. The benefit of this approach is that you do not need to explicitly install ASP.NET MVC 3 on a machine in order to run your web application. Instead, you can just copy/ftp your web application onto an existing .NET 4 server and it will work. This approach works for both “full trust” and “medium trust” scenarios – which means it will even work with low-cost shared hosting offers. No addition registration/installation/action is required by the hosting provider in order to enable this.
Enabling your web project to “bin deploy” the ASP.NET MVC 3 assemblies is easy and only takes about 2 minutes to do. Here are the steps to follow:
Finding a ASP.NET Web Hosting ProviderYou can browse the Windows Web Hosting Gallery to find good ASP.NET based Windows Hosting Providers (all of which support ASP.NET 4):
The Windows Web Hosting Gallery allows you to filter/browse hosting offers by different countries and service level offerings. It also allows you to easily filter by “Shared Hosting”, “Virtual Hosting” and “Dedicated Hosting” offers.
“Shared Hosting” refers to an offer where many customers run on a single web-server and you do not have admin access on the remote server. “Virtual Hosting” offers provide you with your own Virtual Machine image on a remote-server – typically with OS admin rights and remote terminal server access to manage it. “Dedicated Hosting” offers provide you an entire physical server, and also typically provide OS admin rights and remote terminal support to it.
The prices for Windows based web hosting are now very cost effective, and start from as little as $2.75/month for a shared hosting offer and $23/month for a virtual hosting offer. All of the above offers are capable of running ASP.NET MVC 3 using the \bin deployment approach.
SummaryYou can deploy ASP.NET MVC 3 based applications to any web-server that has .NET 4 enabled on it – without having to wait for the hosting provider to explicitly install ASP.NET MVC 3 on it. Simply use the steps above to convert your project to use \bin based deployment of the ASP.NET MVC 3 assemblies, and then you can copy your application onto any ASP.NET 4 based server and it will just work.
Hope this helps,