Поделиться страницей aspx между проектами - PullRequest
11 голосов
/ 24 марта 2011

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

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

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

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

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

Есть мысли?Заранее спасибо PS Как насчет отладки общих страниц?

Ответы [ 4 ]

4 голосов
/ 07 апреля 2011

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

1 голос
/ 07 апреля 2011

Решение, которое мы используем, это метод Скотта , который включает копирование файлов 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
0 голосов
/ 25 марта 2011

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

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

0 голосов
/ 24 марта 2011

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

...