我想知道 .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所需的所有程序集?这个设计不是更优雅吗?
非常感谢。
答案 0 :(得分:1)
有一个与每个程序集关联的ClassLoader类的实例。它从程序集中加载类型。它有一堆调试字段,只有在CLR内置于调试模式时才会出现。毫无疑问,列出了指向ClassLoader实例的指针,以帮助Microsoft测试人员找回调试数据。这对零售业来说并不是很有趣。
您可以在SSCLI20发行版中找到此源代码。类加载器在clr \ src \ _vm \ _clsload.hpp中声明。如果它很重要:它与类加载器的Java概念无关。