2009-01-19 56 views
82

在.Net中,我想枚舉所有AppDomain上的所有加載的程序集。爲我的程序的AppDomain做它很容易AppDomain.CurrentDomain.GetAssemblies()。我是否需要以某種方式訪問​​每個AppDomain?或者,是否有一個工具可以做到這一點?如何列出所有加載的程序集?

+0

請注意`GetAssemblies()`不起作用,因爲它不是遞歸的,它會錯過任何嵌套的程序集引用。我在http://stackoverflow.com/questions/383686/how-do-you-loop-through-currently-loaded-assemblies/26300241#26300241上添加了`GetAssemblies()`的遞歸版本。 – Contango 2014-10-10 15:58:29

回答

71

使用Visual Studio

  1. 附加一個調試的過程(如調試或調試開始>附加到進程)
  2. 調試時,顯示模塊窗口(調試>窗口>模塊)

這給出了有關每個程序集,應用程序域的詳細信息,並且有幾個加載符號的選項(即包含調試信息的pdb文件)。

enter image description here

使用Process Explorer的

如果你想要一個外部工具,你可以使用Process Explorer(免費軟件,Microsoft發佈)

點擊一個過程,它會顯示一個列表與所有使用的組件。該工具是相當不錯的,因爲它顯示其他信息,如文件句柄等

編程

檢查this SO問題,解釋如何做到這一點。

+1

這比在這裏解釋的更好,因爲在一個進程的屬性頁面中,Process Explorer確切地顯示了哪個AppDomain(包括'共享域')程序集被加載到。因此,它顯示的不僅僅是將哪些.dll文件加載到進程中。很高興知道他們使用什麼API來顯示它(「編程式」鏈接只會給CurrentDomain中的程序集)。順便說一句 – Govert 2012-02-09 11:21:45

15

這就是我最終的結果。這是所有屬性和方法的列表,並列出了每種方法的所有參數。我沒有成功獲得所有的價值。

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>"); 
        } 
       } 
      } 
     } 
+0

...我排除它從初始的文章,但我過濾某些響應像這樣`的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

相關問題