Répondre

15

Je suis responsable du développement d'ASP.NET MVC chez Microsoft.

Il n'est pas prévu d'inclure des zones multi-projets dans ASP.NET MVC 3. Cependant, il s'agit certainement d'un domaine que nous envisageons de revoir dans le futur.

En attendant, les solutions de MvcContrib sont probablement le meilleur pari. Le téléchargement de MVC Futures comprend toujours une version ancienne (et peut-être seulement semi-fonctionnelle) de la fonction originale de zones multi-projets. Comme le code source complet est également disponible, vous pouvez créer une solution personnalisée selon vos besoins.

+20

Ceci est, à mon humble avis, la partie la plus faible de ASP.NET MVC pour le moment. J'espère que l'équipe de MVC travaillera sur ceci dès que possible. Etre capable de créer un environnement modulaire est définitivement un must pour nous. – W3Max

+0

La synchronisation de MVC4 pourrait être un peu plus tôt mais avec l'entreprise LOB dans les limbes avec Silverlight, vous devez avoir l'histoire solidifiée pour passer à MVC4 .... j'espère que P & P peut s'impliquer avec un exemple de soie! – felickz

6

J'ai besoin d'avoir la même structure donc j'ai compris comment avoir des zones en tant que projets séparés. Il n'y a aucun changement de code nécessaire, juste un peu de travail de configuration que vous avez à faire.

Je vais créer une entrée de blog à ce sujet mais voici les étapes de base. Supposons que vous ayez un seul projet d'application MVC et que ce soit votre application "shell". Faites un clic droit sur le projet shell et "Ajouter une zone ...". Tapez le nom de la zone. Cela créera un dossier Areas avec votre zone dedans. (Ce n'est pas 100% nécessaire mais vous avez besoin du dossier "Areas" et vous pouvez voler la classe XXXXAreaRegistration pour votre application.)

  • Créez un nouveau projet MVC3 vide dans votre solution pour correspondre à votre région. Déplacez le fichier XXXXAreaRegistration.cs vers le nouveau projet et ajustez l'espace de noms le cas échéant.

  • Supprimez le dossier sous le dossier de zones que l'assistant de modèle a ajouté.

  • Modifiez le fichier web.config du nouveau projet et supprimez les chaînes de connexion ainsi que les sections d'authentification, d'appartenance, de profil et de rolemanger. Vous n'avez pas vraiment besoin de web.config mais le rasis intellisense ne fonctionne pas sans elle.

  • Créez un répertoire virtuel dans le dossier "Areas" du projet shell avec le nom de votre zone comme alias et pointez-le sur votre projet "area". Vous devrez utiliser IIS ou IIS Express pour cela. J'utilise IIS. Dans IIS Express, vous devez modifier le fichier de configuration. Je pense que ScottGu avait une entrée de blog sur la façon de faire cela.

  • Créez un événement post-build sur votre projet "zone" pour copier la DLL dans le dossier bin "shell". Mon événement de génération est: copy $ (TargetDir) \ $ (TargetFileName) $ (SolutionDir) \ ShellProjectName \ bin \ $ (TargetFileName)

  • Dans le shell web.config, ajoutez le projet "area" dans System.Web/Section des assemblages. Au lieu de 6/7, vous pouvez simplement référencer le projet "zone" avec le projet "shell" et cela fonctionne tout aussi bien.Mais, alors vous devez déployer toutes les DLL "zone" à chaque fois. Je vais probablement faire un certain type de code de sondage pour ajouter les assemblages "area" au domaine de l'application au démarrage de l'application en utilisant la réflexion ou MEF.

    Vous pouvez également modifier votre routage et lui ajouter le filtre d'espace de noms dans l'application shell et dans l'application de zone. De cette façon, vous n'avez pas à vous soucier des noms de contrôleurs en double qui sont en conflit entre l'application de vente et les applications de la zone.

    C'est à peu près tout. Une fois que je recevrai une entrée de blog officielle, j'essaierai de me souvenir d'y ajouter un lien ici.

    J'ai blogué comment je fais cela au http://bob.archer.net/content/aspnet-mvc3-areas-separate-projects si quelqu'un est intéressé.

  • +0

    Hmm semble intéressant. En attendant de voir votre entrée de blog spécialement la partie MEF – Tassadaque

    +0

    Après d'autres tests j'ai déterminé qu'aucune référence n'est nécessaire pour les projets de zone. Apparemment, le code MVC utilise BuildManager pour obtenir une liste d'assemblages. Ainsi, vous n'avez rien d'autre à faire que de configurer vos projets "area" pour les afficher dans le dossier bin des projets shell. – PilotBob

    +0

    J'ai blogué comment je le fais à http://bob.archer.net/content/aspnet-mvc3-areas-separate-projects si quelqu'un est intéressé. – PilotBob