在.Net中,我想枚举所有AppDomains上的所有已加载程序集.为我的程序的AppDomain做这件事很容易AppDomain.CurrentDomain.GetAssemblies()
.我是否需要以某种方式访问每个AppDomain?或者是否已有一个工具可以做到这一点?
使用Visual Studio
将调试器附加到进程(例如,从调试或调试>附加到进程开始)
在调试时,显示模块窗口(Debug> Windows> Modules)
这提供了有关每个程序集,应用程序域的详细信息,并提供了一些加载符号的选项(即包含调试信息的pdb文件).
使用Process Explorer
如果您需要外部工具,可以使用Process Explorer(免费软件,由Microsoft发布)
单击一个进程,它将显示包含所有使用的程序集的列表.该工具非常好,因为它显示了其他信息,如文件句柄等.
编程
检查这个解决如何操作的问题.
这就是我最终的结果.它是所有属性和方法的列表,我列出了每种方法的所有参数.我没有成功获得所有的价值观.
foreach(System.Reflection.AssemblyName an in System.Reflection.Assembly.GetExecutingAssembly().GetReferencedAssemblies()){ System.Reflection.Assembly asm = System.Reflection.Assembly.Load(an.ToString()); foreach(Type type in asm.GetTypes()){ //PROPERTIES foreach (System.Reflection.PropertyInfo property in type.GetProperties()){ if (property.CanRead){ Response.Write("
" + an.ToString() + "." + type.ToString() + "." + property.Name); } } //METHODS var methods = type.GetMethods(); foreach (System.Reflection.MethodInfo method in methods){ Response.Write("
" + an.ToString() + "." + type.ToString() + "." + method.Name + ""); foreach (System.Reflection.ParameterInfo param in method.GetParameters()) { Response.Write("
Param=" + param.Name.ToString()); Response.Write("
Type=" + param.ParameterType.ToString()); Response.Write("
Position=" + param.Position.ToString()); Response.Write("
Optional=" + param.IsOptional.ToString() + ""); } } } }