C# 模块化ASP.NET MVC网站

C# 模块化ASP.NET MVC网站,c#,asp.net-mvc,architecture,C#,Asp.net Mvc,Architecture,我目前正在重构一个巨大的ASP.NETMVC网站。我试图实现的主要思想是在同一个解决方案中拥有一个主(前端)网站和几个单独的网站,这些网站可以单独部署。原因是我们有不同的团队在不同的项目上工作。 当前设置如下所示: 主网站ASP.NET MVC 单元1(区域) 单元2(区域) 其他模块 公共业务层 公共数据层 公共视图层 在对模块进行更改时,您必须部署主网站(因此,尽管区域作为单独的项目,但它们不能单独部署)。区域正在为视图使用RazorGenerator。公共视图层生成用于主网站/模块的嵌

我目前正在重构一个巨大的ASP.NETMVC网站。我试图实现的主要思想是在同一个解决方案中拥有一个主(前端)网站和几个单独的网站,这些网站可以单独部署。原因是我们有不同的团队在不同的项目上工作。 当前设置如下所示:

  • 主网站ASP.NET MVC
  • 单元1(区域)
  • 单元2(区域)
  • 其他模块
  • 公共业务层
  • 公共数据层
  • 公共视图层
在对模块进行更改时,您必须部署主网站(因此,尽管区域作为单独的项目,但它们不能单独部署)。区域正在为视图使用RazorGenerator。公共视图层生成用于主网站/模块的嵌入式资源

有什么解决办法吗

我现在试图完成的是将模块从区域中提取到完整的ASP.NET MVC网站中,并在IIS中将它们作为子域映射到主网站。这里的问题是,我在所有项目中都有重复的视图、样式和布局,对主菜单、样式等进行更改意味着要遍历所有项目并进行相同的更改。这不是一个可行的选择


谢谢你的想法

因此,答案还取决于您是想要有多个解决方案(*.sln),还是只需要一个解决方案和多个mvc项目

Ad.1多个sln/目录。

在这种情况下,可能有趣的选择是使用一些静态内容(如样式、脚本等)配置虚拟目录。这样的虚拟目录可以很容易地在IIS上配置:

Ad.2一个解决方案,多个MVC项目:

然后我建议添加一些解决方案文件夹,如“公共表示层文件”->,然后我会将所有要共享的文件移动到该解决方案文件夹中。接下来在这些MVC项目中,我将做以下事情=>右键单击=>添加现有项=>作为链接。 因此,您将拥有原始文件的副本/快捷方式。您应该只在该公共文件夹中进行更新,并且更改将在所有其他mvc项目中可见。然后,您可以单独发布MVC项目,如果这些静态文件的属性正常,则在发布期间将复制所有文件。所以结构看起来像:

解决方案:

  • MVC应用程序1(项目)
  • MVC应用程序2(项目)
  • “通用表示层文件”(解决方案文件夹)
  • 其他项目(项目)

一个项目==一个网站。如果您希望当前区域是独立的站点,那么将它们划分为各自的项目。您可以将子域映射到区域,如果这就是您想要的,但是您仍然需要一次性部署整个网站,包括所有区域。没有办法只部署一个区域。嗨,Chris,有没有一个解决方案可以有单独的可部署项目,但有一个共同的视图?到目前为止,我找到的唯一解决方案是为这些视图、样式和脚本创建一个NuGet包,并将其添加到所有项目中。这实际上可能是最好的方法。您可以使用RazorGenerator通过类库共享视图,但静态资源仍然是一个问题。静态文件的唯一实际选择是将它们托管在单独的域中,并在该域的项目中引用它们。