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

Abt*_*deh 96 .net c# assemblies

在.Net中,我想枚举所有AppDomains上的所有已加载程序集.为我的程序的AppDomain做这件事很容易AppDomain.CurrentDomain.GetAssemblies().我是否需要以某种方式访问​​每个AppDomain?或者是否已有一个工具可以做到这一点?

Bog*_*SFT 91

使用Visual Studio

  1. 将调试器附加到进程(例如,从调试或调试>附加到进程开始)
  2. 在调试时,显示模块窗口(Debug> Windows> Modules)

这提供了有关每个程序集,应用程序域的详细信息,并提供了一些加载符号的选项(即包含调试信息的pdb文件).

在此输入图像描述

使用Process Explorer

如果您需要外部工具,可以使用Process Explorer(免费软件,由Microsoft发布)

单击一个进程,它将显示包含所有使用的程序集的列表.该工具非常好,因为它显示了其他信息,如文件句柄等.

编程

检查这个解决如何操作的问题.

  • 它甚至比这里解释的要好,因为在进程的属性页面中,进程资源管理器准确显示了加载到哪些 AppDomain(包括“共享域”)程序集。因此,它显示的不仅仅是哪些 .dll 被加载到进程中。很高兴知道他们使用哪些 API 来显示这一点(有关“以编程方式”的链接只会提供 CurrentDomain 中的程序集)。 (2认同)

s15*_*99d 19

这就是我最终的结果.它是所有属性和方法的列表,我列出了每种方法的所有参数.我没有成功获得所有的价值观.

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>");
                    }
                }
            }
        }
Run Code Online (Sandbox Code Playgroud)

  • 尝试使用:Assembly [] assemblies = AppDomain.CurrentDomain.GetAssemblies(); (4认同)
  • 这根本不回答这个问题. (2认同)