연습: 정적 코드 분석을 사용하여 코드 오류 찾기

이 연습에서는 레거시 코드 분석을 사용하여 관리 프로젝트의 코드 오류를 분석합니다.

이 문서에서는 레거시 분석을 사용하여 .NET 관리 코드 어셈블리의 .NET 디자인 지침 준수 여부를 분석하는 프로세스를 안내합니다.

클래스 라이브러리 만들기

  1. Visual Studio를 열고 클래스 라이브러리(.NET Framework) 템플릿에서 새 프로젝트를 만듭니다.

  2. 프로젝트 이름을 CodeAnalysisManagedDemo로 지정합니다.

  3. 프로젝트가 만들어진 후 Class1.cs 파일을 엽니다.

  4. Class1.cs의 기존 텍스트를 다음 코드로 바꿉니다.

    using System;
    
    namespace testCode
    {
        public class demo : Exception
        {
            public static void Initialize(int size) { }
            protected static readonly int _item;
            public static int item { get { return _item; } }
        }
    }
    
  5. Class1.cs 파일을 저장합니다.

프로젝트의 코드 오류를 분석합니다.

  1. 솔루션 탐색기에서 CodeAnalysisManagedDemo 프로젝트를 선택합니다.

  2. 프로젝트 메뉴에서 속성을 클릭합니다.

    CodeAnalysisManagedDemo 속성 페이지가 표시됩니다.

  3. Code Analysis 탭을 선택합니다.

  4. 빌드 시 실행이진 분석기 섹션에서 선택되어 있는지 확인합니다.

  5. 활성 규칙 드롭다운 목록에서 Microsoft 모든 규칙을 선택합니다.

  6. 파일 메뉴에서 선택한 항목 저장을 클릭한 다음, 속성 페이지를 닫습니다.

  7. 빌드 메뉴에서 CodeAnalysisManagedDemo 빌드를 클릭합니다.

    CodeAnalysisManagedDemo 프로젝트 빌드 경고는 오류 목록출력 창에 표시됩니다.

코드 분석 문제 해결

  1. 보기 메뉴에서 오류 목록을 선택합니다.

    선택한 개발자 프로필에 따라 보기 메뉴에서 다른 창을 가리킨 다음, 오류 목록을 선택해야 할 수 있습니다.

  2. 솔루션 탐색기에서 모든 파일 표시를 선택합니다.

  3. 속성 노드를 확장한 다음, AssemblyInfo.cs 파일을 엽니다.

  4. 다음 팁을 사용하여 경고를 해결합니다.

    CA1014: CLSCompliantAttribute로 어셈블리 표시: AssemblyInfo.cs 파일의 끝에 [assembly: CLSCompliant(true)] 코드를 추가합니다.

    CA1032: 표준 예외 생성자 구현: demo 클래스에 public demo (String s) : base(s) { } 생성자를 추가합니다.

    CA1032: 표준 예외 생성자 구현: demo 클래스에 public demo (String s, Exception e) : base(s, e) { } 생성자를 추가합니다.

    CA1032: 표준 예외 생성자 구현: demo 클래스에 protected demo (SerializationInfo info, StreamingContext context) : base(info, context) { } 생성자를 추가합니다. using에 대한 System.Runtime.Serialization 문도 추가해야 합니다.

    CA1032: 표준 예외 생성자 구현: demo 클래스에 public demo () : base() { } 생성자를 추가합니다.

    CA1709: 식별자는 정확한 대/소문자를 사용해야 합니다.: testCode 네임스페이스의 대/소문자를 TestCode로 변경합니다.

    CA1709: 식별자는 정확한 대/소문자를 사용해야 합니다.: 멤버 이름을 Demo로 변경합니다.

    CA1709: 식별자는 정확한 대/소문자를 사용해야 합니다.: 멤버 이름을 Item로 변경합니다.

    CA1710: 식별자에는 올바른 접미사를 사용해야 합니다.: 클래스와 해당 생성자의 이름을 DemoException으로 변경합니다.

    CA2237: SerializableAttribute로 ISerializable 형식 표시: demo 클래스에 [Serializable ()] 특성을 추가합니다.

    CA2210: 어셈블리에는 유효한 강력한 이름을 사용해야 합니다.: 강력한 이름 키를 사용하여 ‘CodeAnalysisManagedDemo’에 서명합니다.

    1. 프로젝트 메뉴에서 CodeAnalysisManagedDemo 속성을 선택합니다.

      프로젝트 속성이 표시됩니다.

    2. 서명 탭을 선택합니다.

    3. 어셈블리 서명 확인란을 선택합니다.

    4. <>강력한 이름 키 파일 선택 목록에서 새로 만들기...>를 클릭합니다.

      강력한 이름 키 만들기 대화 상자가 나타납니다.

    5. 키 파일 이름TestKey를 입력합니다.

    6. 암호를 입력하고 확인을 선택합니다.

    7. 파일 메뉴에서 선택한 항목 저장을 선택한 다음, 속성 페이지를 닫습니다.

    모든 변경을 완료한 후 Class1.cs 파일이 다음과 같이 표시됩니다.

    using System;
    using System.Runtime.Serialization;
    
    namespace TestCode
    {
        [Serializable()]
        public class DemoException : Exception
        {
            public DemoException () : base() { }
            public DemoException(String s) : base(s) { }
            public DemoException(String s, Exception e) : base(s, e) { }
            protected DemoException(SerializationInfo info, StreamingContext context) : base(info, context) { }
    
            public static void Initialize(int size) { }
            protected static readonly int _item;
            public static int Item { get { return _item; } }
        }
    }
    
  5. 프로젝트를 다시 빌드합니다.

코드 분석 경고 제외

  1. 나머지 경고 각각에 대해 다음을 수행합니다.

    1. 오류 목록에서 경고를 선택합니다.

    2. 마우스 오른쪽 클릭 메뉴(상황에 맞는 메뉴)에서 표시 안 함>비표시 오류(Suppression) 파일을 선택합니다.

  2. 프로젝트를 다시 빌드합니다.

    프로젝트가 경고나 오류 없이 빌드됩니다.

관리 코드에 대한 코드 분석