Развернуть несколько проектов веб-приложений (разные области) на одном сайте?

Несколько Asp.Net Framework 4.6.2 Проекты MVC/Razor в одном решении. Они используют Области, и каждый проект будет реализовывать одну или несколько Областей, отличных от других. Один проект действует как "основной" и включает в себя global.asax. "Подчиненные" приложения могут знать о "первичном", но не наоборот.

Можно ли развернуть их на одном веб-сайте? (на прем ВМ). Там могут быть некоторые столкновения, такие как _Layout.cshtml.

Что-то вроде того, как я должен был бы иметь возможность устанавливать инъекции зависимостей для классов в "подчиненной" сборке проекта.

Спасибо

-John

1 ответ

Я не думаю, что это возможно легко, потому что большая часть сайта MVC предварительно скомпилирована в DLL, и все же некоторые из них (например, просмотр файлов) должны быть фактически физически развернуты вне DLL. Вы, вероятно, столкнетесь с конфликтами или путаницей, я думаю. Это, безусловно, не надежный, определяемый процесс, на который вы могли бы рассчитывать при производстве.

Вот несколько альтернативных предложений для решения основной проблемы, основанной на том, что вы описали в комментариях. Это всего лишь идеи, некоторые из которых я сделал или видел, как они реализованы, и, возможно, они вам не подходят, но с любой из них должно быть намного проще управлять, чем пытаться задержать процесс развертывания:

1) Попробуйте построить области в отдельных проектах, как вы делаете сейчас, но без всех общих вещей MVC, которые его окружают. Т.е. делайте так, как если бы они были библиотеками, содержащими только файлы, специфичные для их функций. Затем вы можете упаковать их как пакеты Nuget. Когда они будут готовы, установите пакеты на "основной" сайт, чтобы создать комбинированное решение. Таким образом, вы не столкнетесь с конфликтами страниц макета и т. Д. Если один из подпроектов изменится, то основной сайт может просто обновить пакет NuGet. Вы можете создавать частные каналы NuGet либо через Visual Studio Online (если у вас есть подписка), либо на простейшем уровне через общую сетевую папку. Я думаю, что другие онлайн-поставщики также предлагают частные каналы. Мы сделали это довольно успешно, чтобы применить некоторые стили по умолчанию, сценарии, макеты и т. Д. Ко всем нашим различным приложениям MVC.

2) Перестройте ваше решение как серию отдельных приложений (это то, что вы уже получили), но с центральной службой, которая обеспечивает федеративную аутентификацию / авторизацию (например, ADFS, IdentityServer или аналогичная) и веб-API (или API), которые другие сайты могут вызывать для доступа к другим централизованным службам и функциям программно. Я вполне уверен, что вы можете использовать конфигурацию маршрутизации и общие сеансы, чтобы все это зависело, как если бы это был фактически один сайт.

3) Создайте все это как один сайт, но с четким разделением между различными командами о серверных службах, классах и т. Д., За которые они несут ответственность, чтобы они не мешали кодам друг друга. Каждая группа может регистрировать код в различных ветвях в системе контроля версий и объединяться только с общими ветвями для интеграции / тестирования и развертывания системы. Вы можете использовать сервер непрерывной интеграции для тестирования процесса сборки после каждой регистрации, и если у вас есть надежный обзор кода и проверенные проверки, вы можете помешать людям менять вещи, которые они не должны. У вас также есть возможность выпускать с / без обновлений из разных областей, если жизненные циклы разработки идут с разной скоростью.

4) Некоторая комбинация всего вышеперечисленного!

Другие вопросы по тегам