2012-05-09 3 views
2

어셈블리 내의 특정 특성을 가진 메서드를 검사 할 수 있습니까? 현재 Visual C++ 프로젝트를 작업하고 있지만 C#도 괜찮습니다. 내가 parme 속성 예를 들어 현재 assmebly 내에서 모든 방법을 찾아야합니다. [XYZ]이 적용되었습니다. 이견있는 사람?어셈블리 내에서 특정 속성을 가진 메소드를 검색 할 수 있습니까?

+0

검색 할 C++/CLI 코드를 찾고 있습니다. 속성을 찾고있는 어셈블리가 정확합니까? – user7116

+0

@sixlettervariables : 예. – Jaggu

답변

3

비슷한 작업을 위해 Microsoft Roslyn을 사용했습니다. 꽤 쉬워야합니다.

예제 코드가 필요한 경우 알려주십시오.

좋아,이 시도 http://blog.filipekberg.se/2011/10/20/using-roslyn-to-parse-c-code-files/이 반사가 그것에 대해도 사용할 수 있습니다

는 해당 GetCustomAttributes 방법은 주어진 멤버에 정의 된 모든 속성을 반환 ... :

그리고 너무이 게시물을 살펴

this.GetType().GetMethods() 

루프 쓰루 모든 방법 및 해당 GetCustomAttributes를되어야

. 불행히도 저는 아내의 노트북에 Visual Studio가 설치되어 있지 않습니다 :)

+0

안녕하세요, 아니, 제발. 그냥 일부 샘플 코드 정말 감사하겠습니다. 나는 Roslyn을 사용하지 않고있다. Reflection을 사용하고 싶습니다. – Jaggu

4

시도해보십시오. 그것은 특정 속성에 대한 방법을 얻는

 MemberInfo[] members = obj.GetType().GetMethods(); 
     foreach (MemberInfo m in members) 
     { 
      if (m.MemberType == MemberTypes.Method) 
      { 
       MethodInfo p = m as MethodInfo; 
       object[] attribs = p.GetCustomAttributes(false); 
       foreach (object attr in attribs) 
       { 
        XYZ v = attr as XYZ; 
        if (v != null) 
         DoSomething(); 
       } 
      } 
     } 
2

를 사용하여 반사를 어떤 객체를 검색하고 속성을 사로 잡고 어셈블리의 경로 감안할 때

3

:이로드 명심

static void FindAttributes(String^ assemblyPath) 
{ 
    Assembly^ assembly = Assembly::ReflectionOnlyLoadFrom(assemblyPath); 

    for each (Type^ typ in assembly->GetTypes()) 
    { 
     for each (CustomAttributeData^ attr 
      in CustomAttributeData::GetCustomAttributes(typ)) 
     { 
      Console::WriteLine("{0}: {1}", typ, attr); 
     } 
    } 
} 

응용 프로그램 도메인에 사용하는 모든 어셈블리를 포함하므로 매번 자체 AppDomain에서이 코드를 호출 할 가치가 있습니다.

관련 문제