2012-10-14 2 views
3

Possible Duplicate:
How to prevent ReflectionTypeLoadException when calling Assembly.GetTypes()조립품에 정의 된 유형 가져 오기

어셈블리의 모든 유형을 가져오고 싶습니다. 그러나, 나는 다음과 같은 오류가 발생합니다 :

System.Reflection.ReflectionTypeLoadException: Unable to load one or more of the requested types.

문제는, 그리고 단위 테스트 환경에서 프로덕션 환경에서만 사용할 수 있습니다 다른 어셈블리를 참조하고부터 내가 유형을 얻고 어셈블리입니다.

그래서 GetTypes 또는 이와 유사한 형식으로 어셈블리에서 실제로 정의 된 형식 만 반환하고 형식로드 예외는받지 못하게 할 수 있습니까?

.Assembly.GetTypes().Where(t => t.Namespace.Equals(... 
+0

이 적용될 수도 있지만 적용 할 수 없지만 어셈블리 내에서 개인 형식을 볼 필요가없는 경우 GetExportedTypes를 대신 사용하는 것이 좋습니다. http://msdn.microsoft.com/en-us/library/system.reflection.assembly.getexportedtypes.aspx – Phil

+0

GetExportedTypes에는 똑같은 문제가 있습니다. 물론 두 방법 중 하나를 사용할 수도 있지만 다른 어셈블리의 참조에 액세스하는 기본 문제를 극복하지는 못합니다. – sweetfa

+0

[모든 유형의 어셈블리 가져 오기] (http://haacked.com/archive/2012/07/23/get-all-types-in-an-assembly.aspx) 블로그 게시물에 모든 사람이 왜 링크하지 않습니까? 우리 모두에 대해 알아?! 또한, [Jon Skeet의 대답] (http://stackoverflow.com/questions/7889228/how-to-prevent-reflectiontypeloadexception-when-calling-assembly-gettypes)을 참조하십시오. 여기에 많이 복사해야합니다. – sehe

답변

9

GetTypes 교체는 어셈블리에 정의 된 유형을 얻을 수 있지만, 당신은 그들이 당신이로드되지 않았거나 찾을 수없는 어셈블리에있는 유형을 참조하고 있기 때문에 그것들을로드 할 수 없습니다. 예를 들어,이 다른 어셈블리의 클래스에서 파생 된 형식을로드하려고하면 ReflectionTypeLoadException이 표시됩니다. 예외 개체의 Types 속성에서로드 한 형식을 가져올 수 있습니다. 로드 할 수없는 각 유형에 대해 null이 있고 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;  
} 
+0

-1 명확하게 언급 된 질문은 "형식로드 예외를 얻지 못했습니다."그리고 여러분은 다시 try catch 방식으로 시도했습니다. – Rikki

+4

@MohammadGoudarzi "형식로드 예외를 얻지 못하는"방법은 없습니다.로드 할 수있는 형식 만 가져올 수 있습니다. –

+0

"Assembly.GetExportedTypes()"는 어떻게됩니까? – Rikki

관련 문제