Actualmente estoy experimentando con áreas cargadas dinámicamente con ASP.NET MVC 3 RC. Lo he visto escrito en muchos lugares que esto no es para lo que están destinadas las áreas, y (al menos antes de MVC 2) no es posible, digamos here por ejemplo.ASP.NET MVC 3 RC AreaRegistration.RegisterAllAreas() y ensamblados cargados dinámicamente
¡Pero aún así! Debería ser posible hacer que funcione, ¿verdad? Creé una solución, agregué un proyecto MVC 3, agregué un área y algo de contenido. Todo está funcionando bien. Ahora, creé un nuevo proyecto de biblioteca de clases (en la misma solución), agregué una referencia al proyecto MVC y comencé a trasladar las partes relacionadas con el área a la biblioteca. Se cambió el directorio de salida del proyecto de biblioteca a la carpeta de área del proyecto MVC y se aseguró de que las Vistas y su web.config se copiaran en la carpeta de salida.
Después de leer tanto acerca de cómo no se podían tener áreas externas, fue un poco sorprendente que esto funcionara. ¡Ningún problema realmente! El problema comienza cuando elimino la referencia entre los proyectos y, en su lugar, cargo la biblioteca en el código. (Antes de llamar al AreaRegistration.RegisterAllAreas()
.) Ahora no funciona. En absoluto.
He estado hurgando un poco en la fuente de MVC 3, y el problema parece ser con BuildManager.GetReferencedAssemblies()
que se usa para que los ensambles busquen implementaciones de AreaRegistration
.
Ahora, no estoy 100% seguro de esto, pero parece como si este método solo mira los ensamblados que estaban presentes/referenciados en tiempo de compilación, ¿alguien puede confirmar si esto es así?
He depurado esto, y esa llamada a método no encuentra realmente el conjunto que cargué justo antes de la llamada. Puede ser por algo más que me he perdido, quizás ... ¿Alguna idea?
respuesta perfecta, gracias a mil! Sí, sé que en este momento es básicamente lo mismo que tener solo un proyecto, pero quería separarlos lentamente y ver dónde golpeo los problemas a medida que fui, en lugar de todos los problemas a la vez :) Estoy considerando tal vez compilar en las vistas como recursos en el ensamblaje y hacer mis propias implementaciones de ruta virtual/archivo, a menos que eso sea un problema de rendimiento. Como dije, solo estoy jugando en este momento para ver qué es posible y qué no. ! ¡Gracias de nuevo! – Robin
Es posible que desee considerar marcar todas las vistas en el ensamblado de su área como recursos integrados y ver cómo implementar un proveedor de ruta virtual. Eso es lo que hice para lograr conjuntos de área de arrastrar y soltar que podría colocar en el directorio bin del sitio principal. –
@Joshua Hayes - ¿me puede enviar su solución de áreas conectables? –