Got to answer two question about multi-site configuration working with Sitecore:
1. Sitecore Multisite Best Practice for setting up Visual Studio Project (link to original question)
I'm seeking an advise on best practice that has worked for creating a asp.net MVC visual studio solution that supports multisite (multi tenant). One thing we would like to do is minimize the regression defects so that developer don't modify the wrong website code base etc.
That the solution needs to support more than 8 web sites.
2. Manage web.config in sitecore multisite solution (link to original question)
We have a multisite solution with individual visual studio solutions for each websites. Then we have master solution to build/deploy all websites.
Firstly, not sure whether it's a best practice to include web.config in Visual Studio solution. But I think all the nuget packages needs web.config to add their settings.
As a result, we have web.config for each solution. However when we deploy from master web.config gets overwritten by each sites. Could someone please suggest how this issue can be fixed?
I have got one more alternative to address that. Currently working on
a huge project, with dozens of developers and quite bureaucratic
process of deployments, we have introduced the following approach:
- Project consists of multiple logical subparts, which in fact are individual websites.
- Each of those websites we set up as an MVC Area with own controllers, views etc
- Most important - we set up MVC Areas as
individually pluggable DLLs. So each of that websites is a separate
project under solution, with its own resources and statics; on build
everything is copied under their required paths and DLL goes to the \bin
- One more class library for shared (by all websites) resources, it is
being referenced only by those sites, that need that functionality
- In Sitecore, we have the same strict principles - the content,
layouts, renderings are isolated as higher as possible, no individual
content may be re-used (unless from shared resources folder).
This approach serves us almost a year already and has proven for its agility, much easier deployment and fairly less code merge conflicts.
If you are working under just one site - you don't need to re-compile
and re-deploy everything - just replace one dll at bin folder.
Thus, combining that with your question, Approach 1 would be an answer.
References (more to read):
Hope someone finds that helpful!
Regarding managing configuration, I would advise for each website (under its individual project) to create it's own App_Config/Include folder and create _project_name_.config within that folder in order to keep all site-specific settings there (for further merge into resulting config).
On build you set up (for each individual project) that file to be copied into main SITECORE_INSTANCE_WEB_ROOT\App_config\Include folder along with the rest of include patch config files.