I have a use case where I have many web projects that all use the same management general-purpose web pages, so I started to isolate my views to a separate project where all solutions can reference and use.
Because currently, I have to copy-paste the view files across solutions whenever I have a new change.
Based on this answer, I added a new custom view engine, and then added the path to the location where my views live (in a separate project beside my main project).
public class CustomViewEngine : RazorViewEngine
{
public CustomViewEngine()
{
MasterLocationFormats = new string[]
{
"~/Views/{1}/{0}.aspx",
"~/Views/{1}/{0}.ascx",
"~/Views/Shared/{0}.aspx",
"~/Views/Shared/{0}.ascx",
"~/Shared.Views/Views/{1}/{0}.aspx",
"~/Shared.Views/Views/{1}/{0}.ascx",
};
ViewLocationFormats = new string[]
{
"~/Views/{1}/{0}.aspx",
"~/Views/{1}/{0}.ascx",
"~/Views/Shared/{0}.aspx",
"~/Views/Shared/{0}.ascx",
"~/../Shared.Views/Views/{1}/{0}.aspx",
"~/../Shared.Views/Views/{1}/{0}.ascx",
};
}
}
When including the following:
"~/../Shared.Views/Views/{1}/{0}.aspx",
"~/../Shared.Views/Views/{1}/{0}.ascx",
I am getting the following exception:
Cannot use a leading .. to exit above the top directory. Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.
Exception Details: System.Web.HttpException: Cannot use a leading .. to exit above the top directory.
My file structure.
Solution
Shared.Views
Views
Profiles
create.cshtml
delete.cshtml
edit.cshtml
details.cshtml
MainProject
Global.asax
What is the correct path I have to add to tell MVC to look for views in my separate project?