1

두 개의 dll 파일이 있습니다. DataLayer.dll 및 ProcessLayer.dll을 말합니다. DataLayer.dll는 MyClass에 아래와 같이라는 클래스 가지고참조 된 dll/assembly에서 유형 세부 정보 읽기

public class MyClass 
{ 
public string name; 
public int age; 
public string aadhar; 
} 

및 I는 MyClass의 파라미터로서 입력 한 메소드가 제 조립체 ProcessLayer.dll에 DataLayer.dll을 주심을했다.

using DataLayer; 
namespace ProcessLayer 
{ 
    public class Process 
    { 
    public int GetMyClass(MyClass objMy) 
    { 
     return objMy.age; 
    } 
    } 
} 

어떻게 반사를 사용하여 ProcessLayer.dll에서 모든 메소드 매개 변수를 읽을 수 있습니까? 시도 method.GetParameters(); 문을 실행하면 오류를

Assembly assembly = Assembly.LoadFile(@"C:\ProcessLayer.dll"); 
foreach (Type _type in assembly.GetTypes()) 
{ 
    foreach (var method in _type.GetMethods()) 
    { 
     var parameters = method.GetParameters(); 
    } 
} 

를 사용하고있어하고 있습니다.

도와주세요.

Mono.cecil으로 가져 오는 방법은 어떤 생각일까요?

+0

'method.GetParameters() '에서 어떤 오류가 있습니까? – niksofteng

+0

"파일 또는 어셈블리 'DataLayer, 버전 = 1.0.0.0, Culture = neutral, PublicKeyToken = null'또는 해당 종속성 중 하나를로드 할 수 없습니다. 시스템에서 지정된 파일을 찾을 수 없습니다." 오류 있음 –

+0

절대, * 절대 *, ** 사용하지 마십시오 ** LoadFile()을 사용하십시오. 이 시나리오에서는 일반 Load()가 작동합니다. 경로를 지정해야한다면 * LoadFrom()을 사용하십시오. 바라지는 않지만, 루트 디렉토리에서 어셈블리를로드하기 시작하면 아무 일도 일어나지 않습니다. –

답변

1

어셈블리를로드 한 다음 형식을 가져온 다음 이후 유형에 대한 메서드를 가져와야합니다.

var myAssembly Assembly.LoadFrom(@"..\ProcessLayer.dll"); 
var myAssemblyTypes = myAssembly.GetTypes(); 
var firstType = myAssemblyTypes[0]; 
var firstTypeMethods = firstType.GetMethods(); 
var firstTypeFirstMethod = firstTypeMethods[0]; 
var params = firstTypeFirstMethod.GetParameters(); 

다른 어셈블리의 형식이 필요하면이 형식을로드 할 수 있습니다.이 형식을 인스턴스화해야 할 수도 있습니다.

Assembly assembly = Assembly.LoadFrom("Assembly.LoadFile(@"..\DataLayer.dll"); 
Type missingType = assembly.GetType(<your missing type>); 
var createTypeInstance = Activator.CreateInstance(missingType); 
+0

잘 GetMethods()를 사용하여 메서드 이름을 얻을 수 있습니다; 하지만 난 반사를 사용 하여이 방법의 각각에 대한 매개 변수 목록을 얻을 수있는 방법을 찾고 있는데. 여기서 메서드 매개 변수는 다른 dll에서 참조됩니다. 거기에 내가 갇혀 ... –

+0

좋아, 매개 변수에 대한 질문을 업데이 트 순간에, 그것은 방법 이름을 묻습니다 : 어떻게 반영을 사용하여 ProcessLayer.dll에서 모든 메서드 이름을 읽을 수 있습니까? –

+0

두 번째 어셈블리를로드하는 것이 좋습니다. myAssemblyName.GetReferencedAssemblies()를 반복하고로드하십시오. 그들이 사용할 수 있는지 확인해야합니다 또는 오류가 발생합니다 ... –

관련 문제