3

重複の可能性:
Assembly.GetTypes()を呼び出すときにReflectionTypeLoadExceptionを防ぐ方法

アセンブリ内のすべてのタイプを取得したいと思います。ただし、次のエラーが発生します。

System.Reflection.ReflectionTypeLoadException:要求されたタイプの1つ以上をロードできません。

問題は、タイプを取得しているアセンブリが、単体テスト環境内ではなく、実稼働環境でのみ使用可能な別のアセンブリを参照していることです。

では、GetTypesなどをフィルタリングして、アセンブリで実際に定義されている型のみを返し、型の読み込み例外を取得しない方法はありますか?

例:

.Assembly.GetTypes().Where(t => t.Namespace.Equals(...
4

1 に答える 1

9

GetTypesアセンブリで定義されている型のみを取得しますが、読み込んでいないか見つからないアセンブリにある型を参照しているため、読み込めない場合があります。たとえば、この別のアセンブリのクラスから派生した型を読み込もうとすると、ReflectionTypeLoadException. ロードした型は、例外オブジェクトのTypesプロパティから取得できます。nullロードできなかったタイプごとに for があり、LoaderExceptionsプロパティにはそれぞれの例外があることに注意してください。

public static Type[] GetTypesLoaded(Assembly assembly)
{
    Type[] types;
    try
    {
      types = assembly.GetTypes();
    }
    catch (ReflectionTypeLoadException e)
    {
      types = e.Types.Where(t => t != null).ToArray();
    }

    return types;    
}
于 2012-10-14T20:13:38.420 に答える