2009-08-14 22 views
10

Tenemos un conjunto de controles de usuario que nos gustaría extraer de una aplicación web y en un ensamblado/biblioteca por separado, y pensé que sería tan simple como crear una biblioteca de clase y extraer los archivos ascx y ascx.cs en el proyecto y la compilación de una DLL para reutilizar entre nuestras aplicaciones.Biblioteca de control de usuario web de ASP.NET

No fue así, sin embargo.

Nuestro objetivo final es tener una sola DLL distribuible (similar a cómo Telerik distribuye sus controles) que podemos incluir en cualquier aplicación web. Los pasos aquí: Turning an .ascx User Control into a Redistributable Custom Control fueron muy simples de seguir, sin embargo, esto da como resultado muchos archivos llamados controlname.ascx.guid.dll, que no es el resultado deseado. Ni siquiera puedo hacer que funcionen de todas formas, ya que tenemos clases adicionales que deben compilarse en el ensamblado.

¿Alguien ha creado con éxito una biblioteca de control de usuario web en .NET (estamos usando 3.5 aquí)? Parece que no puedo encontrar una buena guía paso a paso.

Respuesta

7

Si desea compartir controles entre proyectos, mi experiencia ha demostrado que la mejor manera es crear controles de servidor asp.net personalizados en lugar de controles de usuario. Los controles de usuario son buenos para compartir dentro del mismo proyecto, pero no sobre múltiples.

Para este propósito, le sugiero que cree un conjunto de controles de servidor personalizados dentro de una biblioteca de clases y los use en todos sus proyectos.

This book hace un buen trabajo de explicar los fundamentos de crear controles de servidor

Editar:
Actualmente estoy desarrollando una biblioteca de control de servidor Web .NET. De hecho, no seguí ninguna guía paso a paso. En su mayoría, consideré usar el libro que mencioné anteriormente y la biblioteca MSDN + Reflector, que es una gran herramienta para inspeccionar los controles de servidor MS existentes y aprender de ellos.

+0

Sí, estábamos considerando eso. – Keith

+0

¿Considera escribir controles de servidor personalizados? – Juri

+0

Sí, pero el problema radica en el hecho de que los controles de usuario actualmente usan controles asp.net en todo momento. Preferiría no tener que escribir el HTML para emular un ListView que tenemos dentro de un control de usuario, por ejemplo. – Keith

9

Me doy cuenta de que este es un tema antiguo, pero si alguien está buscando una solución para crear bibliotecas de control de usuario reutilizables, resulta que es bastante simple. Aquí hay dos buenos guías paso a paso a lo largo de con el código fuente:

De MSDN: Turning an .ascx User Control into a Redistributable Custom Control

De Proyecto Código: Straight way to create ASP.NET user controls library

El segundo enlace proporciona una solución a los múltiples archivos DLL creadas por la primera enlazar.

2

Encontré el tutorial Creating and Using User Control Libraries pero parece un poco complicado ya que depende de un evento de línea de comando posterior a la compilación para copiar los controles de usuario de un proyecto a otro.

2

Algo tarde, lo admito.

Para crear una biblioteca reutilizable de controles de usuario; cree un nuevo Proyecto de Aplicación Web, elimine todos los andamios, agregue un (número de) control (es) de usuario. Cree un Proyecto de Implementación Web desde el Proyecto de Aplicación Web, en las propiedades WDP elija la opción Combinar todos los resultados de control y asigne un nombre para la biblioteca y asegúrese de que Permitir que este sitio web sea actualizable NO está marcado.

Compilar el WDP y usar Reflector para examinar la biblioteca generada; verá que contiene un espacio de nombres ASP y los tipos que ha diseñado cuidadosamente se han renombrado, es decir, usercontrol_ascx. En su (s) sitio (s) web objetivo (s) agregue referencias a AMBOS los dlls de salida de su WDP, agregue un sistema.web/pages/controls node to web.config usando el espacio de nombres ASP y el nombre del ensamblado que definió en el WDP.

Ahora cuando se utiliza la biblioteca en una página (por ejemplo) debe utilizar el alias que ha definido en web.config y typename como se ve en el reflector es decir

<ucl:usercontrol_ascx ... /> 

me pareció útil añadir una dependencia para los sitios web en el WDP para que el WDP se construya antes que los sitios web; ahora puedo cambiar los controles de usuario en el WAP sin tener que recordar construir el WAP antes de construir el (los) sitio (s) web.

Espero que alguien lo encuentre útil, ya que me costó unos pelos grises llegar a esta etapa y todavía tengo VS hacer su cosa "automágicamente".

Cuestiones relacionadas