1

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

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

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

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

在此处输入图像描述 在此处输入图像描述

所以在这种情况下,我在 System、System.Xml.Linq、Questions 等任何地方都看不到 .net 程序集引用,但显然它们是由 clr 加载的,我确实在我的 fusion logviewer 中看到了它们

.net 程序集所需的数据位于何处?

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

谢谢

4

1 回答 1

1

我知道了。其实我有点糊涂了。ILdasm 显示的是正确的。所有静态绑定的 dll 都放在 dll 的清单中。

为什么我们没有看到系统引用是因为 mscorlib 有一个“系统”命名空间;GAC 中的 Sysem.dll 具有该命名空间中的其余类。所以系统命名空间被分成两个 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 的引用

在此处输入图像描述

于 2013-09-05T16:00:06.313 回答