Подтвердить что ты не робот

Каков наилучший способ обмена MasterPages по проектам

Предположим, у вас есть два отдельных проекта веб-приложения ASP.NET, которым необходимо использовать общий мастер файл.

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

4b9b3361

Ответ 1

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

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

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

Ответ 2

От К. Скотта Аллена статьи об основных страницах ASP.Net: советы, хитрости и ловушки на странице "Обмен главными страницами":

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

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

Наконец, VirtualPathProvider в ASP.NET 2.0 может обслуживать файлы, которые не существует в файловой системе. С VirtualPathProvider набор основных страниц могут жить в таблицах базы данных, что все приложения использовать. Для отличной статьи о VirutalPathProvider см. "" Виртуализация доступа к контенту: обслуживание вашего веб-сайта из ZIP файла".

Ответ 3

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

Ответ 4

Используйте символическую ссылку:

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

Ответ 5

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

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

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

Ответ 6

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

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

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

Ответ 7

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

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

System.Web.UI.MasterPage

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