这个问题是List AppDomains in Process
的直接延续不幸的是,它仅显示与完整.NET框架相对应的AppDomain。我的进程也加载了Silverlight(请不要问为什么)。
请注意:
代码(从帖子中复制):
private static IList<AppDomain> GetAppDomains()
{
IntPtr enumHandle = IntPtr.Zero;
var host = new CorRuntimeHost();
try
{
host.EnumDomains(out enumHandle);
object domain = null;
IList<AppDomain> list = new List<AppDomain>();
for (; ; )
{
host.NextDomain(enumHandle, out domain);
if (domain == null)
{
break;
}
list.Add((AppDomain)domain);
}
return list;
}
finally
{
host.CloseEnum(enumHandle);
Marshal.ReleaseComObject(host);
}
}
用法
foreach (var appDomain in GetAppDomains())
{
Debug.WriteLine(appDomain.FriendlyName);
}
结果
testhost.x86.exe
domain-b4a1a71-DFDeploymentSmokeTests.dll
Process Explorer报告的实际AppDomains
因此,它不报告Silverlight的任何AppDomain,并且似乎没有针对Silverlight的mscoree.tlb。
是否存在一种健壮的方法来列出加载到进程中的所有.NET CLR中的所有AppDomain?或至少只是Silverlight的。