당신은 어떻게 프로그래밍 방식으로 식별하는 번호를 참조하는 방법으로 C#

StackOverflow https://stackoverflow.com/questions/106329

  •  01-07-2019
  •  | 
  •  

문제

나는 최근에 상속 C#콘솔 응용 프로그램의 일부를 정리하고 청소합니다.Long story short,응용 프로그램으로 구성됩의 하나의 클래스가 포함된 110,000 라인의 코드입니다.Yup,110,000 라인에서 하나의 클래스입니다.고,물론,응용 프로그램은 핵심은 우리의 비즈니스,실행'시계 라운드 데이터를 업데이트 사용에 동적인 웹 사이트입니다.지만 나에게는 이전이었다"정말 좋은 프로그래머",그것이 분명한지 않았습으로 OOP(또는 버전 제어).

어쨌든...면서 익숙하게 자리 코드가 나는 많이 발견하는 방법을 선언했지만,결코 참조됩니다.그것을 보면 복사/붙여넣기하는 데 사용되었 버전 코드,예를 들어가라는 방법 getSomethingImportant(),기회는 또 다른 방법이 있다라고 getSomethingImortant_July2007()(패턴 functionName_[날짜 스탬프]에서 가장 많은 경우).그 때처럼 보이는 프로그래머가 되었을 변경하 getSomethingImportant()그는 복사/붙여넣기 이름을 다시 지을 getSomethingImortant_Date,변경 getSomethingImortant_Date 를 변경한 다음,어떤 메소드를 호출에 코드를 새로운 메서드 이름을 떠나 기존의 방법에서 하는 참조되지 않.

나는 다음과 같이 쓰는 간단하는 콘솔 응용 프로그램를 크롤링을 통해 하나의 거대한 클래스 목록을 반환합의 모든 방법의 수와 시간 각 방법을 참조됩니다.에 의해 내고 있다고 추정은 1000 개 이상 방법,그래서 이것을 하여 손을 것입니다.

이 있는 클래스..NET framework 를 사용할 수 있는 검사 이 코드는?또는 다른 유용한 도구는 데 도움이 될 수 있는 방법을 확인하는 선언되었지만 참조되지 않?

