2017-04-19 69 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

相關問題