2010-02-02 6 views
3

У меня есть несколько приложений, которым необходимо разделить общий набор разметки.Виртуальный каталог ASP.NET для общей разметки

Сценарий: Возможно, у меня есть сайт www.site1.com, www.site2.com и www.site3.com. На всех сайтах /care/contact-us.aspx и /care/faqs.aspx будут точно такими же, но каждая другая страница будет совершенно другой.

Проблема: Я пытаюсь не дублировать файлы .aspx для каждого из этих сайтов и хотел бы иметь виртуальный каталог/care, который будет включать contact-us.aspx и faqs.aspx, что каждый из этих сайтов будет использовать. Я видел this post from Scott Gu, но я ищу любые другие решения/идеи.

Вопрос 1: Каким будет наилучший способ установить это для совместного использования каталога/care? Вопрос 2: Любые идеи о совместном использовании кода.

Справочная информация, если вам интересно: в устаревшем приложении (asp classic/vbscript) у нас есть возможность использовать/общий виртуальный каталог для сайтов для обмена общей разметкой и кодом (так как все они смешаны вместе. asp-файлы).

Заранее благодарю за любую помощь или идеи!

ответ

1

Просто настройте виртуальный каталог в IIS для каждого приложения, которое указывает на тот же физический каталог.

Вот хорошая ссылка:

http://support.microsoft.com/kb/324785

+0

Это работает для статических файлов, но я не думаю, что это то, что после Чак. Насколько я знаю (то есть, я могу ошибаться), вы не можете просто разместить файлы ASPX в виртуальном каталоге и позволить другим веб-сайтам «делиться» ими. Они будут перешагиваться друг от друга: предварительно скомпилированные сайты, например, будут присваивать разные имена компилируемым версиям файлов ASPX. Публикация с фиксированными именами и сборками отдельных страниц * может * позаботиться об этом - но тогда я думаю, что вы столкнулись с другими проблемами, поскольку опубликованные библиотеки DLL для борьбы с файлами. –

+0

Я не согласен. Это исключает статью kb. Я не нашел никакого решения, кроме того, что у меня было 3 копии, чтобы быть оптимальным. –

0

Я использую виртуальный каталог для того, чтобы разделить HTML и графических файлов между сайтами. Для обмена файлами ASPX все немного отличается - и сложнее.

Когда мы делимся HTML файлов, мы делаем не просто ссылку на этот файл, так как он будет завинчивать меню (различные сайты имеют различное меню - мы просто хотим, чтобы содержания из HTML-файлов). Поэтому я создал страницу (например, «ShowContent.aspx»), которая открывает файл HTML, считывает содержимое в виде строки и назначает строку элементу управления меткой ASP. Это может работать для вас как есть, если вы не генерируете контент динамически в ваших общих ASPX-файлах.

Даже если вы это сделаете, надежда не потеряна. Сначала создайте проект, включающий JUST общие файлы ASPX, создайте его и поместите файлы проекта в известное место (http://shared.yoururl.com). Теперь, вместо того, чтобы тянуть содержимое, доступ к файлу, просто прочитать содержимое от использования объекта WebRequest:

 WebRequest wrContent = WebRequest.Create("http://shared.yoururl.com/CommonInformation.aspx"); 
     Stream objStream = wrContent.GetResponse().GetResponseStream(); 
     StreamReader objStreamReader = new StreamReader(objStream); 
     string pageContent = objStreamReader.ReadToEnd(); 

Затем отобразить PageContent на вашей пустой странице.

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

1

Это действительно довольно сложно, и я бы рекомендовал вам либо укусить пулю, либо пойти с ответом scott gu, либо использовать решение, которое мы выбрали, что должно было использовать свойство svn: externals в subversion для импорта каталога из «общий» репозиторий. Subversion manual reference. Если вы используете другую систему контроля версий, я бы предположил, что у нее будет что-то подобное, но в этом случае вы сами по себе.