visual studio net example asp asp.net visual-studio-2008 web-applications user-controls resources

studio - asp.net login example



¿Cómo comparto controles de usuario entre aplicaciones web en ASP.NET? (7)

Esta pregunta es un seguimiento de mi pregunta sobre compartir recursos entre aplicaciones web , porque aún no he encontrado una buena solución.

Tengo una aplicación web con controles de usuario y recursos que comparten otras tres aplicaciones web.

Solution | +-CommonControlsWebApp | +- resources | | +- images | | +- scripts | | +- stylesheets | +- UserControls | +-WebApp1 | +-WebApp2 | +-WebApp3

Esto es lo que sé hasta ahora:

  • No puedo compilar CommonControlsWebApp en una sola dll ya que estoy creando controles de usuario. Esto solo es posible con controles de servidor personalizados, donde todo está en el archivo de código subyacente. Entonces necesito una forma de compartir los archivos ascx entre los cuatro proyectos.
  • Copiar los archivos de CommonControlsWebApp en los otros tres proyectos no actualiza sus archivos en el explorador de soluciones. Tendría que ''agregar elementos exting'' en las tres WebApps cuando se agrega o cambia el nombre de un archivo en CommonControls.
  • Cambiar al modelo del sitio web solucionaría esto, pero me preocupa el tiempo de compilación para WebApp1-3 si hago esto.
  • ''Agregar como enlace'' no funciona para directorios.
  • Podría usar Subversion para compartir los archivos entre los proyectos, pero creo que esto requeriría que revisara los archivos de entrada y salida todo el tiempo si estoy desarrollando un control de usuario que tengo que probar a través de una de las aplicaciones web.

¿Realmente puede ser cierto que ASP.NET no tiene una buena solución para esto? ¿Cómo están organizando grandes aplicaciones web?

Editar: Muchas gracias por todas las respuestas. Voy a copiar mis controles de usuario con un evento de compilación por ahora, y luego veremos si tenemos tiempo para refactorizarlos en los controles del servidor.


La forma en que lo hacemos en mi compañía actual es asegurarme de que CommonControlsWebApp sea una aplicación web, no un sitio web. Luego, utiliza nombres para las carpetas que ayudarían a identificarlo como los comunes que son distintos de las aplicaciones web individuales. (CommonUserControls en lugar de solo UserControls)

En sus otras aplicaciones web, crea un directorio virtual para CommonUserControls, etc. y agrega una referencia basada en archivos al CommonControlsWebApp.dll

Esto requiere que uses IIS para desarrollo (no casini), y Visual Studio no creerá que los controles realmente existan, pero funcionará en tiempo de ejecución, y puedes construir perfectamente con solo advertencias sobre blahblah.ascx o blahblah.master ruta inválida

Si usa páginas maestras comunes y Visual Studio 2008, necesitará SP1 para 2008 y usar __fallback.master en la raíz de los proyectos web individuales para pasar al modo de diseño.

Sin embargo, vi esto en otro hilo, y voy a buscar hacer más como esto: http://webproject.scottgu.com/CSharp/UserControls/UserControls.aspx


Para compartir los controles entre las aplicaciones web, la única forma que encontré fue reescribirlos en los controles del servidor o utilizar el directorio virtual para hacer que los controles del usuario realmente en la carpeta estén en cada proyecto.

Desafortunadamente, asp.net realmente no tiene una buena solución para esto. Lo mismo es cierto para compartir páginas maestras.


Puede considerar usar control de fuente y compartir sus controles en ese nivel. Hacemos esto para una biblioteca de control de usuarios considerable y funciona bastante bien.

Utilizando SourceGear Vault, pero debería poder hacer esto con cualquier producto de control de origen.


Una opción es probar "Agregar existente" y en el cuadro de diálogo que aparece, el botón OK tiene una flecha al lado, cambiarlo a Agregar con un enlace.

Si eso no funciona, vuelva a escribir sus controles como controles personalizados.

Llevará un tiempo, pero lo hará mucho más fácil de mantener en el futuro.


oye, esta no es la mejor manera de hacer las cosas, pero solía hacer esto en mi asp.net 1.1 días. Puedes probar esto. Cambia tus controles de usuario a un proyecto separado y publica este proyecto como un directorio virtual bajo iis.

siempre que no uses codebehind, tus actualizaciones serían geniales (solo actualizarás la carpeta de control de usuario compartido)

si usa codebehinds: vuelva a implementar las dlls de control de usuario en diferentes proyectos

Una vez que haya terminado con esto, asigne estos controles de usuario a todos los proyectos que utilizan sus rutas virtuales

verifique estos enlaces - http://aspadvice.com/blogs/ssmith/archive/2006/10/05/Tip_3A00_-Share-User-Controls-Between-Applications-in-ASP.NET.aspx

Y

http://www.123aspx.com/redir.aspx?res=30887


Usted podría compilarlo en un dll

Convirtiendo un control de usuario .ascx en un control personalizado redistribuible

Breve resumen de los pasos

Los pasos básicos para que esto suceda son los siguientes:

  1. Escriba su control de usuario como lo haría normalmente, generalmente usando el diseñador de Visual Studio.
  2. Pruébelo usando una página simple antes de intentar implementarlo.
  3. Implemente la aplicación para precompilarla.
  4. Tome el ensamblaje del control de usuario generado por el paso de implementación, y básicamente está listo: tiene su control personalizado.
  5. Finalmente, use su control personalizado en otras aplicaciones

Más información aquí http://www.nathanblevins.com/Articles/Compile-a-Web-User-Control-into-a-DLL-.Net-c-.aspx


Consulte esta publicación para saber cómo resolver este problema.

La idea básica es cambiar su proyecto para tener un paso previo a la compilación para copiar los archivos .ascx a un subdirectorio de la aplicación web. Luego solo refiérase a esas copias cuando las use. Por supuesto, también necesita hacer referencia al ensamblado UserControls también.