ASP.Net MVC 3中的多项目区域

Tas*_*que 22 asp.net-mvc visual-studio-2010 mvccontrib asp.net-mvc-3 asp.net-mvc-2

有没有人对asp.net mvc 3中的多项目区域支持有任何想法?因为它在mvc 2中降级为未来状态.如果它仍未包括在内,那么我们是否应该通过MvcContrib期待ASP.Net MVC Portable Areas.你可以分享你的经历吗?

管理大型应用程序的推荐方法是什么?我读到了MEF.在什么情况下建议使用MEF?

Eil*_*lon 15

我是微软ASP.NET MVC的开发负责人.

没有计划在ASP.NET MVC 3中包含多项目区域.但是,它绝对是我们计划在未来重新审视的领域.

与此同时,MvcContrib的解决方案可能是最好的选择.MVC期货下载仍包括原始多项目区域功能的旧版(也许只是半功能版).由于它的完整源代码也可用,您可以构建一个根据您的需求定制的解决方案.

  • 在我看来,这是ASP.NET MVC中最薄弱的部分.我希望MVC团队能够尽快开展这项工作.能够创建模块化环境绝对是我们必须的. (20认同)

Pil*_*Bob 6

我需要有相同的结构,所以我想出了如何将区域作为单独的项目.不需要更改代码,只需要进行一些配置工作.

我将在此创建一个博客条目,但这是基本步骤.

假设您有一个MVC应用程序项目,这将是您的"shell"应用程序.

  1. 右键单击shell项目并"添加区域...".输入区域名称.这将创建一个区域文件夹,其中包含您的区域.(这不是100%需要,但你需要"Areas"文件夹,你可以窃取你的应用程序的XXXXAreaRegistration类.)

  2. 在您的解决方案中创建一个新的MVC3空项目以匹配您的区域.将XXXXAreaRegistration.cs文件移动到新项目并根据需要调整命名空间.

  3. 删除模板向导添加的区域文件夹下的文件夹.

  4. 修改新项目的web.config并取出连接字符串以及身份验证,成员资格,配置文件,rolemanger部分.你真的不需要web.config,但如果没有它,razor intellisense就无法运行.

  5. 在shell项目的"Areas"文件夹中创建一个虚拟目录,并将您的区域名称作为别名,并将其指向"区域"项目.您需要使用IIS或IIS Express.我使用IIS.在IIS Express中,您必须修改配置文件.我认为ScottGu有关于如何做到这一点的博客文章.

  6. 在"区域"项目上创建一个构建后事件,将dll复制到"shell"项目bin文件夹.我的构建事件是:copy $(TargetDir)\ $(TargetFileName)$(SolutionDir)\ ShellProjectName\bin\$(TargetFileName)

  7. 在shell web.config中将"area"项目添加到System.Web/Assemblies部分.

您可以使用"shell"项目引用"区域"项目,而不是6/7,它也可以正常工作.但是,每次你必须部署所有"区域"dll.我可能会做一些类型的探测代码,在app启动时使用反射或MEF将"区域"程序集添加到app域.

您可能还想编辑路由并在shell应用程序和区域应用程序中添加命名空间过滤器.这样您就不必担心卖家应用和区域应用之间存在重复的控制器名称冲突.

就是这样.一旦我发布了正式的博客文章,我会尽量记住在这里添加链接.

如果有兴趣的话,我在http://bob.archer.net/content/aspnet-mvc3-areas-separate-projects上写了我的博客.