我需要有相同的结构,所以我已经想出如何将区域作为单独的项目。不需要进行任何代码更改,只需进行一些配置工作即可。
我将在博客中创建一个条目来介绍这个过程,但以下是基本步骤。
假设您有一个单一的MVC应用程序项目,这将是您的“shell”应用程序。
1.右键单击shell项目并选择“添加区域...”。键入区域名称。这将创建一个包含您的区域的Areas文件夹。(这不是必需的,但您需要“Areas”文件夹,并且可以为应用程序窃取XXXXAreaRegistration类。)
2.在您的解决方案中创建一个新的MVC3空项目以匹配您的区域。将XXXXAreaRegistration.cs文件移动到新项目中,并根据需要调整命名空间。
3.删除模板向导添加的areas文件夹下的文件夹。
4.修改新项目的web.config并删除连接字符串和身份验证、成员资格、配置文件、角色管理器部分。您不需要web.config,但是如果没有它,剃刀智能感知就无法使用。
5.在shell项目的“Areas”文件夹中创建一个虚拟目录,别名为您的区域名称,并将其指向您的“area”项目。您需要使用IIS或IIS Express。我使用IIS。在IIS Express中,您必须修改配置文件。我想ScottGu在如何执行此操作方面有一个博客条目。
6.在“area”项目上创建一个后期生成事件,将dll复制到“shell”项目的bin文件夹中。我的构建事件是:copy $(TargetDir)\$(TargetFileName) $(SolutionDir)\ShellProjectName\bin\$(TargetFileName)
7.在shell web.config中将“area”项目添加到System.Web/Assemblies部分。
您可以只使用步骤6/7引用“area”项目和“shell”项目,这同样有效。但是,每次都必须部署所有“area” dlls。我可能会使用反射或MEF编写某种类型的探测代码,在应用程序启动时将“area”程序集添加到应用程序域中。
您可能还希望编辑路由,并在shell应用程序和区域应用程序中添加命名空间过滤器。这样,您就不必担心销售应用程序和区域应用程序之间的重复控制器名称冲突。
大约就是这样。一旦我发布了正式的博客条目,我将尝试记住在此处添加链接。
如果有人感兴趣,我在
http://bob.archer.net/content/aspnet-mvc3-areas-separate-projects上介绍了我是如何做到这一点的。