交叉引用程序集
Posted
技术标签:
【中文标题】交叉引用程序集【英文标题】:Cross referencing assemblies 【发布时间】:2011-06-02 22:45:11 【问题描述】:我的 .net 解决方案中有三个项目。 主项目和两个类库项目。
我发现我需要交叉引用类库项目。我可以这样做吗?它是否安全或有一些注意事项?
【问题讨论】:
定义“交叉引用类库项目”。如果您的意思是类库 A 需要引用类库 B 而 B 需要引用 A,那么是的,这是有问题的,并且有点糟糕的设计 你不能这样做..VS会抱怨.. 没错,为什么有问题。您能否解释或参考解释原因的资源。谢谢 *** 上有几篇关于循环引用或循环依赖的帖子。这是一个很好的:***.com/questions/308915/… Madhur Ahuja 你是对的,VS 不允许我这样做,谢谢 【参考方案1】:当项目在一个解决方案中时,IDE 不会让您这样做。有一些微妙的方法可以混淆它。但是由于程序集引用尚不可用,因此无法从头开始构建解决方案(即构建 + 重建)。重构这个,你可能想要一个两者都可以引用的第三个程序集。
【讨论】:
【参考方案2】:循环引用是可能的(通过命令行和一些技巧;不是通过 IDE),但很痛苦;不要这样做!
要么为常用类型添加一个额外的程序集,要么合并两个库。
在许多方面,越少越简单……无数的 dll 并不意味着你已经达到了纯度——它只是一团糟。
【讨论】:
【参考方案3】:当我遇到这个问题时,我创建了只有属性的类。可以是Employee
、Customer
、Product
,等等。这些类不需要引用任何其他项目,因此多个项目可以引用它们。
属于这些对象的方法(Employee
、Customer
、Product
)然后在其他项目中进入它们自己的类。
我经常遇到这种情况的一种情况是在三层应用程序中——表示层、业务层和数据访问层。我希望 DAL 检索数据并填充返回给 BLL 的 Employee 对象。如果 Employee 类在 BLL 中并且同时具有属性和方法,那么就没有简单的方法来填充 DAL 中的 Employee 对象并将其返回给 BLL——因为 BLL 必须具有对 DAL 的引用,所以DAL 不能反过来引用 BLL。使用纯属性类(Employee
、Customer
、Product
)创建单独的项目是解决此问题的一种方法。
【讨论】:
【参考方案4】:如果通过“交叉引用”,您的意思是您要执行以下操作:
1) MAIN 项目包含对 LIBRARY-ALPHA 和 LIBRARY-BETA
的引用2) LIBRARY-ALPHA 项目包含对 LIBRARY-BETA
的引用3) LIBRARY-BETA 项目包含对 LIBRARY-ALPHA
的引用那么没有。 Visual Studio 在构建 ALPHA 和 BETA 之前将无法构建 MAIN。在构建 BETA 之前,它将无法构建 ALPHA。在构建 ALPHA 之前,它将无法构建 BETA。因此,它将无法构建任何东西。
【讨论】:
以上是关于交叉引用程序集的主要内容,如果未能解决你的问题,请参考以下文章