2017-04-19 132 views
2

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

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 

注意:在我的例子中,装配路径已经被简化了。

+0

我看不到关于循环引用的任何消息。你能发布所有相关的代码和错误消息吗? –

+1

这里没有什么错,循环依赖是允许的,它们只是[编译时的痛苦](http://stackoverflow.com/q/1316518/3764814) –

+0

@ rory.ap所提供的代码没有错误。输出结果显示这些dll相互引用,这意味着有一个循环依赖关系使我困惑。 –

回答

3

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

+0

可以吗?解释为什么dll会被设置为循环引用?这有什么好处? –

+0

在我看来,它看起来像智慧的崩溃。 – Joshua