2009-08-06 2 views
4

Cecil을 사용하여 주어진 메서드와 관련된 특성을 검사하려고합니다. 을 찾을 것 같다,하지만 난 다음 코드를 사용하여 이름을 얻을 수 없습니다 :이 내가 내 기능을 설정 한 속성이어야합니다 알고Mono.Cecil - 사용자 지정 속성을 얻는 방법

AssemblyDefinition assembly = AssemblyFactory.GetAssembly(pathBin); 
assembly.MainModule.Types[0].Methods[1].CustomAttributes[0].ToString() 

을 나는 DLL에서 제거, 두 번째 때문에 코드 행은 null이됩니다. 속성의 이름을 가져올 수 있습니다. 현재 두 번째 코드 행은 "Mono.Cecil.CustomAttribute"만 반환합니다. 저는 속성의 이름 (클래스 유형) 이름을 얻는 방법이 있어야한다고 생각합니다. 맞습니까?

감사합니다.

답변

7

MoMA도 작성할 때 문제가있었습니다.

AssemblyDefinition assembly = AssemblyFactory.GetAssembly(pathBin); 
assembly.MainModule.Types[0].Methods[1].CustomAttributes[0].Constructor.DeclaringType.ToString() 
+0

웃긴다. 그것은 내가 지금도 사용하고있는 것입니다. –

+3

나는 Cecil의 저자에게서 그것을 얻었다. 그래서 나는 이것이 유일한 방법이라고 생각한다. – jpobst

+0

+1 : Nice, thanks –

-3

CustomAttribute 그래서 ToString()은 저자가 결정 무엇이든 할 것입니다하는 System.Attribute 파생 된 유형의 인스턴스입니다 : 여기가 사용하는 코드입니다.

당신은 당신이 자신의 유형을 요청해야 속성 유형에 대해 알고 싶은 경우

: 나는 당신이 사용하는 CustomAttributes이 속성을 보지 못했다

typeInfo.GetCustomAttributes(false)[0].GetType().ToString() ; 

, 그래서 차라리 내가 항상 사용하는 방법 MemberInfo.GetCustomAttributes(bool)을 사용했다.

+0

그래,하지만 리플렉션을 사용하지 않고있다. 나는 세실을 사용하고있다. 반사되는 것처럼 보이네요, 그렇죠? –

+3

-1 : 질문은 System.Reflection이 아니라 Mono.Cecil에 관한 것입니다. – ShdNx