Поделиться страницей aspx между проектами

У нас есть решение с несколькими веб-проектами, и некоторые страницы должны присутствовать в некоторых из них. Поэтому нам понадобится какой-то общий проект, который содержит файлы aspx и на который могут ссылаться другие веб-проекты.

Теперь есть несколько реализаций:

Одна реализация, , описанная ScottGu, которая включает создание общего project, а затем скопировать выходной aspx в основной проект и сослаться на dll aspx. Недостаток этого метода заключается в том, что при изменении apsx его необходимо скопировать заново.

Другой вариант, основанный на Сообщение Дэвида Эббо должно было преобразовать aspx в ascx-es, на которые можно ссылаться как на настраиваемые элементы управления, а затем включить эти custom-control-aspx-es в хост проект внутри некоторых страниц-заполнителей. Но меня беспокоит: можно ли все страницы apsx преобразовать в ascx? Я имею в виду, например, что в пользовательских элементах управления нет события Page.LoadComplete.

И еще один вариант - использовать виртуальные каталоги, которые сопоставляются с общим веб-проектом, как описано в статье Microsoft KB < / а>. Проблема снова с этим методом заключается в том, что общие aspx-es должны находиться в предопределенных каталогах (то есть виртуальном каталоге). Если имя виртуального каталога перекрывает физический каталог, виртуальный переопределяет его, и никакие страницы из последнего не могут использоваться. Возможно ли объединить эти два вместе?

Есть предположения? Заранее спасибо P.S. Как насчет отладки общих страниц?


person jaraics    schedule 24.03.2011    source источник


Ответы (4)


Я решил эту проблему, создав общую библиотеку классов, содержащую элементы управления .ascx. Не обнаружил реальных трудностей при преобразовании страниц .aspx в элементы управления .ascx. Нашел этот образец от ScottGu действительно простым и хорошим местом для начала. http://webproject.scottgu.com/CSharp/usercontrols/usercontrols.aspx .

person azhons    schedule 07.04.2011
comment
А с UserControls нет необходимости их копировать (см. Предложение 2-го абзаца из вопроса). Спасибо за ответ. - person jaraics; 11.04.2011
comment
Теперь я просто копирую эти dll на мероприятие PreBuild, что не такая уж большая проблема. Я должен взглянуть на сообщение Дэвида Эббо. Спасибо за совет. - person azhons; 11.04.2011

В качестве решения мы используем метод ScottGu, который включает копирование файлов aspx из общего проекта в основные проекты.

Событие пост-сборки в общем проекте копирует файлы на их место, как это

xcopy "$(ProjectDir)Forms\Techs\AddEditTech.aspx" "$(SolutionDir)..\TTAdmin\Forms\Companies"  /i /d /y
if errorlevel 1 goto BuildEventFailed

xcopy    ....

goto BuildEventOK

:BuildEventFailed
echo POSTBUILDSTEP for $(ProjectName) FAILED
exit 1

:BuildEventOK
echo POSTBUILDSTEP for $(ProjectName) COMPLETED OK
person jaraics    schedule 07.04.2011

Вы думали о том, чтобы разделить функциональные возможности на классы, наследующие от Page, и поместить эти классы в общую DLL? Все реализующие приложения могут затем реализовать эту страницу, унаследовав от нее, и по-прежнему иметь возможность изменять функциональность, предполагая, что базовые классы предоставляют заменяемые методы. Я добился довольно хороших результатов, когда у меня было много страниц, которые использовались во многих приложениях, и все они имели один и тот же код. Просто возможность.

person Josh    schedule 24.03.2011
comment
Хорошая мысль, но у меня есть некоторый контент в aspx-es (элементы управления и статический контент). Есть ли простой способ скомпилировать это содержимое в dll? Я попытался скомпилировать полную страницу (разметка + код) в dll (предварительно скомпилировав ее) и унаследовав от этого класса, но возникла ошибка времени выполнения. Произошла ошибка при попытке загрузить строковые ресурсы, что заставляет меня думать, что страница пытается загрузить разметку из dll в качестве ресурса. - person jaraics; 24.03.2011
comment
Должна иметься возможность компилировать содержимое в dll, задав для свойства сборки всех элементов управления встроенный ресурс. Возможно, вам придется загрузить элементы управления из кода, запросив ресурсы сборки, но это должно сработать. - person Josh; 24.03.2011

Рассматривали ли вы разработку, ориентированную на услуги? Встраивайте функциональность в сервисы, которыми вы можете поделиться. Создайте свою функциональность, подобную виджетам. Таким образом, у вас есть только одна кодовая база, но вы можете использовать ее на нескольких сайтах.

Думайте за пределами (.Net box)

person DidierDotNet    schedule 25.03.2011