ふるすたっくえんじにあっぽい人の日記

ASP .NET MVC (C#)、.NET Framework、iOS (Objective-c) アプリ、Androidアプリ (Java)、AWS、たまにLAMPとかプロジェクトマネジメントあたりのお話

【C#】アセンブリで定義されている型を取得する

はい!

とりあえずアセンブリ一覧取得
ASP.NETと.NETで微妙に違うのだけれどもー

// ASP.NET環境の場合
var assemblies = BuildManager.GetReferencedAssemblies().Cast<Assembly>();

// .NET環境の場合
var assemblies = System.AppDomain.CurrentDomain.GetAssemblies();

GetReferencedAssembliesの場合、その名の通り、参照されてるアセンブリたちがぽこっと取れます。つまりロードされていないものも含まれるんですねー。昨日はまってたのはこれ。
んでもって、GetReferencedAssembliesの戻り値はICollection型なので、列挙するにはCastが必要よっと。
Getassemblies()の場合は、ロードされてるアセンブリたちのみ取れる模様。
アセンブリで定義されている型を参照するにはロードされてないとですからねー。
GetAssembliesの戻り値はAssembly[]なのでそのまんまでおっけ。

はい、あとはこれしてあげてくらはい

private static IEnumerable<Type> GetLoadableTypes(Assembly assembly)
{
    try
    {
        return assembly.GetTypes();
    }
    catch (ReflectionTypeLoadException ex)
    {
        return ex.Types.Where(type => type != null);
    }
}

次に続きますよー