我可以向您推荐两种种方式来组织您的多模块项目。
选项 1 - 在同一个 Web 项目中为每个模块创建 区域
一种方法是在同一个 MVC 项目中创建单独的 Area。所以每个模块都有一个单独的区域,有单独的控制器、视图、脚本等。但是,
(1) 这仍然会为整个 MVC 项目创建一个 dll
(2) 在某些情况下,跨区域共享文件可能不是很容易(您可以将所有模块的所有脚本保存在一个共享目录中)
选项 2 - 为每个模块创建 类库,在构建后合并
另一种方法是为每个模块创建一个 class library 项目。添加对System.Web.Mvc 和其他库的引用,以便它可以拥有controllers 等。创建您自己的视图、脚本和其他文件夹,并根据需要填充文件。
现在,您的所有模块都将构建为单独的项目,包含 dll 文件和 javasvripts、htmls、csss、图像等。使它们都作为单个 @987654331 工作@你可以创建一个(只有一个)MVC web 项目,该项目将进入 IIS 虚拟目录,并将作为 web.xml 发布。
要使用来自同一 Web 的所有单独模块,您可以在所有这些库中编写 post build 事件,以将工件(dll、脚本等)复制到主 Web 中的相应文件夹(dll 到 \bin, javascript 到 \scripts 等)。因此,在成功构建之后,所有工件都可以在同一个 Web 项目中使用,并且可以部署为包含所有模块的单个 Web。您的后期构建脚本应如下所示
XCOPY "$(ProjectDir)$(OutDir)*.*" "$(ProjectDir)..\YourMainWebDirectory\Bin\" /Y
XCOPY "$(ProjectDir)Content" "$(ProjectDir)..\YourMainWebDirectory\Content\" /S /Y
XCOPY "$(ProjectDir)Scripts" "$(ProjectDir)..\YourMainWebDirectory\Scripts\" /S /Y
XCOPY "$(ProjectDir)Views" "$(ProjectDir)..\YourMainWebDirectory\Views\" /S /Y
XCOPY "$(ProjectDir)Images" "$(ProjectDir)..\YourMainWebDirectory\Images\" /S /Y
现在,
(1) 您有单独的模块用于单独的 dll
(2) 可以直接共享脚本和其他文件,因为它们将在同一位置(构建后)
(3) 如果您决定从 Web 中删除特定模块,只需从该模块(项目)中删除构建后事件,而不影响其他任何内容。您可以随时将其添加回来。
您的整体solution 看起来像
Module01.csproj => post build copy to main
\Controllers
\Scripts
\Views
\Contents
\Images
Module02.csproj => post build copy to main
\Controllers
\Scripts
\Views
\Contents
\Images
Models.csproj
\...
Application.csproj
\...
Main.Web.csproj => main web application hosted in IIS
\Controllers
\Scripts
\Views
\Contents
\Images