我正在编写一些 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 来打破无限递归是微不足道的,但我对这种情况很好奇,因为我自己无法生成自递归程序集。(我可以在谷歌上找不到任何信息,并且将自己添加为参考不会使生成的程序集自递归。)
简而言之:自递归程序集引用真的“洁净”吗?一些系统程序集引用自己的理由是什么?
谢谢。