在.Net中,我想枚举所有AppDomains上的所有已加载程序集。为我的程序的AppDomain执行此操作非常简单AppDomain.CurrentDomain.GetAssemblies()
。我是否需要以某种方式访问每个AppDomain?或者是否有一个工具可以做到这一点?
答案 0 :(得分:86)
使用Visual Studio
这提供了有关每个程序集,app域的详细信息,并提供了一些加载符号的选项(即包含调试信息的pdb文件)。
使用Process Explorer
如果您需要外部工具,可以使用Process Explorer(免费软件,由Microsoft发布)
单击某个进程,它将显示包含所有已使用程序集的列表。该工具非常好,因为它显示了其他信息,如文件句柄等。
<强>编程强>
检查解释如何操作的this SO问题。
答案 1 :(得分:17)
这是我最终的结果。它是所有属性和方法的列表,我列出了每种方法的所有参数。我没有成功获得所有的价值。
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("<br>" + an.ToString() + "." + type.ToString() + "." + property.Name);
}
}
//METHODS
var methods = type.GetMethods();
foreach (System.Reflection.MethodInfo method in methods){
Response.Write("<br><b>" + an.ToString() + "." + type.ToString() + "." + method.Name + "</b>");
foreach (System.Reflection.ParameterInfo param in method.GetParameters())
{
Response.Write("<br><i>Param=" + param.Name.ToString());
Response.Write("<br> Type=" + param.ParameterType.ToString());
Response.Write("<br> Position=" + param.Position.ToString());
Response.Write("<br> Optional=" + param.IsOptional.ToString() + "</i>");
}
}
}
}