C# 是否可以使用MVC项目制作单独的DLL?

C# 是否可以使用MVC项目制作单独的DLL?,c#,asp.net,asp.net-mvc,dll,C#,Asp.net,Asp.net Mvc,Dll,我们有一个用Asp.NETMVC5开发的大项目。我们的模型和业务逻辑在单独的类库中定义。现在我们需要向现有项目添加另一个模块,但我们需要一个单独的dll 该模块还共享大多数Java脚本、css文件和其他文件。这就是我们不想分离MVC项目的原因 我们为什么可以为模块基础创建单独的dll。因此,我们不希望部署或接触其他DLL。是的,您可以,只需将逻辑类添加到其他类库项目中(您可以拥有任意数量),然后将这些类库的引用添加到mvc项目中。 不要忘记在输入代码后导入类 编辑:我假设您使用的是Visual

我们有一个用Asp.NETMVC5开发的大项目。我们的模型和业务逻辑在单独的类库中定义。现在我们需要向现有项目添加另一个模块,但我们需要一个单独的dll

该模块还共享大多数Java脚本、css文件和其他文件。这就是我们不想分离MVC项目的原因


我们为什么可以为模块基础创建单独的dll。因此,我们不希望部署或接触其他DLL。

是的,您可以,只需将逻辑类添加到其他类库项目中(您可以拥有任意数量),然后将这些类库的引用添加到mvc项目中。 不要忘记在输入代码后导入类


编辑:我假设您使用的是Visual Studio,如果是,您可以转到文件->创建项目,这将在同一解决方案中创建另一个项目。

根据您的描述,您说这些项目共享CSS和JS文件。这让我相信你说的是一个独立的MVC网站(可能是更大的公司网站的一部分)。这可以通过使用区域来实现。如果您不熟悉这些区域,请阅读以下内容:

当然,使用区域将要求您在每次其中一个区域更改时部署整个站点,并且您已经提到要避免这样做

如果您不想使用区域,而是想在同一个解决方案中创建另一个MVC项目,那么您也可以轻松地做到这一点。您可以右键单击解决方案,添加新项目>ASP.NET web应用程序>MVC以添加项目。要在这两个MVC项目之间共享JS和CSS文件,您必须创建一个新的解决方案文件夹(右键单击解决方案>添加新解决方案文件夹),并将资源文件移动到该文件夹。在解决方案中的每个MVC项目中,您将添加现有项并选择那些js/css资源文件。这样,如果更改css文件,它将反映在两个项目中

有关更多信息,请阅读以下内容:

我可以向您推荐两种组织多模块项目的方法

选项1在同一web项目中为每个模块创建区域

一种方法是,在同一个MVC项目中创建单独的项目。因此,每个模块将有一个单独的区域,具有单独的控制器、视图、脚本等。但是,
(1) 这仍然会为整个MVC项目创建一个
dll
(2) 在某些情况下,跨区域共享文件可能不太容易(不过,您可以将所有模块的所有脚本保存在一个共享目录中)

选项2-为每个模块创建类库,生成后合并

另一种方法是为每个模块创建一个
类库
项目。添加对
System.Web.Mvc
和其他库的引用,以便它可以拥有
控制器
等。创建自己的视图、脚本和其他文件夹,并根据需要填充文件

现在,您的所有模块都将构建为单独的项目,使用
dll
文件和
javasvcript
s、
html
s、
css
s、图像等,使它们都作为一个
web应用程序
工作,您可以创建(仅一个)
MVC
web项目,将转到IIS虚拟目录并以web形式发布

要使用来自同一web的所有单独模块,您可以在所有这些库中编写事件,将工件(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上删除特定模块,只需从该模块(项目)中删除生成后事件,而不影响其他任何内容。你可以随时加回去

您的总体
解决方案
如下所示

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

其他人发布了关于区域使用的答案。这些领域很好,很有帮助。它们确实有利于项目结构

此模块还共享大多数Java脚本、css文件和其他文件

您问题的标题是关于.dll的,但我怀疑客户端资源是主要问题

如果你认为你的WebApp有两个不同的部分:服务器端和客户端,你可以使用适当的策略来对每个模块进行模块化。区域是组织服务器端代码的好地方,但对前端没有帮助

ASP.NET 5的前端包管理选项已扩展。除了传统的NuGet包管理器之外,现在还支持Bower和NPM。例如,考虑如何。这是另一篇关于这个问题的好文章


操作方法:获取现有客户端代码并创建自定义NPM或Bower包,然后从一个或多个Asp.NET项目中使用该包。

我不知道您是否尝试使用。。此
框架
可根据您的需要工作。。。我认为下面的链接将帮助你更多


是的,您可以拥有任意数量的组件。