私のアプリケーションでは、アセンブリを解析してすべてのメソッドを抽出し、メソッドの名前とソース コードをオブジェクトの 1 つ (コードで定義したもの) に格納したいと考えています。
どこから実装を開始する必要がありますか?
編集:回答とコメントから、アセンブリからソースコードを取得するのはそれほど簡単ではないことがわかりました。次に、現在のソリューション (ビジュアル スタジオ) にないソース コード ファイルからソース コードを取得したい場合、どこから始めればよいでしょうか?
私のアプリケーションでは、アセンブリを解析してすべてのメソッドを抽出し、メソッドの名前とソース コードをオブジェクトの 1 つ (コードで定義したもの) に格納したいと考えています。
どこから実装を開始する必要がありますか?
編集:回答とコメントから、アセンブリからソースコードを取得するのはそれほど簡単ではないことがわかりました。次に、現在のソリューション (ビジュアル スタジオ) にないソース コード ファイルからソース コードを取得したい場合、どこから始めればよいでしょうか?
アセンブリにはソース コードが含まれていません。IL を抽出できる可能性がありますが、リフレクターや ildasm などのツールは特に役に立ちません。
メソッド名を取得するには、次のようにします。
var assembly = Assembly.GetExecutingAssembly();
var names = (from type in assembly.GetTypes()
from method in type.GetMethods(
BindingFlags.Public | BindingFlags.NonPublic |
BindingFlags.Instance | BindingFlags.Static)
select type.FullName + ":" + method.Name).Distinct().ToList();
このデバッグ情報を取得するには、Common Compiler Infrastructure: Metadata APIプロジェクトを使用します。
.pdb
これにより、ファイル (ソース ファイルや行番号などのデバッグ情報を含むファイル)を読み取ることができます。
まず、すべてのタイプを見つける必要があります。
これを行うには、ここを参照してください。
次に、各タイプのすべてのメソッドを見つける必要があります。
これを行うには、ここを参照してください。
すべてをまとめるための例が必要な場合は、お知らせください。
ソース コードを取得する方法がわかりませんが、メソッドに関する情報を取得しようとしている場合は、リフレクションを使用する必要があります。
MethodInfo[] methodInfos = typeof(MyClass).GetMethods(BindingFlags.Public |
BindingFlags.Static);