2009-07-20 4 views
4

Какова наилучшая практика совместного использования папки bin и dll и других файлов ресурсов (например, css) между несколькими веб-приложениями на одном сервере?Общий код между несколькими проектами Asp.Net

Я уже отделил общий код от своих собственных сборок, но мне интересно о развертывании и т. Д. Я в основном хочу иметь все распространенные файлы, расположенные в ОДНОМ местоположении на веб-сервере, а затем иметь каждую веб-страницу Ссылка приложения, что общее местоположение.

В настоящее время я не уверен, как сообщить сайту Asp.net использовать папку bin из другого места.

Если это имеет значение, это приложения ASP.NET MVC.

Спасибо вам за помощь.

+0

Пожалуйста, не задавайте тот же вопрос снова, потому что вы не получили ответ, который вам нужен: http://stackoverflow.com/questions/1155655/asp-net-deployment-how-to-share-bin- по-множественных WebAPP-проектов. –

ответ

1

Лучшая практика хотел бы предложить вам не.

Каждое приложение отличается, рассматривайте их как таковые. При совместном использовании ресурсов вы создаете неявную зависимость между проектами - если вы меняете общий ресурс, который вы меняете для всех - независимо от того, было ли это предназначено или нет.

Если вы действительно должны делиться ресурсами, делайте это на уровне управления версиями или сборок - гораздо проще нарушить зависимость на этом уровне, чем разбить зависимость после развертывания на рабочем сервере.


Xanadont, разделяя общие библиотеки и т.д. прекрасно (это, по сути, что проекты с открытым исходным кодом, как NHibernate делать), но делает это на уровне папок совместного использования бункера на сервере создает больше проблем, чем решает , О типах повторного использования, о которых вы говорите, лучше всего подходят для создания разделяемых библиотек, которые являются независимыми проектами в исходном управлении с поддерживаемыми двоичными версиями. Проекты, желающие использовать разделяемые библиотеки, затем принимают двоичную зависимость в общей библиотеке, копируя двоичный файл в папку lib из дерева исходных решений и ссылаясь на этот двоичный файл. Это позволяет поддерживать и обновлять общие библиотеки, не вызывая побочных эффектов из-за прямых зависимостей от них, а решения, которые используют библиотеки, могут оценивать исправления/обновления, чтобы определить, как они повлияют на код, который зависит от них, и если обновление стоит.


Скотт, что вы имеете в виду это 1 приложение с изменениями в представлении слоя (шаблоны), не 50 приложений с изменениями в бизнес-логики. Наилучший подход для такого типа приложений - многопользовательский (поскольку я предполагаю, что у вас есть 1 база данных для каждого города), и используйте URL-адрес для определения контекста, из которого вы можете получить доступ к своей базе данных и решить свои пути просмотра (трудно описать лучший подход, не лучше понимающий вашу архитектуру приложения).

Изменение вида на основе URL-адреса может быть выполнено путем реализации механизма просмотра контекстно-зависимых данных (см. http://www.coderjournal.com/2009/05/creating-your-first-mvc-viewengine/ для примера того, как это сделать.

При таком подходе у вас есть только 1 место, которое вам нужно обновить с помощью исправлений, но вы можете легко создать новый «сайт» для другого города, просто добавив новый набор шаблонов и (в зависимости от того, как вы установите маршрутизацию вверх), указав новый домен на своем сайте. Если у вас есть набор шаблонов по умолчанию, ваш механизм просмотра может даже вернуться к ним, если настройки не существуют, поэтому вы можете настроить новый сайт, просто указав новый домен в своем приложении.

+3

Я не согласен. Совместное использование общих функциональных возможностей и ресурсов - идея создания библиотек кода. Это та же самая причина, почему у вас есть платформа .Net - множество общих функций, прекрасно вложенных в структуру. Почему бы не расширить эту идею до общей функциональности для вашей организации? Рассмотрим сценарий подключения дыры в безопасности - сделайте это в среде «общий ресурс», и вы позаботитесь обо всем в одном месте. В противном случае вы рискуете случайно забыть об обновлении одного из ваших сайтов, и теперь у вас есть проблема. В худшем случае это может быть чрезвычайно опасно. – xanadont

+0

Я делюсь, потому что это одно и то же веб-приложение в разных городах. Таким образом, ВСЕ функциональность одинакова, но каждый город будет иметь слегка измененный внешний интерфейс HTML. Для меня дублирование всего неизменного кода среднего уровня снова и снова является любительским. Что происходит, когда у меня 50 городов, и мне нужно сделать небольшое изменение БД? Мне нужно обновить dll в 50 независимых папках bin? Я понимаю, что могу сценарий развертывания, но все же ... – Scott

+1

Скотт, я бы настоятельно рекомендовал вам пересмотреть, как ваше приложение построено и переделать его, чтобы он мог обрабатывать все эти подобные веб-сайты под одним веб-приложением. С небольшим количеством кода вы можете легко указать контроллер на другой вид/БД на «сайт», чтобы каждый из них визуализировался по-разному, но поддерживался сам по себе. –

0

Я использую следующую технику: У меня есть несколько проектов приложений ASP.net с элементами управления ascx, ресурсами и т. Д. ... Я реализовал поставщик виртуальных путей для разрешения виртуальных путей между этими приложениями. Он работает очень хорошо. Я также внедрил специальный обработчик http для загрузки файлов. Если вам нужны образцы, посмотрите исходный код liveui.

Смежные вопросы