.Net 程序集中的循环引用

Circular Reference in .Net Assemblies

我试图在运行时查找一组程序集的依赖关系,我注意到我的代码暗示 System.dll 具有对 System.Configuration.dll 的循环引用。我假设这些程序集之间实际上没有循环引用,但有人可以解释为什么我从这段代码中看到以下结果吗?

var systemAssembly = Assembly.ReflectionOnlyLoadFrom("System.dll");
Console.WriteLine(systemAssembly.GetReferencedAssemblies().Select(a => a.FullName));
// Output:
// mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
// System.Configuration, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
// System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089

var systemConfigurationAssembly = Assembly.ReflectionOnlyLoadFrom("System.Configuration.dll");
Console.WriteLine(systemConfigurationAssembly.GetReferencedAssemblies().Select(a => a.FullName));
// Output:
// mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
// System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
// System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
// System.Security, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
// System.Core, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089

注意:我的示例中的程序集路径已得到简化。

因为循环引用确实存在。一些 .NET dll 有循环引用。