.net程序集依赖链

.net程序集依赖链,.net,.net-assembly,.net,.net Assembly,我有以下情况。我们正在开发一个多层应用程序,所以我为每一层制作了不同的程序集。让我们称之为顶部、中间和底部。它们相互依赖,如: 顶部->中间->底部,因为顶部使用中间的类别和底部的中间类别 现在我们将有一个secong应用程序Top2,它只需要一些来自中间层的类,而不使用任何来自基的类 有没有办法在Top2的部署中不包括Base 当尝试编译时,VS告诉我还需要对assembly Base的引用 最好的 托马斯听起来好像“中间派”的靴子越来越大了 程序集不应引用它不需要的任何内容。因此,您的情况听

我有以下情况。我们正在开发一个多层应用程序,所以我为每一层制作了不同的程序集。让我们称之为顶部、中间和底部。它们相互依赖,如:

顶部->中间->底部,因为顶部使用中间的类别和底部的中间类别

现在我们将有一个secong应用程序Top2,它只需要一些来自中间层的类,而不使用任何来自基的类

有没有办法在Top2的部署中不包括Base

当尝试编译时,VS告诉我还需要对assembly Base的引用

最好的 托马斯

听起来好像“中间派”的靴子越来越大了

程序集不应引用它不需要的任何内容。因此,您的情况听起来是拆分程序集的一个很好的候选者

当前

Application One -> "Middle.dll" -> "Base.dll"
您的提案

Application One -> "Middle.dll" -> "Base.dll"

Application Two -> "Middle.dll" -> "(Redundant) Base.dll"
这是一个典型的问题,当一些真正常用的对象本质上不必要地与业务逻辑混为一谈时就会出现。i、 您可能在Middle.dll中有实用程序类,这些类对应用程序很有用,但它们实际上不需要在其中。使用单独的实用程序dll可能会更好

建议

Application One -> "Middle1.dll" -> "Base.dll"
                -> "Middle2.dll"

Application Two -> "Middle2.dll"
所有需要使用Base.dll的功能(当前存在于Middle.dll中)都应移到Middle1.dll。这样,如果您只需要使用非依赖代码,就可以引用Middle2.dll

这可能是一个很大的重构,这取决于您的代码库,但稍后您会很感激它

这方面的好处

  • 测试将得到改进
  • 如果您需要将这两个应用程序完全分开,那么需要进行的重构就会更少
  • 如果您只需要出于某种原因更改“Middle1”,则破坏这两个应用程序的可能性较小
  • 更清晰的关注点分离
  • 没有像您当前遇到的编译器问题
  • 每个程序都不需要集总代码
  • 更小、更易于管理的组件
  • 改进的智能感知
  • Middle1和Middle2可以共享同一名称空间,因此对于您的应用程序,它们不会知道其中的区别

注意:显然,我不是建议你叫他们Middle1和Middle2。但是你明白了。

当然,把中间分成两部分!你的意思是,中间1和中间2,中间1使用Base和中间2,但中间2不使用Base?是的。我将在回答中详细说明。谢谢,幸运的是我们的项目还很年轻,所以重构很重要。现在一切都好了。解决方案是将没有外部引用的所有数据类放在一个程序集中。