2008-08-27 14 views
23

Supongamos que tiene dos proyectos separados de la aplicación web ASP.NET que necesitan utilizar una página maestra común.¿Cuál es la mejor manera de compartir páginas maestras en proyectos?

¿Cuál es la mejor manera de compartir la página maestra en todos los proyectos sin tener que duplicar el código? Preferiblemente sin tener que recurrir al control de código fuente o al sistema de archivos pirateados.

Respuesta

11

Estoy tratando de lograr lo mismo. Veo un par de soluciones, pero creo que usar un directorio virtual es probablemente la mejor manera de compartir páginas maestras.

Aquí hay un par de fuentes que puede consultar.

La tercera balas cerca del final del artículo se habla de posibles formas de compartir MasterPages también.

2

Mantenga una copia principal en el control de fuente, y deje que su sistema de control de fuente se preocupe por ello.

0

Uso a symbolic link:

Un enlace simbólico es un objeto de sistema de archivo que apunta a otro objeto del sistema de archivos . El objeto al que se apunta se llama objetivo. Los enlaces simbólicos son transparentes para los usuarios; los enlaces aparecen como archivos o directorios normales , y el usuario o la aplicación pueden actuar de la misma manera.

0

Supongamos que puede crear un repositorio común para todos sus proyectos (una carpeta común en su árbol de control de origen, por ejemplo), podría agregar las páginas maestras como enlaces utilizando rutas relativas.

Sin embargo, IIRC, Visual Studio realiza copias locales de archivos agregados desde rutas de acceso externas. Es posible que deba editar el texto del archivo de solución/proyecto para agregar los archivos vinculados.

Esto, por supuesto, supone que utiliza el formato "Aplicación web". Los "sitios web" anteriores de VS no tienen archivos de proyecto y dependen de tener todos los archivos dentro de la carpeta del sitio.

0

AFAIK no hay una forma elegante de hacer lo que está buscando ... VS siempre terminará por copiarlo.

Creo que para ser honesto puede que no sea una gran idea .. Obviamente, ¿quiere compartir el código común más bajo, pero una página maestra completa? .. Parece que podría estar buscando problemas ya que un cambio menor podría tener tales un impacto en una o más aplicaciones ...

Sugeriría separar los buenos bits de funcionalidad en componentes/controles y desplegarlos.

4

De ASP.Net Master Pages: Tips, Tricks, and Traps el artículo de K. de Scott Allen, en "compartir páginas maestras":

La primera alternativa es copiar los archivos de página maestra compartidos en una única ubicación en un servidor web IIS. Cada aplicación puede crear un directorio virtual como subdirectorio y señalar el directorio virtual al directorio real de páginas maestras. Las aplicaciones pueden establecer la propiedad MasterPageFile de una página con el nombre del directorio virtual , más el nombre del archivo de página maestra. Cuando soltamos un archivo de página maestra actualizada en el directorio real, la nueva página maestra aparecerá en todas las aplicaciones inmediatamente.

Un segundo enfoque consiste en utilizar un sistema de control de versiones para compartir un conjunto de archivos de la página maestra en varios proyectos. La mayoría de los sistemas de control de versiones de control de fuente/ admiten algún nivel de funcionalidad "compartir", donde un archivo o carpeta puede aparecer en más de un proyecto.Cuando un desarrollador comprueba un archivo de página maestra actualizado, los otros proyectos verán el cambio inmediatamente (aunque este comportamiento generalmente es configurable). En producción y prueba, cada aplicación necesitaría redistribuirse para que aparezca la página maestra de actualización.

Finalmente, el VirtualPathProvider en ASP.NET 2.0 puede servir archivos que no existen en el sistema de archivos. Con VirtualPathProvider, un conjunto de páginas maestras podría vivir en tablas de bases de datos que usan todas las aplicaciones . Para obtener un excelente artículo sobre VirutalPathProvider, consulte "Virtualizing Access to Content: Serving Your Web Site from a ZIP File".

0

No entiendo por qué querría tener el mismo marcado en diferentes proyectos, si lo hace, no lo sé de una manera fácil.

Sin embargo, con código, obviamente, se puede escribir un archivo de código que hereda de

System.Web.UI.MasterPage 

Poner en cualquier lógica que desee en todas sus páginas maestras en allí. Constrúyelo como su dll increíble y luego solo incluya eso en sus proyectos.

Cuestiones relacionadas