2010-03-30 7 views

답변

8

나는 비슷한 것을 시도해 왔으며 찾고자하는 것을 칠 때까지 단순히 네임 스페이스와 클래스를 검색하는 다음을 생각해 냈습니다.

부분 클래스가 발생하면 첫 번째 히트 만 반환하고 파일의 모델은 해당 파일에 포함 된 멤버 만 가질 수 있지만 대부분의 경우 작동합니다. 아직도 그것에 대해 어떻게 해야할지 알아 냈습니다.

이것은 T4 템플릿에서 비롯되며 T4 툴킷 (TransformationContext의 출처)입니다. 사용하지 않는 경우 프로젝트 요소를 잡고 재귀 적으로 Project.CodeModel.CodeElements를 전달하십시오. FindClass 메소드.

예제 사용법은 FindClass ("MyCompany.DataClass")입니다.

private CodeClass FindClass(string className) 
{ 
    return FindClass(TransformationContext.Project.CodeModel.CodeElements, className); 
} 

private CodeClass FindClass(CodeElements elements, string className) 
{ 
    foreach (CodeElement element in elements) 
    {  
     if(element is CodeNamespace || element is CodeClass) 
     { 
      CodeClass c = element as CodeClass; 
      if (c != null && c.Access == vsCMAccess.vsCMAccessPublic) 
      { 
       if(c.FullName == className) 
        return c; 

       CodeClass subClass = FindClass(c.Members, className); 
       if(subClass!= null) 
        return subClass; 
      } 

      CodeNamespace ns = element as CodeNamespace; 
      if(ns != null) 
      { 
       CodeClass cc = FindClass(ns.Members, className); 
       if(cc != null) 
        return cc; 
      } 
     } 
    } 
    return null; 
} 
+0

감사합니다. 나는 실제로 이와 비슷한 일을했다. 나는 당신의 대답을 받아 들일 것입니다. 지금까지 단 하나뿐입니다. :) –

+0

관심의 대상에서, 부분 수업을 전혀 다루지 않았습니까? 나는 검색을 특정 네임 스페이스로 제한하고 모든 방법을 검색하여 모든 일치를 반환해야한다고 생각했습니다. – RSlaughter

+0

저는 실제로 한 타입의 멤버 선언을 찾는 방법을 찾고 있습니다. 그러나 이것은 훨씬 더 가까이에 있습니다. 많은 감사합니다! – TheXenocide

관련 문제