【发布时间】:2010-11-22 01:30:31
【问题描述】:
我正在编写一些 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 搜索到这方面的任何信息,并且将自己添加为参考不会使生成的程序集自递归。)
简而言之:自递归程序集引用真的“洁净”吗?一些系统程序集引用自己的理由是什么?
谢谢。
【问题讨论】:
标签: .net reflection assemblies circular-dependency circular-reference