私は異なるアセンブリにクラス A とクラス B を持っています。私が知る必要があるのは、リフレクションを介してクラス B のメソッドでメソッド A.foo() の使用法を取得する方法があるかどうかです。私はおそらくILでそれを読んだことがありますか?
助けてくれてありがとう。
私は異なるアセンブリにクラス A とクラス B を持っています。私が知る必要があるのは、リフレクションを介してクラス B のメソッドでメソッド A.foo() の使用法を取得する方法があるかどうかです。私はおそらくILでそれを読んだことがありますか?
助けてくれてありがとう。
いいえ、リフレクションでこれを行うことはできません。リフレクションは、オブジェクトのメタデータに基づいています。それらが公開するパブリック API。それらの内部実装は、リフレクションを通じてまったくアクセスできません。
Nitriq や NDepend などのコード分析ツールの使用を検討したことがありますか? LINQ を介したNDepend のコード クエリでは、次のように簡単です。
from t in Types
where t.IsUsing ("ClassLibrary1.A.Foo()")
select new { t }
実行時にそのような情報が本当に必要な場合は、利用可能なNDepend.APIがあり、そこで CQLinq を使用できます。しかし、もし私があなただったら、なぜ実行時にそのような情報を見つけたいのかをもう一度考え直します...
method を使用してメソッド本体を読み取ることができますGetMethodBody()
。その後、使用法を見つけるのはあなた自身です。サンプルを作成しています...
このサンプルは役立つかもしれません:
Assembly assembly = Assembly
.GetAssembly(typeof(B));
List<Type> types = assembly.GetTypes().ToList();
Type controller = types
.Where(t => t.Name == "a-class-name")
.Single();
List<MethodInfo> methods = controller
.GetMethods().ToList();
MethodInfo method = methods
.Where(m => m.Name == "a-method-name")
.First();
MethodBody body = method
.GetMethodBody();
// Search body.LocalVariables
私は実際にこれについての記事をここに書きました。