如何在运行时由clr解析.net引用的程序集名称?

时间:2013-09-05 13:05:04

标签: c# .net clr assemblies ildasm

当我的.net exe运行时,它会在朗姆酒时加载正确的.net程序集。我知道有一个探索过程发生。

我的问题是,如果我在ildasm中打开.net exe / dll,我只有.extern对mscorlib.dll的引用,而不是其他。

那么clr如何获得探测.net引用的程序集所需的信息呢?

我有一个示例项目和图像。

enter image description here enter image description here

所以在这种情况下,我没有看到.net程序集引用任何像System,System.Xml.Linq,Questions等...,但显然它们是由clr加载的,我确实在我的Fusion logviewer中看到它们

.net程序集所需的数据在哪里?

我注意到一些不一致的行为行为如何将extern程序集放入某些核心.net dll和其他外部.net dll的清单。

谢谢

1 个答案:

答案 0 :(得分:0)

我明白了。其实我有点困惑。 ILdasm显示的是正确的。所有静态绑定的dll都放在dll的清单中。

为什么我们没有看到系统引用是因为mscorlib有一个'System'命名空间; GAC中的Sysem.dll具有该命名空间中的其余类。 所以System命名空间分为两个dll。最常见的和基础的是mscorelibrary.dll,其余的在system.dll

实际上,Visual Studio总是将System.dll作为参考显示有点误导,这总是不正确

当我使用

     var bvv = new System.Uri("http://www.google.com"); ------ System.Uri class is in System.dll

     Console.WriteLine(bvv.AbsolutePath);--------------------- System.Console class is in mscorlib.dll

我可以清楚地看到对System.dll的引用

enter image description here