在.Net中,我想枚举所有AppDomain上的所有加载的程序集。为我的程序的AppDomain做它很容易AppDomain.CurrentDomain.GetAssemblies()
。我是否需要以某种方式访问每个AppDomain?或者,是否有一个工具可以做到这一点?如何列出所有加载的程序集?
回答
使用Visual Studio
- 附加一个调试的过程(如调试或调试开始>附加到进程)
- 调试时,显示模块窗口(调试>窗口>模块)
这给出了有关每个程序集,应用程序域的详细信息,并且有几个加载符号的选项(即包含调试信息的pdb文件)。
使用Process Explorer的
如果你想要一个外部工具,你可以使用Process Explorer(免费软件,Microsoft发布)
点击一个过程,它会显示一个列表与所有使用的组件。该工具是相当不错的,因为它显示其他信息,如文件句柄等
编程
检查this SO问题,解释如何做到这一点。
这比在这里解释的更好,因为在一个进程的属性页面中,Process Explorer确切地显示了哪个AppDomain(包括'共享域')程序集被加载到。因此,它显示的不仅仅是将哪些.dll文件加载到进程中。很高兴知道他们使用什么API来显示它(“编程式”链接只会给CurrentDomain中的程序集)。顺便说一句 – Govert 2012-02-09 11:21:45
这就是我最终的结果。这是所有属性和方法的列表,并列出了每种方法的所有参数。我没有成功获得所有的价值。
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>");
}
}
}
}
...我排除它从初始的文章,但我过滤某些响应像这样`的foreach(在asm.GetTypes类型型()){\t \t \t \t \t \t如果((type.ToString() .IndexOf(“ACLASSIMLOOKINGFOR”)> = 0)||(type.ToString()。IndexOf(“BCLASSIMLOOKINGFOR”)> = 0)){...` – s15199d 2011-11-30 18:02:41
- 1. 如何获取所有当前加载的程序集列表?
- 2. 列出所有引用的程序集
- 3. 如何为AppDomain预加载所有已部署的程序集
- 4. 如何列出GAC中的所有注册程序集?
- 5. 如何列出用Python进程加载的所有dll?
- 6. 如何从/ bin目录中加载所有程序集
- 7. 如何从silverlight程序集加载所有资源?
- 8. 如何从.NET程序集列出所有代表
- 9. 如何加载/卸载程序集?
- 10. 加载程序集时出现异常:System.IO.FileNotFoundException:无法加载程序集AndHUD
- 11. 如何使用CoreClr获取加载的程序集中的所有类型?
- 12. 如何列出在ipython会话中加载的所有名称?
- 13. 如何列出在IPFS中加载的所有文件对象?
- 14. 如何加载相关程序集?
- 15. C#:如何从GAC加载程序集?
- 16. 如何预加载.net程序集
- 17. 我如何从GAC加载程序集?
- 18. 如何在app.config中加载程序集?
- 19. 如何从c#加载C++程序集?
- 20. 如何获得.NET Compact Framework中所有加载的程序集(引用)的编程列表
- 21. 列出所有可用的.NET程序集
- 22. 加载程序集失败,出现FileNotFoundException - Fusion说所有都没问题
- 23. NServiceBus加载所有程序集无论设置
- 24. 列出C程序中的所有#defines
- 25. 列出所有正在运行的应用程序MASM32程序集
- 26. 如何手动加载rails应用程序中的所有类?
- 27. 如何重新加载.NET应用程序域的程序集?
- 28. 如何列出所有远程参考?
- 29. 如何列出应用程序公开的所有活动?
- 30. 如何列出Android中的所有普通应用程序?
请注意`GetAssemblies()`不起作用,因为它不是递归的,它会错过任何嵌套的程序集引用。我在http://stackoverflow.com/questions/383686/how-do-you-loop-through-currently-loaded-assemblies/26300241#26300241上添加了`GetAssemblies()`的递归版本。 – Contango 2014-10-10 15:58:29