paginas - ¿La mejor forma de compartir controles ASP.NET.ascx en diferentes aplicaciones de sitios web?
objetos asp net (10)
Además de lo que dijo Tundey, la extensión de shell NTFS Link es útil cuando se trata de compartir una gran cantidad de contenido (por ejemplo, una carpeta con .ascx / .aspx) entre proyectos independientes. En caso de código, creo que es preferible hacer otra copia de trabajo de VCS.
Supongamos que tiene 2 aplicaciones ASP.NET diferentes en IIS. Además, tiene algunos controles ASCX que desea compartir en estas 2 aplicaciones.
¿Cuál es la mejor manera de crear una "biblioteca de control de usuario", para que pueda usar la misma implementación de control en las 2 aplicaciones, sin tener que duplicar el código?
Los controles tienen ASCX con código HTML + detrás.
Los controles compuestos serán difíciles, porque trabajamos con diseñadores que usan la sintaxis HTML en los archivos ASCX para dar estilo a los controles.
Tundey, usamos SVN aquí. ¿Tiene un ejemplo sobre cómo implementar su sugerencia? ¿Cómo puede SVN compartir los controles de ASP.NET?
¡Gracias!
Debería crear controles compuestos en lugar de controles .ASCX si desea poder usarlos en proyectos separados.
Eche un vistazo a esto: http://www.codeproject.com/KB/aspnet/ASP2UserControlLibrary.aspx?msg=1782921
El mayor problema que he notado con los controles en ASP.Net es que no se puede obtener fácilmente el soporte del diseñador para construir el control y usar el control en un sitio una vez que lo construyó. La única forma que he podido hacer es crear un control .ascx sin código subyacente (es decir, todo el código del lado del servidor está en una etiqueta de script en el archivo .ascx con el atributo runat = "server") .
Pero incluso entonces, todavía tiene que copiar el archivo .ascx, por lo que si alguna vez necesita hacer un cambio, eso significa que debe actualizar el archivo en cada ubicación donde lo haya usado. Así que sí, asegúrate de que esté en control de fuente.
Hace poco hice una aplicación web que solo hacía referencia a los archivos (aproximadamente 90 en total) desde una aplicación web (aspx, master y ascx) sin demasiado problema. Eso decía que estaba usando una versión muy modificada del patrón MVP , muchas interfaces y convenciones para mantener la complejidad baja, el mismo nivel medio y un sitio era un subconjunto del otro.
Grandes temas:
- Las páginas maestras (y, a su vez, los diseñadores y el formato de vista html) no funcionan en un archivo al que se hace referencia, por lo que pierde mucha funcionalidad. Un paso previo a la compilación y un montón de svn: ignorar entradas fue mi hack alrededor de esto. También fue un fastidio lograr que CruiseControl.NET hiciera que la tarea de preconstrucción se ejecutara en las carpetas correctas.
- Las páginas / controles compartidos deben ser extremadamente conscientes de lo que tocan y de las referencias para evitar agregar dependencias adicionales.
- Ambos sitios están bloqueados para su implementación.
- Ahora tengo que rezar para que el mantenedor lea mi pequeño documento sobre el desastre que hice. Está muy lejos de lo que he visto en los proyectos de ASP.NET.
Estaba bajo una gran presión de tiempo para que funcione, y ahora ambas aplicaciones están en producción. No lo recomendaría, pero si está interesado, comience en:
Agregue el elemento existente , seleccione algunos archivos, haga clic en la flecha del botón Agregar y diga Agregar como un enlace .
Logré hacer esto sacrificando parte de la facilidad de construir los controles en primer lugar.
Puede crear un proyecto de Biblioteca de control que generará una DLL de biblioteca de control para usted. El inconveniente es que debe crear los controles solo con código. En mi último proyecto, esto estuvo bien. En controles más complicados, esto puede ser un problema.
Aquí hay un ejemplo:
<DefaultProperty("Text"), ToolboxData("<{0}:BreadCrumb runat=server />")> _
Public Class BreadCrumb
WebControl
<Bindable(True)> _
Property Text() As String
''...''
End Property
Protected Overrides Sub RenderContents(output as HtmlTextWriter)
output.write(Text)
End Sub
Private Sub Page_Load(...) Handles MyBase.Load
'' Setup your breadcrumb and store the HTML output ''
'' in the Text property ''
End Sub
End Class
Todo lo que pongas en esa propiedad de Texto será renderizado.
Entonces, cualquier control que pongas aquí puede funcionar como cualquier otro control que uses. Simplemente importe en su Toolbox, haga su referencia de registro, luego póngalo en la página ASP.
Tengo una sugerencia. Podemos utilizar el control del usuario en múltiples aplicaciones creando el control del usuario dentro del proyecto del sitio web de la forma habitual. Luego, cambiemos la propiedad del sitio web. Use nombres fijos y ensamblajes de una sola página. Luego, podremos usar el dll de control del usuario en múltiples aplicaciones.
Una alternativa es usar su herramienta de control de origen para "compartir" los controles ASCX entre sus aplicaciones web. Esto le permitirá realizar cambios en los controles en cualquiera de las aplicaciones y hacer que el control de origen asegure que los cambios se reflejen en nuestras aplicaciones web.
Uso StarTeam aquí y le permite "compartir" objetos (archivos, solicitudes de cambio, requisitos, etc.) en varias carpetas. No estoy seguro de si Subversion (SVN) tiene esa característica. Si no es así, aquí hay otro truco que puede usar: crear un cruce desde la ubicación principal de los controles a una ubicación en los otros proyectos. Un cruce es como un enlace simbólico de Unix. Puede descargar la herramienta para crear uniones en Windows desde aquí
Scott Guthrie brinda buenos consejos sobre cómo configurar un proyecto de biblioteca de control de usuario y luego utiliza eventos de preconstrucción para copiar los controles de usuario en múltiples proyectos. Funciona realmente bien.
http://webproject.scottgu.com/CSharp/usercontrols/usercontrols.aspx