这个模块还共享大部分JavaScript、CSS文件和其他文件,这就是我们不想分离MVC项目的原因。是否有办法按模块基础创建单独的dll文件,这样我们就不需要部署或触及其他dll文件了。
欲了解更多信息,请参阅以下内容:
我不知道您是否尝试过使用托管可扩展性框架(MEF),这个框架
可以满足您的需求...我认为下面的链接会更有帮助
如何将MEF与ASP.NET MVC 4和ASP.NET Web API集成
http://www.codeproject.com/Articles/167321/MEF-with-ASP-NET-Hello-World
我可以向您建议两种组织多模块项目的方式。
选项1 - 在同一Web项目中为每个模块创建区域
一种方法是,在同一MVC项目中创建单独的区域。因此,每个模块都将有一个单独的区域,具有单独的控制器、视图、脚本等。但是,
(1) 这仍然会为整个MVC项目创建一个单独的dll
(2) 在某些情况下,跨区域共享文件可能不太容易(尽管您可以将所有模块的脚本放在一个共享目录中)
选项2 - 为每个模块创建类库,并在构建后进行合并
另一种方法是为每个模块创建一个单独的类库
项目。添加对System.Web.Mvc
和其他库的引用,以便它可以拥有控制器
等。创建自己的视图、脚本和其他文件夹,并根据需要填充文件。
现在,您的所有模块都将作为单独的项目构建,包括 dll
文件和 javascript
、html
、css
、图像等。要使它们作为一个单一的 web 应用程序
工作,您可以创建一个(仅一个)MVC
web 项目,该项目将进入 IIS 虚拟目录,并作为 web 发布。
要从同一 Web 中使用所有单独的模块,您可以在所有这些库中编写 post build 事件,以将工件(dll、脚本等)复制到主 Web 中,放入相应的文件夹中(dll 到 \bin,javascript 到 \scripts 等)。因此,在成功构建后,所有工件都可在同一 Web 项目中使用,并可部署为具有所有模块的单个 Web。您的 post build 脚本应如下所示:
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)如果您决定从网站中删除特定模块,只需从该模块(项目)中删除后生成事件即可,而不会影响其他任何内容。您随时可以添加回去。
您的整体解决方案
将如下所示:
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
其他人已经发布了关于使用区域的答案。 区域非常好,有益和有帮助。 它们确实有利于项目结构。
此模块还共享大多数JavaScript、CSS文件和其他文件
您的问题标题是关于.dll文件的,但我怀疑客户端资源是主要关注点。
如果您将您的Web应用程序视为具有两个不同部分:服务器端和客户端,则可以使用适当的策略对每个部分进行模块化。 区域非常适合组织服务器端代码,但对前端没有帮助。
ASP.NET 5的前端包管理选项已扩展。 除了传统的NuGet软件包管理器外,现在还支持Bower和NPM。 例如,请考虑如何通过NPM安装jQuery的本文演示。 这里有另一篇关于在Visual Studio中设置NPM、Bower和Gulp的好文章。
操作步骤:将您现有的客户端代码制作成自定义的 NPM 或 Bower 包,然后从一个或多个 Asp.NET 项目中使用该包。