Я бы тщательно проанализировал, что вы делитесь между проектами и как вы ими делитесь.
Если это скомпилированный код, правильный способ - извлечь эти классы из их собственного пространства имен и сборки и совместно использовать DLL между проектами. При рефакторинге следуйте принципам OO и SOLID.
Если вы делитесь контентом (js, htm, images, css), у вас есть несколько вариантов здесь. Вы можете создать отдельный виртуальный каталог для контента и ссылаться на него с помощью абсолютного URL. Это помогает, потому что в дальнейшем, если вы когда-нибудь захотите выделить проект на свой собственный веб-сайт в IIS, вам не придется изменять URL-адреса содержимого. Вы также можете разместить весь контент на своем так называемом базовом веб-сайте, а затем ссылаться на контент в других проектах, используя относительный путь относительно базового веб-сайта.
С другой стороны, если вы хотите совместно использовать пользовательские элементы управления ASP.NET или представления ASP.NET MVC, лучше создать отдельный элемент в каждом проекте. Это не обязательно означает, что в этом пути есть отдельный физический файл - вы также можете добавлять в проект .NET в Visual Studio элементы, которые являются только ссылочными ссылками.
Что касается процесса развертывания, я не думаю, что с проектами веб-сайтов что-то не так. Проекты веб-сайтов имеют цель, отличную от целей веб-приложений, главное - вам не нужно компилировать свои классы каждый раз, когда вы развертываете код (при условии, что они находятся в правильных папках приложения).
Я бы предложил придерживаться двухэтапного процесса развертывания с проектами веб-сайтов.
Я бы также рассмотрел веб-сайты (виртуальные каталоги), созданные в IIS, и рассмотрел бы их размещение, если это имеет смысл. И проверка пулов приложений (как отдельных, так и общих) также не причинит вреда.
Наконец, это старый вопрос. Пожалуйста, поделитесь, если вы уже реализовали успешную стратегию.