2010-08-05 2 views
8

C#에서 methodinfo를 통과하는 가장 쉬운 방법은 무엇입니까?C# 메서드를 통과하고 메서드 본문을 해석하십시오.

메소드 본문을 탐색하고 필드 참조 등을 찾고 유형을 검색하려고합니다.

하는 System.Reflection에서있다 :

낮은 수준이 좀 내가이 몸을 통과 할 수있을 것입니다 전에 "일부"작업을 필요로
mi.GetMethodBody().GetILAsByteArray() 

.

나는 Cecil이 존재한다는 것을 알고 있지만, cecil을 사용하여 메모리 어셈블리를로드하는 데 문제가 있음을 알고 있습니다. 내가 함께 일하고있는 어셈블리는 항상 "디스크에"있지 않습니다. 예를 들어 컴파일 된 메모리 어셈블리 일 수 있습니다. 부, 그리고 난 없이 디스크에 임시 어셈블리를 작성하지 않고 깨끗한 솔루션을 wan't.

거기에 다른 대안이 있습니까?

+0

Cecil 및 메모리 내장 어셈블리의 문제점은 무엇입니까? –

+0

@Tim : http://markmail.org/message/yssmfgrsqnnnzrvt를 찾았습니다. 조금 오래되었습니다. AssemblyFactory에는 file, byte [] 또는 Stream에서만 기존 어셈블리를로드하는 메소드가 없습니다. Boo에서 생성 된 어셈블리를 byte []에 직렬화하려고 시도했지만 "Type System.Reflection.Emit.AssemblyBuilder가 Serializable로 표시되지 않았습니다." 아마 내가 어셈블리에서 바이트 []를 (를) 검색하는 데 문제가 있습니다. – Marcus

답변

7

이게 도움이 될 것입니다 : Reflection based CIL reader. GetILAsByteArray()를 호출하여 얻은 바이트 배열에서 작동합니다.

+0

감사합니다. 그렇게해야합니다. 해결책을 찾기 위해봤을 때 그걸 놓쳤을거야. – Marcus

+1

적어도 물어보기 전에 봤 거든. 너무 많은 사이트를 여기에서 좋아하지 않는다 ;-) –

+0

모노 팀의 누군가가 이것을 읽고 있다면 런타임에 버그 또는 무언가가있다 : https://bugzilla.novell.com/show_bug.cgi?id= 628660 – Marcus