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

Posted

技术标签:

【中文标题】ASP.Net MVC 3 中的多项目区域【英文标题】:Multiproject areas in ASP.Net MVC 3 【发布时间】:2011-04-27 08:07:20 【问题描述】:

有人知道asp.net mvc 3 中的多项目区域支持吗?因为它在 mvc 2 中被降级为未来状态。如果它仍然不包括在内,那么我们应该期待ASP.Net MVC Portable Areas via MvcContrib。你能分享你的经验吗?

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

【问题讨论】:

【参考方案1】:

我是微软 ASP.NET MVC 的开发主管。

没有计划在 ASP.NET MVC 3 中包含多项目领域。但是,我们计划在未来重新审视这个领域。

与此同时,MvcContrib 的解决方案可能是最好的选择。 MVC Futures 下载仍然包含原始多项目区域功能的旧版本(可能只是半功能版本)。因为它的完整源代码也是可用的,所以您可以构建一个根据您的需求定制的解决方案。

【讨论】:

在我看来,这是目前 ASP.NET MVC 最薄弱的部分。我希望 MVC 团队能尽快解决这个问题。能够创建模块化环境对我们来说绝对是必须的。 MVC4 的时机可能会更早一些,但随着企业 LOB 与 Silverlight 陷入困境,您需要巩固故事才能切换到 MVC4....希望 P&P 可以参与类似丝绸的示例! 【参考方案2】:

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

我将为此创建一个博客条目,但这里是基本步骤。

假设您有一个 MVC 应用程序项目,这将是您的“shell”应用程序。

    右键单击 shell 项目并“添加区域...”。输入区域名称。这将创建一个包含您所在区域的区域文件夹。 (这不是 100% 需要的,但您确实需要“Areas”文件夹,并且您可以为您的应用程序窃取 XXXXAreaRegistration 类。)

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

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

    修改新项目的 web.config 并取出连接字符串和身份验证、成员资格、配置文件、角色管理器部分。您实际上并不需要 web.config,但如果没有它,razor intellisense 将无法工作。

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

    在您的“区域”项目上创建一个构建后事件,以将 dll 复制到“外壳”项目的 bin 文件夹。我的构建事件是:复制 $(TargetDir)\$(TargetFileName) $(SolutionDir)\ShellProjectName\bin\$(TargetFileName)

    在 shell web.config 中,将“area”项目添加到 System.Web/Assemblies 部分。

您可以使用“shell”项目引用“area”项目,而不是 6/7,它也可以正常工作。但是,您必须每次都部署所有“区域”dll。我可能会使用反射或 MEF 在应用启动时执行某种类型的探测代码以将“区域”程序集添加到应用域。

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

就是这样。一旦我发布了正式的博客条目,我会尽量记住在此处添加链接。

如果有人感兴趣,我会在 http://bob.archer.net/content/aspnet-mvc3-areas-separate-projects 上写下我是如何做到这一点的。

【讨论】:

嗯,看起来很有趣。等待查看您的博客条目,特别是 MEF 部分 经过进一步测试,我确定不需要参考区域项目。显然,MVC 代码使用 BuildManager 来获取程序集列表。因此,您只需设置“区域”项目以输出到 shell 项目 bin 文件夹即可。 如果有人感兴趣,我在 bob.archer.net/content/aspnet-mvc3-areas-separate-projects 写了我是如何做到这一点的。

以上是关于ASP.Net MVC 3 中的多项目区域的主要内容,如果未能解决你的问题,请参考以下文章

ASP.NET MVC 如何使用 ApplicationUser 和其他域类之间的多对多关系

ASP.NET MVC 3、Razor 视图和可移植区域

asp.net mvc+ef框架下的多条件查询

Xamarin 中的 ASP.NET MVC 3 项目给出 System.UnauthorizedAccessException 错误

如何在 asp.net mvc 3 项目中路由 .aspx 页面?

为啥我的 ASP.NET MVC 多实例性能计数器不起作用