Visual Studio 2013에서 특수 코드 (메소드, 속성, 필드, …)의 참조 수는 Code Lens 로 표시됩니다 . Visual Studio에서 사용되지 않는 (제로 참조) 코드 를 얻고 싶습니다 . 그들을 구할 방법이 있습니까?
아래 참조를 의미합니다.
답변
아마도 당신이 겪고있는 것을 달성하는 가장 쉽고 쉬운 방법은 Visual Studio와 함께 제공되는 코드 분석 도구를 사용하여 죽은 코드와 사용하지 않는 멤버를 직접 찾아가는 것입니다.
이를 위해 새 코드 분석 규칙 세트 파일 (Via File-> New-> File )을 작성 하고 왼쪽 분할 창의 일반 이 선택 되어 있는지 아래로 스크롤하여 Code Analysis Rule Set 를 찾아 파일 이름을 지정한 다음 아래 규칙 선택). 복사 할 수있는 규칙 세트 파일의 내용은 아래를 참조하여 확장명이 .ruleset 인 새 파일에 붙여 넣어 사용하십시오.
규칙 세트 파일이 제공되면 솔루션 탐색기 패널 에서 프로젝트 파일을 마우스 오른쪽 단추로 클릭 하고 특성을 선택할 수 있습니다. 프로젝트 특성 창 에서 왼쪽 패널 의 코드 분석 탭을 클릭 한 후 열기 를 클릭하여 .ruleset 파일의 위치를 찾으십시오. 솔루션 파일의 속성으로 이동하면 (프로젝트 파일이 아닌) 솔루션의 각 프로젝트에 대한 코드 분석 파일을 한 곳에서 ( 코드 분석 설정 아래) 드롭 다운을 사용하여 선택할 수 있습니다. 참고 : 그러나이 속성 창의 드롭 다운에 규칙 세트 파일이 표시 되려면 이전에 규칙 세트 파일을 찾아 봤어야합니다.
그런 다음 간단히 프로젝트 / 솔루션에서 코드 분석을 실행하고 (Via Analyze-> 솔루션에서 코드 분석 실행 -또는 Alt + F11 ), 경고, 참조되지 않은 메소드 또는 사용하지 않는 멤버로 돌아갑니다. 심지어 다른 곳에서는 참조가없는 메소드가 참조하는 메소드를 찾을 수도 있습니다.
그러나 데드 코드에 대한 코드 분석이 잘못을 저지를 수있는 방법 중 하나는 델리게이트를 통해 메소드를 호출하고 리플렉션을 통해 참조를 ‘숨겨’내는 것입니다.
데드 코드를 감지하는 규칙은 구체적으로 다음과 같습니다.
- 다른 코드에서 호출되지 않은 개인 메소드 (CA1811)
- 사용하지 않은 지역 변수 (CA1804)
- 사용하지 않은 개인 필드 (CA1823)
- 사용하지 않은 매개 변수 (CA1801)
- 다른 코드에서 인스턴스화되지 않은 내부 클래스 (CA1812)
- 비트 OR 제한 스위치의 데드 코드 (C6259)
아래는 위의 단계를 수행하여 확인할 수있는 .ruleset 파일의 내용입니다. 아래 XML을 복사하여 notepad ++에 붙여 넣고 확장자가 .ruleset 인 어딘가에 저장 하고 위의 설명대로 찾아 사용하십시오.
<?xml version="1.0" encoding="utf-8"?>
<RuleSet Name="Dead Code Rules" Description=" " ToolsVersion="12.0">
<Rules AnalyzerId="Microsoft.Analyzers.ManagedCodeAnalysis" RuleNamespace="Microsoft.Rules.Managed">
<Rule Id="CA1801" Action="Warning" />
<Rule Id="CA1804" Action="Warning" />
<Rule Id="CA1811" Action="Warning" />
<Rule Id="CA1812" Action="Warning" />
<Rule Id="CA1823" Action="Warning" />
</Rules>
<Rules AnalyzerId="Microsoft.Analyzers.NativeCodeAnalysis" RuleNamespace="Microsoft.Rules.Native">
<Rule Id="C6259" Action="Warning" />
</Rules>
</RuleSet>
답변
https://scottlilly.com/c-code-quality-improvement/remove-unused-classes-properties-and-functions/
“안타깝게도 [Visual Studio Analysis]에서는 사용하지 않는 개인 구성원 만 검색 할 수 있습니다. 이는 코드 분석기가 다른 구성원이 공용 구성원을 사용할 수 있다고 가정하기 때문입니다. 웹 서비스를 통해 API로 공개하는 경우에도 마찬가지입니다. 또는 코드를 라이브러리로 릴리스 할 수 있습니다. … ReSharper는 유사한 코드 분석 기능을 가지고 있습니다.
답변
각 파일을 살펴보고 Ctrl-MO 명령을 사용하여 모든 것을 축소 한 다음 스크롤하여 참조 0을 찾으십시오.
답변
여기에 공개로 표시된 사용하지 않는 클래스를 찾는 데 사용한 수동 방법이 있습니다.
- 솔루션에서 하나의 프로젝트에 대해 모든 “공개 클래스”를 검색하고 “개인 클래스”로 바꾸십시오. “public static class”및 / 또는 “public abstract class”를 바꿔야 할 수도 있습니다.
- 모든 오류를 찾기 위해 빌드
- 빌드의 각 오류에 대해 소스 제어를 사용하여 참조 된 클래스의 파일을 복원하십시오.
- 빌드가 성공할 때까지 모든 오류에 대해 반복하십시오.
- 복원되지 않은 나머지 파일은 제거 대상이 될 수 있습니다.
- (선택 사항) 위의 파일에서 클래스 이름을 바꾸고 오류를 찾기 위해 한 번 더 빌드하십시오.
- 마지막으로 제거하려는 클래스 이름을 검색하여 리플렉션 또는 매직 문자열에 사용중인 인스턴스가 없는지 확인하십시오.
- 식별 된 사용하지 않는 클래스 파일을 제거하십시오.
- 청소하려는 각 솔루션 프로젝트에 대해 반복하십시오.
참고 : 파일 규칙 당 하나의 클래스를 따르지 않으면 더 많은 작업이 필요합니다. 또한 모든 API 서비스 엔드 포인트는 외부 프로젝트에서 사용하지 않는지 확인해야합니다.