2008-08-27 4 views
23

Предположим, у вас есть два отдельных проекта ASP.NET Web Application, которым необходимо использовать общий MasterPage.Каков наилучший способ обмена MasterPages по проектам

Каков наилучший способ поделиться MasterPage с проектами без дублирования кода? Предпочтительно, не прибегая к управлению источниками или файловыми файлами.

ответ

11

Я пытаюсь сделать то же самое. Я рассматриваю пару решений, но я думаю, что использование виртуального каталога, вероятно, является лучшим способом обмена основными страницами.

Вот несколько источников, на которые вы можете посмотреть.

Третьи пули ближе к концу статья расскажет вам о возможных путях вы можете поделиться MasterPages также.

2

Сохраните исходную копию в исходном коде и сообщите об этом вашей системе управления версиями.

0

Использование a symbolic link:

Символическая ссылка является объектом файловой системы, который указывает на другой объект системного файла . Указанный объект называется целью. Символические ссылки прозрачны для пользователей; ссылки отображаются как обычно файлы или каталоги и могут быть выполнены пользователем или приложением точно таким же образом.

0

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

Однако, IIRC, Visual Studio делает локальные копии файлов, добавленных с внешних путей. Возможно, вам придется текстово редактировать файл решения/проекта, чтобы добавить связанные файлы.

Это, конечно же, предполагает использование формата «Веб-приложение». Старые VS «Веб-сайты» не имеют файлов проекта и полагаются на наличие всех файлов в папке сайта.

0

AFAIK нет элегантного способа сделать то, что вы ищете. VS всегда будет копировать его.

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

Я бы предложил вместо этого разделить хорошие функциональные возможности на компоненты/элементы управления и развернуть их.

4

Из ASP.Net Master Pages: Tips, Tricks, and Traps статьи К. Скотт Аллен, «Обмен Master Pages»:

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

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

Наконец, VirtualPathProvider в ASP.NET 2.0 может обслуживать файлы, которые не существуют в файловой системе. С помощью VirtualPathProvider набор основных страниц может работать в таблицах баз данных, которые используются всеми приложениями . За отличную статью о VirutalPathProvider см. «Virtualizing Access to Content: Serving Your Web Site from a ZIP File».

0

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

Однако с кодом, очевидно, вы можете написать файл кода, который наследуется от

System.Web.UI.MasterPage 

Введена в любой логике вы хотите во всех ваших основных страниц там. Постройте его как свою потрясающую dll, а затем включите ее в свои проекты.