将依赖项添加为DLL或添加为项目

时间:2017-11-29 18:26:52

标签: c# asp.net .net asp.net-mvc asp.net-core

我们有一个用asp.net mvc编写的应用程序。

现在我们已经编写了常见的数据库上下文&此应用程序所需的实体模块(2个项目/类库)。同样的数据库上下文和实体也是必需的/是另一个应用程序的一部分。

现在我的问题是如何将这个常见项目添加到我们的应用程序中。

我们是应该将其添加为dll还是应该在引用公共项目的每个解决方案中将它们添加为单独的项目。以上方法的任何优点。或者,如果有更好的方法来处理这个问题。

由于 雅

3 个答案:

答案 0 :(得分:2)

这在很大程度上取决于这些应用程序如何共同发展。您在数据应用程序中进行更改的可能性是否会破坏其他应用程序中的消耗代码?如果这可能经常发生,我会将所有这些项目保存在同一个Solution and Repository中,并使用Project引用。这使得重构变得更加容易,因为Visual Studio将了解所有下游依赖项中给定类或成员的所有用法。

但是,如果此时数据层已得到很好的强化,并且您可能需要使用不同版本(我觉得不太可能)部署不同的应用程序,那么您应该将Data项目部署为Nuget包。这样,每个应用程序都可以指定它知道的版本,并确保它始终与它指定的版本兼容。

我同意其他评论者/回答者,您不应该直接创建对DLL的依赖。这是一种非常老派的管理方式,使用较新的版本控制技术无法很好地扩展。

答案 1 :(得分:1)

而是在同一个解决方案中使用单独的项目,或者在最坏的情况下,您可以创建一个NuGet模块,其中包含您需要根据需要添加到每个项目的一些自定义注册。

目前我在自己的项目中所做的就是这样。

Solution
  App.Data
  App.API
  App.ServiceWorker

......数据在API和API中很常见ServiceWorkers 然后让我们的超级通用模块也通过Nuget分发(内部)重复使用(但要确保它们能够作为孤立的部分运行)......重新迭代为@masosn' s评论建议,如果可以避免,请不要使用draw dll。

答案 2 :(得分:1)

理想情况下,您想要引用库项目,而不是DLL。您可以将所有项目保留在同一解决方案中,也可以使用其他人提到的私有nuget repo。

然而,共享DbContext并不是一个好主意,因为一旦您进行了新的迁移,就必须重新部署使用共享DbContext的所有项目。这也不是一个好主意,因为您不希望多个项目负责数据存储区中的数据。

虽然这可能需要进行一些重组,但您可能需要研究微服务架构。每个微服务都将单独负责其数据存储。