私は自分用にユーティリティを作成しています。これは、C# リフレクションを学習するための演習として、また、作成したツールを実際に自分で使用したいからです。
私が求めているのは、基本的にアプリケーションをアセンブリに向け、エクスポートされた HTML フォームにフィールドとして含める必要があるプロパティを選択する特定のクラスを選択することです。そのフォームは、ビューの開始として ASP.NET MVC アプリで使用されます。
使用したいアプリケーションに Subsonic オブジェクトを使用しているので、これは合理的なはずであり、データ型に応じて異なる出力 HTML などを含めることで、Reflection がこれを実現する方法であると考えました。
しかし、私が探しているものはとらえどころのないようです。OpenFileDialog で選択した DLL/EXE を開始点としてロードしようとしています。
String FilePath = Path.GetDirectoryName(FileName);
System.Reflection.Assembly o = System.Reflection.Assembly.LoadFile(FileName);
これは正常に動作しますが、Subsonic で生成されたオブジェクトは実際には Subsonic.dll などで定義されているオブジェクト タイプでいっぱいであるため、それらの依存オブジェクトは読み込まれません。入る:
AssemblyName[] ReferencedAssemblies = o.GetReferencedAssemblies();
それも、私が期待するものを正確に含んでいます。ただし、私が理解しようとしているのは、オブジェクトへの掘り下げが適切に機能するように、これらのアセンブリをロードする方法です。これらのアセンブリが GAC または実行中の実行可能ファイルのディレクトリにある場合、それらの名前で読み込むことができることは理解していますが、このユース ケースには当てはまらない可能性が高く、それが私の主なユース ケースです。
要するに、特定のアセンブリと、ファイル名で始まるすべての任意のアセンブリをロードして、型、プロパティ、メソッドなどの完全にリフレクションで参照可能なツリーを作成する方法です。
Reflector のようなツールがこれを行うことは知っていますが、それを取得するための構文が見つかりません。