2014-12-02 6 views
0

DLL을로드하려고하고 각 유형에 대해 속성 이름과 값을 표시하려고합니다. "Object does not match target type"메시지와 함께 System.Reflection.TargetException을 던지는 다음 코드를 가지고 있습니다.리플렉션은 DLL의 모든 유형에서 값을 가져옵니다.

var DLL = Assembly.LoadFrom(PathToDLL); 
       foreach (Type type in DLL.GetTypes()) 
       { 
        foreach (PropertyInfo property in type.GetProperties()) 
        { 
         lstProperties.Items.Add(string.Format("{0} - {1}", property.Name, property.GetValue(DLL, null))); 
        } 
       } 

GetValue() 호출과 함께 유형, DLL 및 null을 사용해 보았습니다. 무엇이 잘못 되었나요?

나에 대해 테스트하고있어 DLL은 하나 개의 속성이 있습니다

public string TheValue{ get; set; } 

덕분에 모든.

+3

인스턴스 속성 값을 가져 오려면 해당 유형의 인스턴스가 필요합니다. –

+1

** class ** 속성의 값을 표시 할 수 없으며 값이 없습니다. ** 객체 ** 속성의 값만 표시 할 수 있습니다. 이것은 클래스와 객체의 차이가 중요한 부분입니다. – MikeSW

+1

물론, 인스턴스화 할 수없는 유형의 어셈블리가있을 수 있습니다 (추상 클래스가 떠오른다). 그리고 당신이 할 수있는 모든 타입을 인스턴스화하기 전에 두 번 생각해야합니다. 그것은 기본적으로 당신이 제어하지 않는 임의의 코드를 실행하는 것입니다 (그리고 다시 임의의 어셈블리를로드하는 것입니다). –

답변

2

의견을 확대하여 다음 내용을 설명합니다.

lstProperties.Add(string.Format("{0} - {1}", property.Name, property.GetValue(cls, null))); 
: 그런 다음 생성 된 인스턴스를 참조하는 코드를 변경

TheClass cls = new TheClass(); 
cls.TheValue = "hello!"; 

:

public class TheClass 
{ 
    public string TheValue { get; set; } 
} 

이 클래스의 인스턴스를 생성하고 속성 값을 설정하여 DLL에서

+0

내가 어디로 잘못 가고 있는지 알 겠어. 감사! – Jay

관련 문제