参考两个项目

时间:2015-12-10 12:48:01

标签: c# visual-studio reference project-reference

我有两个项目P1P2

  

P1的参考为P2。

所以我可以从P2's methods访问P1。但是,如果我想从P1's methods访问P2,我该如何访问它们呢?

  

我知道我无法在P1's中添加P2引用?

如果有可能吗?如果是,那怎么样?

4 个答案:

答案 0 :(得分:8)

正如其他人所指出的,循环引用是问题。它在编译P1之前无法编译P2,但如果P1依赖于P2,则在P2编译之前它无法编译P1 ...出了问题?

现在的解决方案:

  • 简单方法:创建一个共享库,您可以在其中放入P1和P2的共享代码。 P1和P2都可以引用此共享项目。

  • 更好的解决方案:创建您在共享库中定义的接口。在P1中将P2的“引用”基于共享接口,而不是实际实现。通过这种方式,您可以获得更好的可测试解决方案,并且可以更轻松地替换部分代码。

答案 1 :(得分:3)

实现此目的的另一种方法是在解决方案中将P1引用P2作为项目,但仅通过其输出DLL或EXE具有P2引用P1。

您丢失了一些跨项目/依赖项检查,但它确实允许您交叉引用。

我必须使用一个长期运行的WinForms应用程序来完成这项工作,该应用程序最初是用VB编写的,但在几年后转移到了C#。所有新的Windows窗体都是用C#编写的,它与VB表单不是同一个项目,但是一些VB表单需要调用新的C#表单和副verca。

编辑1

这样做的一个缺点是,如果P2引用P1作为它的项目输出DLL / EXE然后,当你清理/重建解决方案时,出现错误,你就处于这样的位置输出DLL / EXE不再存在,并且无法重新创建,直到您解决错误,但无法再构建解决方案,因为它缺少引用。不是一个好地方,所以请务必不时保留输出DLL / EXE的副本,这样如果发生这种情况你就可以摆脱它。

答案 2 :(得分:2)

简短回答:没有办法在P2项目中添加P1作为参考,因为这将创建一个不允许的循环依赖。考虑以不同的方式重构代码和设计应用程序。一种方法是引入另一个包含对两个项目的引用的项目。

答案 3 :(得分:1)

您无法从P2引用P1,因为它会创建循环依赖关系。循环依赖指向糟糕的设计。有一些方法,例如你可以将共享代码重构为另一个项目。

相关问题