Структура и развертывание веб-приложений
Наш продукт представляет собой веб-приложение ASP.Net. В настоящее время мы используем проекты веб-сайтов в Visual Studio, но уже довольно давно изучаем проекты веб-приложений. В настоящее время я изучаю их, чтобы мы могли, надеюсь, улучшить процесс развертывания.
У нас есть базовый веб-сайт, общий и общий для разных клиентов, а затем мы расширяем его с помощью клиентских функций в проектах веб-сайта клиента. Клиентские проекты расширяют базу и поэтому полагаются на ее содержимое. Чтобы создать полный продукт, мы сначала развертываем базовый веб-сайт, а затем накладываем его на содержимое из проекта клиента.
В процессе преобразования в проекты веб-приложений в Visual Studio мы надеялись создать базовый проект, затем создать клиентские проекты и установить ссылки на базу. Кажется, что эта структура работает нормально, но когда мы пытаемся развернуть приложение из клиентского проекта с использованием MSDeploy, публикуется только DLL с базового веб-сайта. Это хорошо для некоторых вещей, ссылка на скомпилированный код полезна, но есть другие элементы, такие как изображения, js-страницы, htm и т.д., Которые все еще являются источником, который требуется для функционирования клиентского приложения. Нам нужно больше, чем скомпилированный код с нашего базового веб-сайта.
Чтобы все сказанное, я могу придумать несколько вариантов:
- Продолжайте развертывание в 2 этапа. Сначала базовый веб-сайт, а затем веб-сайт клиента для создания полного продукта.
- Измените процесс развертывания, чтобы скопировать необходимые исходные файлы из базового проекта.
- Повторите архитектуру нашей модели, чтобы поддерживать отношения с базой-клиентом по-другому. Не совсем уверен, как это будет работать, и будет наименее жизнеспособным вариантом.
- ??
Есть ли другой вариант, который мне не хватает? Я что-то делаю неправильно с тем, как я настраиваю свои проекты? Есть ли еще один способ сделать ссылку на веб-приложение другим веб-приложением, помимо совместного использования скомпилированного кода? Если это так, почему бы вам просто не использовать общую библиотеку классов? Или, может быть, я учу что-то с процессом MS Deploy?
Я открыт для предложений здесь, поскольку я чувствую, что что-то не хватает. Я не думаю, что наша модель для наших веб-приложений слишком уникальна.
Обновление: процесс двойного развертывания действительно работает, но он чувствует себя немного клодгеем. Любой другой вход?
Ответы
Ответ 1
Используя сборку WebResource, вы можете добавить CSS/JS/Some другой файл в качестве ссылки вместе с кодом i.e, вашей базовой DLL проекта.
Если вы правы, вы можете добавить этот WebResource в свой базовый проект, затем перейдите по ссылке ниже.
http://support.microsoft.com/kb/910442
Таким образом, большинство сторонних инструментов получат доступ к своим файлам CSS и JS.
Попробуйте это. Надеюсь, это поможет.
Ответ 2
Как сайт "делится" между клиентами? Каждый клиент, в конечном счете, получает другой сайт (IP-адрес и т.д.) Или они регистрируются на одном сайте, но получают разные функции? Вы можете захотеть добавить все функции в один проект, а затем включить/отключить функцию через настройки.
Ответ 3
Если я правильно понял ваш вопрос, вы хотите опубликовать также элементы, которые не скомпилированы (htm, JS, изображения и т.д.).
Таким образом, каждый файл на вкладке "Проводник решений" имеет свои собственные свойства (к которому обращается ключ F4), который позволяет вам выбирать действие сборки (например, компиляция → будет вводить элемент в DLL, если это применимо, содержимое → будет копировать файл "как есть" для вывода каталога).
Мне кажется, что решение для сборки "content" с опцией "copy to output directory", установленной в "copy if newer", может быть решением, которое вы ищете.
Ответ 4
Я бы тщательно проанализировал, что вы делитесь между проектами и как вы их делитесь.
Если это скомпилированный код, правильным способом является извлечение этих классов в собственное пространство имен и сборка и совместное использование DLL для разных проектов. Убедитесь, что вы выполняете принципы OO и SOLID во время рефакторинга.
Если у вас есть контент (js, htm, images, css), у вас есть несколько вариантов. Вы можете создать отдельный виртуальный каталог для контента и указать свой контент с абсолютным URL-адресом. Это помогает, потому что позже в строке, если вы хотите отделить проект на своем собственном веб-сайте в IIS, вам не нужно менять URL-адреса контента. Вы также можете иметь весь контент на своем так называемом базовом веб-сайте, а затем ссылаться на контент в других проектах, используя относительный путь относительно базового веб-сайта.
С другой стороны, если это пользовательские элементы управления ASP.NET или представления ASP.NET MVC, которые вы хотели бы поделиться, лучше всего создать отдельный элемент в каждом проекте. Это не обязательно означает, что в этом пути есть отдельный физический файл - вы также можете добавлять элементы в .NET-проекте в Visual Studio, которые являются только ссылочными ссылками.
Что касается процесса развертывания, я не думаю, что в проектах веб-сайта есть что-то не так. Проекты веб-сайтов имеют цель, отличную от проектов веб-приложений, главным из которых является то, что вам не нужно собирать свои классы при каждом развертывании кода (при условии, что они находятся в правильных папках приложений).
Я бы предложил придерживаться двухэтапного процесса развертывания с проектами веб-сайтов.
Я бы также рассмотрел веб-сайты (виртуальные каталоги), созданные в IIS, и рассмотрел их вложенность, если это имеет смысл. И обзор пулов приложений (будь то отдельный или общий) не повредит.
Наконец, это старый вопрос. Поделитесь, если вы уже реализовали успешную стратегию.