Respuesta

15

Soy el líder de desarrollo en ASP.NET MVC en Microsoft.

No hay planes para incluir áreas de proyectos múltiples en ASP.NET MVC 3. Sin embargo, definitivamente es un área que planeamos volver a visitar en el futuro.

Mientras tanto, las soluciones de MvcContrib son probablemente la mejor opción. La descarga de MVC Futures aún incluye una versión antigua (y quizás solo semi funcional) de la función original de áreas de múltiples proyectos. Debido a que el código fuente completo para este también está disponible, es posible que pueda construir una solución que se adapte a sus necesidades.

+20

Esto es, en mi humilde opinión, la parte más débil de ASP.NET MVC en este momento. Espero que el equipo de MVC trabaje en esto lo antes posible. Ser capaz de crear un entorno modular es definitivamente una necesidad para nosotros. – W3Max

+0

El tiempo MVC4 podría ser un poco más rápido, pero con el LOB empresarial en el limbo con Silverlight, necesita tener la historia solidificada para cambiar a MVC4 ... ¡con suerte P & P puede involucrarse con un ejemplo de seda! – felickz

6

Necesito tener la misma estructura así que he descubierto cómo tener áreas como proyectos separados. No se necesitan cambios de código, solo debe hacer un poco de trabajo de configuración.

Voy a crear una entrada de blog sobre esto, pero aquí están los pasos básicos.

Supongamos que tiene un único proyecto de aplicación MVC y esta será su aplicación "shell".

  1. clic derecho sobre el proyecto de concha y "Añadir área ...". Escriba el nombre del área. Esto creará una carpeta de Áreas con su área en ella. (Esto no es 100% necesario pero sí necesita la carpeta "Áreas" y puede robar la clase XXXXAreaRegistration para su aplicación.)

  2. Cree un nuevo proyecto vacío MVC3 en su solución para que coincida con su área. Mueva el archivo XXXXAreaRegistration.cs al nuevo proyecto y ajuste el espacio de nombres según corresponda.

  3. Borre la carpeta debajo de la carpeta de áreas que el asistente de plantillas agregó.

  4. Modifique el archivo web.config del nuevo proyecto y elimine las cadenas de conexión y las secciones de autenticación, membresía, perfil, rol de funciones. Realmente no necesitas el web.config, pero la navaja intellisense no funciona sin él.

  5. Cree un directorio virtual en la carpeta "Áreas" del proyecto de shell con el nombre de su área como el alias y apúntelo a su proyecto de "área". Necesitará usar IIS o IIS Express para esto. Yo uso IIS. En IIS express, debe modificar el archivo de configuración. Creo que ScottGu tenía una entrada en el blog sobre cómo hacer esto.

  6. Cree un evento posterior a la construcción en su proyecto de "área" para copiar el dll a la carpeta bin de proyectos "shell". Mi evento de compilación es: copy $ (TargetDir) \ $ (TargetFileName) $ (SolutionDir) \ ShellProjectName \ bin \ $ (TargetFileName)

  7. En el shell web.config, agregue el proyecto "area" en System.Web/Sección de Asambleas.

En lugar de 6/7 que se acaba de hacer referencia al proyecto "zona" con el proyecto "cáscara" y funciona igual de bien.Pero, entonces debes desplegar todos los dlls de "área" cada vez. Probablemente voy a hacer algún tipo de código de sondeo para agregar los ensambles de "área" al dominio de la aplicación al inicio de la aplicación mediante reflexión o MEF.

Es posible que también desee editar su enrutamiento y agregarle el filtro de espacio de nombres tanto en la aplicación de shell como en la aplicación de área. De esta forma, no tiene que preocuparse por los nombres de controlador duplicados que entran en conflicto entre la aplicación de venta y las aplicaciones de área.

Eso es todo. Una vez que publique una entrada de blog formal intentaré recordar agregar un enlace aquí.

He escrito en mi blog cómo estoy haciendo esto en http://bob.archer.net/content/aspnet-mvc3-areas-separate-projects si alguien está interesado.

+0

Hmm se ve interesante. Esperando ver la entrada de tu blog, especialmente la parte MEF – Tassadaque

+0

Después de realizar más pruebas, he determinado que no se necesita referencia para los proyectos del área. Aparentemente, el código MVC usa BuildManager para obtener una lista de ensamblajes. Por lo tanto, no necesita hacer nada más que configurar sus proyectos de "área" para enviarlos a la carpeta bin de proyectos de shell. – PilotBob

+0

Escribí en mi blog cómo estoy haciendo esto en http://bob.archer.net/content/aspnet-mvc3-areas-separate-projects si alguien está interesado. – PilotBob