如何列出所有已加载的程序集?

时间:2009-01-19 17:10:52

标签: c# .net assemblies

在.Net中,我想枚举所有AppDomains上的所有已加载程序集。为我的程序的AppDomain执行此操作非常简单AppDomain.CurrentDomain.GetAssemblies()。我是否需要以某种方式访问​​每个AppDomain?或者是否有一个工具可以做到这一点?

2 个答案:

答案 0 :(得分:86)

使用Visual Studio

  1. 将调试器附加到流程(例如,从调试或调试开始>附加到流程)
  2. 在调试时,显示模块窗口(Debug> Windows> Modules)
  3. 这提供了有关每个程序集,app域的详细信息,并提供了一些加载符号的选项(即包含调试信息的pdb文件)。

    enter image description here

    使用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>");
                    }
                }
            }
        }