.NET ClassLoader和Assembly之间的关系

时间:2010-04-09 07:31:33

标签: c# .net

我想知道 .NET ClassLoader Assembly 之间的关系

我使用“!dumpdomain xxxx”命令并获得以下输出:

Domain 1: 00522108 
LowFrequencyHeap: 0052212c
HighFrequencyHeap: 00522178
StubHeap: 005221c4
Stage: OPEN
SecurityDescriptor: 00523430
Name: BoxUnbox.exe
**Assembly**: 0056eb88 [C:\Windows\assembly\GAC_32\mscorlib\2.0.0.0__b77a5c561934e089\mscorlib.dll]
**ClassLoader**: 0056ec08
SecurityDescriptor: 0056c078
Module Name 
56d71000 C:\Windows\assembly\GAC_32\mscorlib\2.0.0.0__b77a5c561934e089\mscorlib.dll

**Assembly**: 005794f0 []
**ClassLoader**: 00579570
SecurityDescriptor: 0057a018
Module Name 
00152c5c

我注意到“ClassLoader”和“Assembly”出现在一对中。似乎每个议会都附有自己的“ClassLoader”。

为什么这样设计?这是一个小小的吵闹吗?为什么不直接将一个“ClassLoader”分配给AppDomain并使用它来加载AppDomain所需的所有程序集?这个设计不是更优雅吗?

非常感谢。

1 个答案:

答案 0 :(得分:1)

有一个与每个程序集关联的ClassLoader类的实例。它从程序集中加载类型。它有一堆调试字段,只有在CLR内置于调试模式时才会出现。毫无疑问,列出了指向ClassLoader实例的指针,以帮助Microsoft测试人员找回调试数据。这对零售业来说并不是很有趣。

您可以在SSCLI20发行版中找到此源代码。类加载器在clr \ src \ _vm \ _clsload.hpp中声明。如果它很重要:它与类加载器的Java概念无关。