交叉引用程序集

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】:

当我遇到这个问题时,我创建了只有属性的类。可以是EmployeeCustomerProduct,等等。这些类不需要引用任何其他项目,因此多个项目可以引用它们。

属于这些对象的方法(EmployeeCustomerProduct)然后在其他项目中进入它们自己的类。

我经常遇到这种情况的一种情况是在三层应用程序中——表示层、业务层和数据访问层。我希望 DAL 检索数据并填充返回给 BLL 的 Employee 对象。如果 Employee 类在 BLL 中并且同时具有属性和方法,那么就没有简单的方法来填充 DAL 中的 Employee 对象并将其返回给 BLL——因为 BLL 必须具有对 DAL 的引用,所以DAL 不能反过来引用 BLL。使用纯属性类(EmployeeCustomerProduct)创建单独的项目是解决此问题的一种方法。

【讨论】:

【参考方案4】:

如果通过“交叉引用”,您的意思是您要执行以下操作:

1) MAIN 项目包含对 LIBRARY-ALPHALIBRARY-BETA

的引用

2) LIBRARY-ALPHA 项目包含对 LIBRARY-BETA

的引用

3) LIBRARY-BETA 项目包含对 LIBRARY-ALPHA

的引用

那么没有。 Visual Studio 在构建 ALPHABETA 之前将无法构建 MAIN。在构建 BETA 之前,它将无法构建 ALPHA。在构建 ALPHA 之前,它将无法构建 BETA。因此,它将无法构建任何东西。

【讨论】:

以上是关于交叉引用程序集的主要内容,如果未能解决你的问题,请参考以下文章

vs中程序集的引用

如何快速获得.net程序引用的程序集

为啥在尝试添加引用时会看到“无法发出程序集:引用的程序集...没有强名称”?

为啥在修改引用的程序集时会重建其他程序集?

.NET 中的引用程序集

无法加载文件或程序集。找到的程序集的清单定义与程序集引用不匹配