Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用外行术语描述.NET程序集循环依赖性问题_.net_Assemblies_Dependencies - Fatal编程技术网

用外行术语描述.NET程序集循环依赖性问题

用外行术语描述.NET程序集循环依赖性问题,.net,assemblies,dependencies,.net,Assemblies,Dependencies,请用外行的术语描述.NET汇编循环依赖性问题,以及其他技术是否有类似的限制 注意:我知道,这似乎是一个简单的问题,但我已经看到许多真正重要的项目完全打破了依赖关系图。与任何其他循环依赖关系一样 考虑三个组件A、B和C A需要B中定义的东西,B需要C中定义的东西,C需要A中定义的东西 您可以先构建哪一个?补充Lucas的答案:在.NET中很难找到循环程序集依赖项。为了编译A.dll,首先需要B.dll;要编译B.dll,首先需要C.dll;但要编译C.dll,首先需要尝试编译的A.dll 唯一可能

请用外行的术语描述.NET汇编循环依赖性问题,以及其他技术是否有类似的限制


注意:我知道,这似乎是一个简单的问题,但我已经看到许多真正重要的项目完全打破了依赖关系图。

与任何其他循环依赖关系一样

考虑三个组件A、B和C

A需要B中定义的东西,B需要C中定义的东西,C需要A中定义的东西


您可以先构建哪一个?

补充Lucas的答案:在.NET中很难找到循环程序集依赖项。为了编译A.dll,首先需要B.dll;要编译B.dll,首先需要C.dll;但要编译C.dll,首先需要尝试编译的A.dll

唯一可能陷入这种情况的方法是,如果您并行开发A、B和C,并且您意外地引入了循环依赖关系。但是,一旦你对这三个方面都做了一个干净的构建,问题就会很明显,除非打破这个循环,否则你将无法继续

名称空间和/或单个依赖关系中的类之间的循环依赖关系要常见得多。我试图将这种循环依赖性视为代码气味;在组件之间没有循环依赖关系的代码库中,这些组件可以很容易地保持分离并独立重构


独立开发者Patrick Smacchia在这里谈到了依赖循环及其对代码质量的影响:

我是.NET开发人员工具的开发人员之一,该工具专门用于强制执行干净的代码结构和删除依赖循环。在我们的产品网站上,您会发现与组件依赖周期相关的问题:

8页

创建程序集的常见有效和无效原因 将Visual Studio解决方案编译性能提高到更快的10倍 组织开发环境 7页

在.NET程序集中定义组件 组件间依赖关系的非循环图 进化设计与非循环组件化
你甚至不需要三个,只要A需要B中的某些东西,B需要A中的某些东西。这是真的。我使用了三个,因为两个并不是“感觉”循环的,更像是“乒乓依赖”:在编译过程结束时,是否有可能编译成一个中间元程序集,以便根据项目进行拆分,但是更好的做法是移动一些东西,这样你就不再有循环依赖了。如果您添加一些细节,我们可能会在这方面帮助您,或者在一个新问题中提问。@Lucas,谢谢。我的想法是假设的。我感兴趣的是探索VS中程序集之间的循环依赖限制在多大程度上是人为的还是真实的。