web-dev-qa-db-ja.com

ロードされたすべてのアセンブリを一覧表示するにはどうすればよいですか?

.Netでは、すべてのAppDomainで読み込まれたすべてのアセンブリを列挙したいと思います。私のプログラムのAppDomainのためにそれをするのは簡単ですAppDomain.CurrentDomain.GetAssemblies()。すべてのAppDomainに何らかの方法でアクセスする必要がありますか?それとも、これを行うツールはすでにありますか?

95

Visual Studioを使用する

  1. デバッガーをプロセスにアタッチします(たとえば、デバッグを開始するか、[デバッグ]> [プロセスにアタッチ])
  2. デバッグ中に、モジュールウィンドウを表示します([デバッグ]> [ウィンドウ]> [モジュール])

これにより、各アセンブリ、アプリドメインの詳細が表示され、シンボル(デバッグ情報を含むpdbファイル)を読み込むためのいくつかのオプションがあります。

enter image description here

Process Explorerの使用

外部ツールが必要な場合は、 Process Explorer (Microsoftが公開したフリーウェア)を使用できます

プロセスをクリックすると、使用されているすべてのアセンブリのリストが表示されます。このツールは、ファイルハンドルなどの他の情報を表示するので非常に優れています。

プログラムで

this SO 方法を説明する質問を確認してください。

87

これが私がやったことです。すべてのプロパティとメソッドのリストであり、各メソッドのすべてのパラメーターをリストしました。すべての値を取得することに成功しませんでした。

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>");
                    }
                }
            }
        }
18
s15199d