Esto es lo que quiero lograr, quiero separar áreas de ASP.NET MVC como una sola DLL.¿Cómo crear el área ASP.NET MVC como un complemento DLL?
- Blog.DLL
- Forums.DLL
- FAQ.DLL
Cada una de ellas son individuales ASP.NET MVC Área, con su propia CSHTML por defecto o páginas ASPX. Instalar, migrar y mantener muchas páginas, incluidos recursos, javascripts, etc., son un verdadero dolor a largo plazo. Como la mayoría de estos apenas cambiará.
Mi sitio web final será así.
\MvcApplication
\bin
\MvcApplication.bin
\Blog.dll
\Forums.dll
\Controllers
\..
\Models
\..
\Views
\..
\Global.asax
\Web.config
Sin agregar nada, simplemente soltando Blog.dll, mi aplicación debe ser compatible con/blog y todas sus páginas. Si quiero personalizar algo, de lo que puedo añadir zona, y añadir sólo las páginas cshtml ..
\MvcApplication
\bin
\MvcApplication.bin
\Blog.dll
\Forums.dll
\Areas
\Blog
\Views
\Shared
\BlogLayout.cshtml <-- this will override the look
\Controllers
\..
\Models
\..
\Views
\..
\Global.asax
\Web.config
Esto ayudará en la reutilización de ASP.NET Área plugins, más que soltar el archivo DLL en la carpeta bin. Sin embargo, web.config puede requerir algunos cambios, pero lo más probable es que guardemos los valores de configuración en la base de datos y solo lo necesario será "cadena de conexión de Entity Framework" en web.config.
Mis retos (preguntas)
- es posible? Seguro que me parece, pero ¿habrá algún problema de reflexión/permiso?
- ¿Cómo incluyo las vistas cshtml/aspx dentro de una DLL? ¿Probablemente versiones compiladas? He visto un par de plantillas de texto basadas en View Engines en Codeplex pero no estoy muy seguro de cómo usarlas.
- ¿Y cómo hago para que ViewEngine compruebe primero si el archivo de directorio físico existe o no y luego miro dentro de cshtml/aspx dentro del dll mismo como archivo de recursos?
¿Qué pasa con el archivo aspx? Principalmente solo usamos cshtml, pero para imprimir PDF, cshtml no funciona con etiquetas html desconocidas, por lo que usamos aspx algunas veces. –
No sé sobre ASPX. Ha pasado mucho tiempo desde que dejé de usarlo. Tal vez el proveedor de ruta virtual podría ser adaptado. –
Puede usar EmbeddedResourceVirtualPathProvider que se puede instalar directamente desde Nuget. Funciona con archivos de activos. https://github.com/mcintyre321/EmbeddedResourceVirtualPathProvider#readme – mcintyre321