(질문:다른 사람이 이제까지 보 C#응용 프로그램을 다음과 같이,하나 reeeealy 큰가?그것은 더 많거나 적은 하나의 거대한 절차적 공정 난 이것은 첫 번째 나는 본 적어도의 크기입니다.)

도움이 되었습니까?

해결책

당신이 시도할 수 있습 사용 NDepend 는 경우에 당신은 단지 추출하기 위해 필요한 일부 통계에 대한 귀하의 클래스입니다.이 도구에 의존합니다.세실 내부적으로 검사하 어셈블리입니다.

다른 팁

다운로드 무료 평가판 의---끝---이력서.사용---끝---이력서->검색->을 찾아 사용이 파일에서(Ctrl-Shift-F7)모든 사용법을 강조 표시됩니다.또한,계산이 나타나는 상태 표시줄에서.검색하려는 경우 여러 파일을 수행할 수 있습니는 너무를 사용하려면 Ctrl-Alt+F7.

을 좋아하지 않는 경우에는,당 텍스트 검색 기능에 이름을 Visual Studio(Ctrl-Shift-F),이해 당신에게 말 얼마나 많은 항목에서 발견된 솔루션에는 그들이 있습니다.

을 완료 베르디에 Romain 대답할 수 있을 발굴 조금 무엇으로 NDepend 을 가져올 수 있습니다.(면책 조항:나는 개발자의 NDepend 팀)

NDepend 쿼리할 수 있습니다.순 코드의 일부와 함께 LINQ 쿼리를 처리합니다.아는 어떤 방법을 통고에 의해 호출되는 다른 사람,것으로 간단으로 쓰는 다음과 같은 쿼리:

from m in Application.Methods
select new { m, m.MethodsCalled, m.MethodsCallingMe }

이 쿼리의 결과에 표시되는 방식으로 검색하기 쉬운 호출자 및 호출 수신자(및 100%통합 Visual Studio).

NDepend methods callers and callees


다른 많은 NDepend 기능은 당신을 도울 수 있습니다.예를 들어,당신은 할 수 있습니다 를 마우스 오른쪽 단추로 클릭하여 방법을 Visual Studio>NDepend>선택 방법...>를 사용하고 있는 저를(직접적 또는 간접적으로) ...

NDepend Visual Studio method right click

다음 코드 쿼리가 생성되...

from m in Methods 
let depth0 = m.DepthOfIsUsing("NUnit.Framework.Constraints.ConstraintExpression.Property(String)")
where depth0  >= 0 orderby depth0
select new { m, depth0 }

...과 일치하는 직접 및 간접적인 발신자의 깊이와 통화(1 의 직접적인자,2 개단자의 직접출 등).

NDepend indirect method callers

고 다음 버튼을 클릭하여 수출 그래프, 을 얻을,당신은 콜의 그래프 피벗 방법(물론 그것이 될 수 있는 다른 방법으로,주변가.e 이라는 방법에 의해 직접적 또는 간접적으로 특정 피벗 방법).

NDepend call graph

나는 생각하지 않을 쓰고 싶은 이것만 하면 직접 구매 NDepend 고 사용 코드 쿼리 언어

FXCop 규칙이 있는 것이 식별되지 않는 개인 방법입니다.할 수 있도록 모든 방법들을 통해 프라이빗하고 목록을 생성.

FXCop 한 언어를 얻으려면 애호 http://www.binarycoder.net/fxcop/

당신이 원하지 않는 경우 밖으로 껍질에 대한 NDepend 기 때문에,같은 소리가 단지 하나의 클래스에서는 하나의 어셈블리-주석으로 방법 및 컴파일.면 그것을 컴파일하고,이를 삭제-당신이해야하지 않는 모든 문제를 상속,가상 방법이 나는 것 같습니다.나는 그것을 알리는 원시적이지만,때로는 리팩터링은 단순한 일은 이렇습니다.이 종류의 가정이 있는 단위 테스트를 실행한 후 각 구축될 때까지 당신은 코드 정(빨강/녹색/리팩터).

분석기 창에 반사체 당신이 보여줄 수 있습니다 방법이라고(여 사용).
것 같은 그 소리는 매우 오랜 시간이 걸릴 정보를 얻을 수 있는 방법 하지만입니다.
당신은 수도에서 보 API 는 반사체를 제공합 쓰기에 대한 추가 기능 및 얻을 수 있는 지루한 작업을 분석하는 방법입니다.저는 소스 코드에 대 한 코드 메트릭 추가 당신을 말할 수 있는 방법에 대해 조금에 대한 정보를 얻기 위해 방법에서 반사체 API 를 사용합니다.

편집:도 뷰어 코드 모델 추가 반사할 수 없습니다.그것은 좋은 방법을 탐구하는 반사체 API 를 사용합니다.

난 아무것도 기본 제공되는 이를 처리하기 위한 특정한 경우,그러나 당신이 사용할 수 있습니다.Cecil.반 어셈블리한 다음 카운트에서 참조 IL.너무 힘들 것입니다.

가 없는 쉬운 도구를 할 수 있습니다.NET framework 자체입니다.그러나 나는 당신이 생각하지 않아 정말 필요한 목록을 사용하지 않는 방법 한 번에.그것을 보고,당신은 단지 가는 코드를 통해 각 방법을 확인하면 그것은 사용하지 않는 다면 삭제합니다.나는 Visual Studio 를 사용하여"참"명령하십니다.또는 사용할 수 있습니다---끝---이력서의"분석"창을 엽니다.할 수 있습니다 또는 Visual Studio 를 사용하여 코드를 분석 도구를 찾을 사용하지 않는 모든 개인 방법입니다.

도를 컴파일러 어셈블러와 같은 파일에 x86 지침,하지 않습니다.NET 어셈블리입니다.

왜?기 때문에 그것은 훨씬 쉽게 구문 분석하 어셈블러 코드보다 그것은 C#코드나.NET 어셈블리입니다.

예를 들어,함수/방법을 선언은 다음과 같이 나타납니다.

    .string "w+"
    .text
    .type   create_secure_tmpfile, @function
create_secure_tmpfile:
    pushl   %ebp
    movl    %esp, %ebp
    subl    $24, %esp
    movl    $-1, -8(%ebp)
    subl    $4, %esp

와 기능/는 방법을 참조 아래와 같습니다:

    subl    $12, %esp
    pushl   24(%ebp)
    call    create_secure_tmpfile
    addl    $16, %esp
    movl    20(%ebp), %edx
    movl    %eax, (%edx)

당신이 볼 때"create_secure_tmpfile:"당신은 당신이 알고있는 함수/방법을 선언하고 당신이 볼 때"전화 create_secure_tmpfile"당신은 당신이 알고있는 함수/방법을 참조합니다.이 좋은 수 있습니다 충분히 당신의 목적지만,그렇지 않을 경우 그것은 단지 몇 가지 추가 단계를 수행하기 전에 생성할 수 있습니다 아주 귀여운 통나무에 대한 귀하의 전체 응용 프로그램.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top