我正在编写一些 C# 代码,递归地遍历基础程序集的引用程序集,构建这些引用的有向无环图以进行拓扑排序。我是通过 Assembly 类上的 GetReferencedAssemblies() 方法来做到这一点的。
在测试代码时,我惊讶地发现 .NET 框架中的某些程序集显然将它们自己列为程序集引用。一个这样的例子是 System.Transactions, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 其中列出了 System.Transactions, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 作为引用,可以在 Reflector 中验证。
一旦我意识到这一点,通过比较 AssemblyNames 来打破无限递归是微不足道的,但我对这种情况很好奇,因为我自己无法生成自递归程序集。 (我无法在 Google 上搜索任何相关信息,并且将自己添加为引用不会使生成的程序集自递归。)
简而言之:自递归程序集引用真的是“犹太洁食” - 一些系统程序集引用自己的理由是什么?
谢谢。
最佳答案
昨天问了一个题为How did Microsoft create assemblies that have circular references?的问题这可能会更多地解释这是如何完成的。不过,我想不出一个程序集对自身进行引用的正当理由。
关于.net - 在 .NET 框架中遇到自递归程序集引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1318632/