11

Nuestro producto es una aplicación web ASP.Net. Actualmente, utilizamos proyectos de sitios web en Visual Studio, pero hemos estado buscando el uso de proyectos de aplicaciones web por bastante tiempo. Actualmente los estoy investigando para poder mejorar nuestro proceso de implementación.Estructura e implementación de aplicaciones web

Tenemos un sitio web base que es compartido y común entre diferentes clientes, y luego lo ampliamos con la funcionalidad específica del cliente en los proyectos del sitio web del cliente. Los proyectos del cliente amplían la base, y por lo tanto confían en sus contenidos. Para construir el producto completo, primero implementamos el sitio web base y luego lo superponemos con el contenido del proyecto del cliente.

Al considerar la conversión a proyectos de aplicaciones web en Visual Studio, esperábamos poder crear el proyecto base, luego crear proyectos de clientes y configurar referencias a la base. Esta estructura parece funcionar bien, pero cuando intentamos implementar la aplicación desde el proyecto del cliente utilizando MSDeploy, solo se está publicando el dll del sitio web base. Esto está bien para algunas cosas, hacer referencia al código compilado es útil, pero hay otros elementos como imágenes, páginas js, htm, etc. que siguen siendo fuente necesaria para que la aplicación cliente funcione. Necesitamos más que el código compilado de nuestro sitio web base.

Todo eso se dice, no puedo pensar en un par de opciones aquí:

  1. continúan desplegando en 2 pasos. Primero, el sitio web base, luego el sitio web del cliente para construir el producto completo.
  2. Modificar el proceso de implementación para copiar los archivos fuente requeridos desde el proyecto base
  3. Reestructurar nuestro modelo para que admita esta relación base-cliente de una manera diferente. No estoy seguro de cómo funcionaría esto, y sería la opción menos viable.
  4. ??

¿Hay una opción diferente que me falta? ¿Estoy haciendo algo mal con la forma en que estoy configurando mis proyectos? ¿Hay algo más para hacer que una aplicación web haga referencia a otra aplicación web además de compartir el código compilado? Si ese es el caso, ¿por qué no usarías una biblioteca de clases compartida? ¿O quizás me falta algo con el proceso de MS Deploy?

Estoy abierto a sugerencias aquí ya que siento que me falta algo. No creo que nuestro modelo para nuestras aplicaciones web sea demasiado único.

Actualización: El proceso de implementación dual funciona, pero se siente un poco tonto. Cualquier otra entrada?

+6

Por cierto, sí, su modelo es inusual. Pero huye de los "proyectos" del sitio web en cualquier caso. Son únicos, y no en el buen sentido. –

+0

Ya hemos sabido por un tiempo que los proyectos de sitios web son .. umm, "especiales" en varias formas. A veces es difícil arreglar algo que no está roto. ¿Qué hace que nuestra estructura sea tan única? Otra opción concebible es hacer que cada proyecto contenga la fuente completa de la aplicación y establecer algún tipo de fuente de bifurcación. Sin embargo, ya lo hemos hecho antes, y se hace muy difícil mantener los cambios. – yourbuddypal

+1

No he pensado en utilizar la bifurcación en este escenario anteriormente, pero para su información, la bifurcación en TFS 2010 es mucho más fácil de usar que en el pasado. Vale la pena echarle un vistazo. También le recomiendo que separe cuidadosamente y aísle las partes específicas del cliente de su aplicación de las partes comunes. Cree puntos de extensibilidad y personalización específicos dentro de la aplicación. Eso hará que sea más fácil ver la mejor manera de implementar esto. También hay trucos divertidos que puedes jugar con MSDEPLOY. Ver http: //www.amazon.com/Inside-Microsoft-Build-Engine-Foundation/dp/0735645248 –

Respuesta

0

¿Cómo se "comparte" el sitio entre los clientes? ¿Cada cliente finalmente obtiene un sitio diferente (dirección IP, etc.) o inicia sesión en el mismo sitio pero obtiene una funcionalidad diferente? Es posible que desee buscar agregar TODA la funcionalidad en un solo proyecto y luego habilitar/deshabilitar la característica a través de la configuración.

0

Si he entendido bien su pregunta, desea publicar también elementos que no están compilados (htm, JS, imágenes, etc.).

Por lo tanto, cada archivo en su pestaña Solution Explorer tiene sus propias propiedades (accedidas por la tecla F4) que le permiten elegir la acción de compilación (por ejemplo, compilar -> inyectará el elemento en la DLL si corresponde, content -> will Copie el archivo "tal cual" al directorio de salida.

Creo que la acción de compilación "contenido", con la opción "copiar en el directorio de salida" establecida en "copiar si es más reciente", puede ser la solución que está buscando.

0

Analizaría cuidadosamente lo que está compartiendo entre proyectos y cómo los comparte.

Si se trata de código compilado, la forma correcta es extraer esas clases en su propio espacio de nombre y ensamblado, y compartir la DLL en todos los proyectos. Asegúrese de seguir los principios OO y SOLID mientras refactoriza.

Si comparte contenido (js, htm, images, css), tiene algunas opciones aquí. Puede crear un directorio virtual independiente para el contenido y hacer referencia a su contenido con una URL absoluta. Esto ayuda porque más adelante en la línea si alguna vez desea separar un proyecto en su propio sitio web en IIS, no tiene que cambiar las URL de contenido. También puede tener todo el contenido en su sitio web base y luego hacer referencia al contenido de los otros proyectos usando una ruta relativa relativa al sitio web base.

Por otro lado, si se trata de controles de usuario ASP.NET o ASP.NET MVC vistas que le gustaría compartir, es mejor crear un elemento individual en cada proyecto. Esto no significa necesariamente que haya un archivo físico separado en esa ruta; también puede agregar elementos en un proyecto .NET en Visual Studio que sean solo enlaces de referencia.

En cuanto al proceso de implementación, no creo que haya nada de malo en los proyectos del sitio web per se. Los proyectos de sitios web tienen un propósito diferente al de los proyectos de aplicaciones web, el principal es que no tiene que compilar sus clases cada vez que implementa un código (siempre que se encuentren en las carpetas de aplicaciones correctas). Sugiero apegarme al proceso de implementación de 2 pasos con proyectos de sitios web.

También revisaría los sitios web (directorios virtuales) creados en IIS y consideraría anidarlos si tuviera sentido. Y una revisión de los grupos de aplicaciones (ya sean separadas o compartidas) no dañaría tampoco.

Por último, esta es una vieja pregunta. Por favor, comparta si ya ha implementado una estrategia exitosa.

1

Al usar el ensamblado WebResource puede agregar CSS/JS/Algún otro archivo como referencia junto con el Código, es decir, su DLL de Proyecto Base.

Si estoy en lo cierto, puede Agregar este WebResource en su proyecto base y luego ir a través del siguiente enlace.

http://support.microsoft.com/kb/910442

gusta esta manera, la mayor parte de las herramientas de terceros se entra a su CSS y JS.

Pruebe esto. Espero que ayude

Cuestiones relacionadas