2009-12-29 4 views
5

나는 이것을 해결하기 위해 내 머리를 뽑아 왔습니다. 내가 시도하고있는 것은 내가 작업하고있는 코드의 일부로 객체가 어떻게 사용되고 있는지에 대한 '지도'를 만드는 것이다. 향상된 용도 찾기로 생각하십시오. 이 보여줄 수있는 가장 쉬운 방법은 예입니다 :.NET 리플렉션 : 사용 된 유형 찾기

public class MasterClass 
{ 
    Type1 type1; 
    Type2 type2; 
    Type3 type3; 
    void InitializeData() 
    { 
     type1 = new Type1(this); 
     type2 = new Type2(this); 
     type3 = new Type3(this); 
    } 
} 

public class Type1 
{ 
    private MasterClass _master; 
    public Type1(MasterClass master) 
    { 
     _master = master; 
    } 
    public void Something() 
    { 
     //use _master.type2 and _master.type3 here 
    } 
} 

public class Type2 
{ 
    private MasterClass _master; 
    public Type2(MasterClass master) 
    { 
     _master = master; 
    } 
    public void Something() 
    { 
     //use _master.type3 here 
    } 
} 

public class Type3 
{ 
    private MasterClass _master; 
    public Type3(MasterClass master) 
    { 
     _master = master; 
    } 
    public void Something() 
    { 
     //use _master.type1 and _master.type2 here 
    } 
} 

내가 뭘하려고 오전 매핑을 가져 오거나 예제의 경우, 그보고, 같은 줄 것입니다 :에서 사용

타입 1을 { 에서 사용하는 타입 3}

타입 2 : 그때 내가 집에 오전 사전에 그것을 얻을 수 있다면 {타입 1, 타입 2}

: {타입 1, 타입 3}에서 사용

타입 3. :-)

내가 무엇을 시도했다 :

나는 각 방법은 다음 IL 배열을 당겨 다음 행운와 피연산자를 구문 분석을 시도, 어셈블리, 각 유형을 통해가는 노력했다. 나는 정규식으로 소스 파일을 살펴 보려고 시도해 봤지만 여러 가지 다른 스타일로 작성된 수천 개의 클래스가 있으므로 일부 참조를 놓친다는 것을 의미합니다.

리플렉터를 사용할 수 있습니다 & &/|| Resharper 한 번에 하나의 참조를 얻을 수 있지만 그들을 한꺼번에 얻고 싶습니다.

제안 사항?

+0

에 대한 좋은 해결책을 언급 리플렉터가에 추가겠습니까, 충분? – driis

+0

프로그래밍 방식으로 또는 도구를 사용하여이 작업을 수행 하시겠습니까? – Ucodia

+0

C#은 프로그래밍 언어입니다. 리플렉션이 없습니다. .NET입니다. –

답변

3

쉽지 않습니다.

  • 유형

    • 방법
    • 속성 (get 및 set)
    • 이벤트를 (추가 및 제거) : 다음의 모든 MethodInfo, PropertyInfo,의 fieldInfo 등의 인스턴스를 취득해야합니다

    그런 다음 인스턴스가 MethodInfo에 해당 있는지 확인하기 위해 IL를 구문 분석하고 유형에 검사되고있는 모듈 인스턴스에서 ResolveMethod 인스턴스를 호출하고보고해야 귀하의 방법에 대한 귀하의 사용을 결정하려고합니다.

    편집 : Visual Studio에서 "모든 참조 찾기"이것은 단지 직접 참조를 찾을 것처럼

    . indirect 참조 (예 : method1은 method2를 참조하고 method2는 method3을 참조 - method1에서 method3으로의 연결이 있음을 확인하려는 경우) 재귀를 사용하여이 작업을 수행해야합니다.

  • 7

    내가 설명하는 문제에 맞게 작성되었으므로 NDepend을 사용하는 것이 좋습니다. 코드에서 이것을하는 것은 꽤 많은 일이 될 것입니다.

    +0

    귀하의 추천에 따라 나는 NDepend의 흔적을 다운로드하고 함께 놀았지만 필요한 보고서를 생성하는 방법을 찾지 못했습니다. 나는 그걸 좀 더 가지고 놀아야 할 수도 있습니다. –

    +0

    종속성 매트릭스가 사용자의 요구 사항에 맞지 않았습니까? 아니면 필요한 세부 사항에 포함되지 않습니까? – user7116

    +0

    이름 공간에 수백 개의 클래스가 있고 형제 네임 스페이스에있는 객체에 대한 참조가 없기 때문에 행렬이나 그래프를 사용할 수 없습니다. 내가 처리해야하는 더 작은 네임 스페이스 중 하나는 640 x 640 인 행렬을 생성합니다. 모든 개체를 포함 시키려면 4300+ x 4300+의 행렬을보아야합니다. 트레일을 사용하면 확대 할 수 없습니다. 따라서 그래프의 경우 개별 클래스로 이동할 수없는 커다란 얼룩이 보입니다. :-( 다시 한번 많은 시간을 보지 못했습니다. –

    0

    공구를 검색하는 경우 반사경은 일부 추가 기능을 사용하여 도구를 검색 할 수 있습니다.FileGenerator 같은 http://reflectoraddins.codeplex.com/

    일부 플러그인 파일에 직접 반사판 출력을 복사 할 수 있습니다 :

    여기에서 추가 기능의 넓은 범위를 찾을 수 있습니다. 그 작업을 수행