Compilación / incrustación de controles de usuario ASCX con plantillas para su reutilización en múltiples aplicaciones web

Estoy en un rascador de cabeza real aquí ... y parece ser uno de los temas más frustrantes de ASP.NET.

Tengo un ensamblaje que implementa un montón de cosas personalizadas de Linq, que en su núcleo no tiene ninguna funcionalidad web. Tengo un conjunto adicional que amplía este conjunto con un comportamiento específico de la web.

El comportamiento específico de la web viene con un par de controles de usuario marcados dentro de UserControls con plantilla de ASCX.

Estoy teniendo problemas para poner un buen acabado en este ensamblaje, de modo que es fácil de volver a implementar para su uso en otras aplicaciones. Déjame repasar lo que he intentado hasta ahora:

Copió los archivos ASCX a la aplicación web consumidora utilizando eventos de compilación;Lejos de ser ideal y toda una pesadilla de despliegue..Implementé un VirtualPathProvider personalizado e incrusté las plantillas ASCX dentro del ensamblaje como recursos incrustados. Desafortunadamente, al usar la directiva de registro en la aplicación consumidora, crea la declaración del diseñador como UserControl, donde requeriría una declaración del tipo de control real;imprevisto (típicamente) e indeseable.Creé un proyecto de implementación web para compilar los UserControls, pero los controles de usuario compilados se convierten en parte de otro conjunto y ya no descienden de las definiciones de clase en mi conjunto web.El ensamblaje necesita crear una instancia de ellos dependiendo del contexto de la solicitud..

Así que el número 1 es simplemente una porquería, el número 2 no me da el tipo de soporte que deseo y el número 3 creo que estoy a punto de producir una solución razonable con:

Agrupar todas las clases sin control en elApp_Code carpeta, prepare una clase de fábrica que construirá un objeto del tipo de control deseado utilizando la reflexión y la expectativa de que el tipo que se refleja estará presente en la salida del despliegue (esperemos que esté garantizada por la presencia delClassName atributo en elControl directiva).

También hay siempre la otra opción de volver a escribir los controles ASCX en controles personalizados, pero simplemente no tenemos los recursos para considerarlo en este momento, y no tenemos experiencia en hacer eso, y funcionan bien como UserControls.

¿Me estoy perdiendo algo obvio, tal vez algo mucho más simple, o es esto intencionalmente difícil? He leído historias sobre el proceso de compilación de ASP.NET que es muy desafortunado en su diseño en mis viajes a través de este tema.

Respuestas a la pregunta(1)

Su respuesta a la pregunta