ASP.NET MVC 4 Areas in separate projects not working (view not found)
You could use the RazorGenerator package to embed your Razor views into a separate assembly. Here are the steps to make this work:
- Install the
Razor Generator
Visual Studio extension (Tools -> Extensions and Updates...) - Create a new ASP.NET MVC 4 application using the empty template.
- Add a new class library project to the solution called
AreasLibrary
(you could also use an ASP.NET MVC project template in order to get Intellisense in Razor views) - Install the
RazorGenerator.Mvc
NuGet to theAreasLibrary
project. Add a controller inside the
AreasLibrary
project (~/Areas/Admin/Controllers/HomeController.cs
):public class HomeController: Controller { public ActionResult Index() { return View(); } }
Add a corresponding view (
~/Areas/Admin/Views/Home/Index.cshtml
):@* Generator: MvcView *@ @{ Layout = null; } <!DOCTYPE html> <html> <head> <meta name="viewport" content="width=device-width" /> <title>View1</title> </head> <body> <div> Index view </div> </body> </html>
In the properties of the view set the
Custom Tool
toRazorGenerator
.Inside the class library add an
~/Areas/AdminAreaRegistration.cs
:public class AdminAreaRegistration : AreaRegistration { public override string AreaName { get { return "Admin"; } } public override void RegisterArea(AreaRegistrationContext context) { context.MapRoute( "Admin_Default", "Admin/{action}/{id}", new { controller = "Home", action = "Index", id = "" } ); } }
All that's left is to reference the class library in the main MVC application.
Reference: http://blog.davidebbo.com/2011/06/precompile-your-mvc-views-using.html