2009-08-22 8 views
75

アセンブリ内のすべてのクラスのリストを(プログラムによって - C#)出力したいと思います。C#:アセンブリ内のすべてのクラスを一覧表示する

ヒントまたはサンプルコードはどのようにするのですか?反射?

+0

プロジェクトで参照されていないアセンブリを調べる場合は、私の更新された回答を参照してください。 – Thorarin

答えて

115

Assembly.GetTypesを使用してください。例:

+1

大きなアセンブリのための提案はありますか?このコードを13.8 MBのアセンブリに対して実行すると、VSインスタンスが無期限に何かのように感じるためにハングします。私は小さな9 KBアセンブリを試してみましたが、うまくいきました。私はあなたが何を考えているのか知っています - なぜあなたは13.8 MBのアセンブリを持っていますか?それはNetTeirsテンプレートを使って生成された私のデータ層の一部です。私たちは多くのテーブルを持っています。 – dyslexicanaboko

+1

@dyslexicanaboko:あなたがたくさんのタイプを持っていれば、それをすべて列挙するのに時間がかかるでしょう。あなたのアセンブリにはいくつのタイプ*がありますか?そして、あなたは彼らと何をしていますか? (型の抽出に問題があるのか​​、後で何をしているのか確信していますか?) –

+0

asm.GetTypes()呼び出しを逃すことはできません。ちょうどハングします。タイプがたくさんある - 私は何もできません。なぜなら、それらをすべて手に入れようとすることで掘り下げているからです。私のCPUは、私の4つのコアのうちの1つで30%にシュートします。私は実際には、 "ちょっと - この名前空間だけを見てください"という言い方があるのだろうかと思っています - GetTypes()メソッドには空のコンストラクタしかないので、それは不可能だと思っています。私は種類のオブジェクトブラウザを作成しようとしています。 – dyslexicanaboko

76

Jonの例に追加したいと思います。独自のアセンブリへの参照を取得するには、使用することができます。

Assembly myAssembly = Assembly.GetExecutingAssembly(); 

System.Reflection名前空間を。

あなたはへの参照を持っていないアセンブリを調べたい場合は、あなたがこれらのいずれかを使用できます。

Assembly assembly = Assembly.ReflectionOnlyLoad(fullAssemblyName); 
Assembly assembly = Assembly.ReflectionOnlyLoadFrom(fileName); 

あなたは、あなたがそれを見つけた後、あなたのタイプをインスタンス化する場合:

Assembly assembly = Assembly.Load(fullAssemblyName); 
Assembly assembly = Assembly.LoadFrom(fileName); 

詳細についてはAssembly class documentationをご覧ください。

Assemblyオブジェクトへの参照を取得したら、すでに実証済みのassembly.GetTypes()を使用できます。

+0

私のソリューションに含まれる完全に異なるアセンブリをどのように参照できますか? – Alex

+11

最も簡単な方法は、あなたの知っている型で 'typeof'を使用し、次に私の例のように' Assembly'プロパティを使うことです。 –

+2

あなたのソリューションにあるアセンブリを参照するには、abc.dllと言います。もしdllの名前をハードコーディングしていれば、アセンブリを参照するもう1つの方法があります: 'Assembly assembly = Assembly.Load(" abc "); ' – Kash

関連する問題