Microsoft 확장 수정 규칙 코드 분석 규칙 집합

Microsoft 확장 수정 규칙이라는 규칙 집합은 코드 분석을 통해 보고되는 논리 및 프레임워크 사용 오류를 최대화하며, COM 상호 운용성 및 모바일 응용 프로그램 같은 특정 시나리오에 주안점을 둡니다. 이러한 시나리오 중 하나가 프로젝트에 적용되거나 프로젝트에서 추가 문제를 찾으려는 경우 이 규칙 집합을 포함하는 것이 좋습니다.

Microsoft 확장 수정 규칙 집합에는 Microsoft 기본 수정 규칙이라는 규칙 집합의 규칙이 포함됩니다. 기본 수정 규칙에는 Microsoft 최소 권장 규칙이라는 규칙 집합의 규칙이 포함됩니다. 자세한 내용은 Microsoft 수정 규칙 코드 분석 규칙 집합Microsoft 최소 권장 규칙 코드 분석 규칙 집합을 참조하십시오.

다음 표에서는 Microsoft 확장 수정 규칙 집합의 모든 규칙에 대해 설명합니다.

규칙

설명

CA1032: 표준 예외 생성자를 구현하십시오.

이들 생성자 집합을 전부 제공하지 못하면 예외를 제대로 처리하기 어려울 수 있습니다.

CA1054: URI 매개 변수는 문자열이면 안 됩니다.

메서드가 URI의 문자열 표현을 사용하면 URI 클래스의 인스턴스를 사용하는 해당 오버로드를 제공해야 합니다. 이렇게 하면 서비스가 안전한 방식으로 제공됩니다.

CA1055: URI 반환 값은 문자열이면 안 됩니다.

이 규칙에서는 메서드가 URI(Uniform Resource Identifier)를 반환한다고 가정합니다. URI의 문자열 표현은 구문 분석 및 인코딩 오류를 발생시키기 쉬우며 보안 문제를 일으킬 수 있습니다. System.Uri 클래스는 이러한 서비스를 안전한 방식으로 제공합니다.

CA1056: URI 속성은 문자열이면 안 됩니다.

이 규칙에서는 속성이 URI(Uniform Resource Identifier)를 나타낸다고 가정합니다. URI의 문자열 표현은 구문 분석 및 인코딩 오류를 발생시키기 쉬우며 보안 문제를 일으킬 수 있습니다. System.Uri 클래스는 이러한 서비스를 안전한 방식으로 제공합니다.

CA1057: 문자열 URI 오버로드는 System.Uri 오버로드를 호출합니다.

형식에서 문자열 매개 변수가 System.Uri 매개 변수로 바뀐 점만 다른 메서드 오버로드를 선언합니다. 문자열 매개 변수를 사용하는 오버로드는 URI 매개 변수를 사용하는 오버로드를 호출하지 않습니다.

CA1402: COM 노출 인터페이스에서 오버로드를 사용하지 마십시오.

오버로드된 메서드가 COM 클라이언트에 노출되면 첫 번째 메서드 오버로드만 이름이 유지됩니다. 이후의 오버로드는 이름에 밑줄 문자(_)와 오버로드 선언 순서에 해당하는 정수가 추가되어 고유한 이름이 지정됩니다.

CA1406: Visual Basic 6 클라이언트에서 Int64 인수를 사용하지 않습니다.

Visual Basic 6 COM 클라이언트는 64비트 정수에 액세스할 수 없습니다.

CA1407: COM 노출 형식에 정적 멤버를 사용하지 마십시오.

COM에서는 static 메서드를 지원하지 않습니다.

CA1408: AutoDual ClassInterfaceType을 사용하지 마십시오.

이중 인터페이스를 사용하는 형식에서는 클라이언트가 특정 인터페이스 레이아웃에 바인딩할 수 있습니다. 이후 버전에서 해당 형식이나 기본 형식의 레이아웃이 변경되면 인터페이스에 바인딩된 COM 클라이언트의 바인딩이 해제될 수 있습니다. 기본적으로 ClassInterfaceAttribute 특성이 지정되어 있지 않으면 디스패치 전용 인터페이스가 사용됩니다.

CA1409: COM 노출 형식을 만들 수 있어야 합니다.

COM에 표시되는 것으로 특별히 표시된 참조 형식에 매개 변수가 있는 public 생성자가 있지만 매개 변수가 없는 public 기본 생성자가 없습니다. COM 클라이언트에서는 public 기본 생성자가 없는 형식을 만들 수 없습니다.

CA1411: COM 등록 메서드는 노출되면 안 됩니다.

System.Runtime.InteropServices.ComRegisterFunctionAttribute 특성 또는 System.Runtime.InteropServices.ComUnregisterFunctionAttribute 특성으로 표시된 메서드가 외부에 노출됩니다.

CA1412: ComSource 인터페이스를 IDispatch로 표시하십시오.

형식이 System.Runtime.InteropServices.ComSourceInterfacesAttribute 특성으로 표시되어 있으며 지정된 인터페이스 중 하나 이상이 ComInterfaceType.InterfaceIsIDispatch로 설정된 System.Runtime.InteropServices.InterfaceTypeAttribute 특성으로 표시되어 있지 않습니다.

CA1413: ComVisible 값 형식에 public이 아닌 필드를 사용하지 마십시오.

public이 아니며 값 형식이 COM에 노출되는 인스턴스 필드는 COM 클라이언트에서 볼 수 있습니다. 필드의 내용을 검토하여 노출되지 않아야 하거나 디자인 또는 보안에 의도하지 않은 영향을 줄 수 있는 정보가 있는지 확인합니다.

CA1414: 부울 P/Invoke 인수를 MarshalAs로 표시하십시오.

부울 데이터 형식은 비관리 코드에서 여러 가지로 표현됩니다.

CA1600: 유휴 상태 프로세스 우선 순위를 사용하지 마십시오.

프로세스 우선 순위를 유휴 상태로 설정하지 마십시오. System.Diagnostics.ProcessPriorityClass.Idle인 프로세스는 어떠한 이유로든 유휴 상태가 될 경우 CPU를 차지하므로 블록이 대기 모드가 됩니다.

CA1601: 전원 상태 변경을 방해하는 타이머를 사용하지 마십시오.

정기적인 작업의 실행 빈도가 높아지면 CPU 사용률도 높아져 디스플레이 및 하드 디스크를 끄는 절전 유휴 타이머에 방해가 됩니다.

CA1821: 빈 종료자를 제거하십시오.

개체 수명을 추적할 때에는 추가로 성능 오버헤드가 발생하므로 가능한 경우 종료자를 사용하지 마십시오. 빈 종료자는 아무런 장점 없이 오버헤드만 가중시킵니다.

CA1824: NeutralResourcesLanguageAttribute로 어셈블리 표시

NeutralResourcesLanguage 특성을 사용하여 어셈블리에 대한 중립 문화권의 리소스를 표시하는 데 사용된 언어를 ResourceManager에 알릴 수 있습니다. 이렇게 하면 로드한 첫 리소스에 대한 찾기 성능을 향상시킬 수 있으며 작업이 간단해 집니다.

CA2001: 문제가 있는 메서드는 호출하지 마십시오.

멤버에서 잠재적 위험이나 문제가 있는 메서드를 호출합니다.

CA2003: 파이버를 스레드로 취급하지 마십시오.

관리되는 스레드가 Win32 스레드처럼 취급됩니다.

CA2204: 리터럴의 철자가 맞아야 합니다.

메서드 본문의 리터럴 문자열에 Microsoft 맞춤법 검사 라이브러리에서 인식하지 못하는 단어가 하나 이상 있습니다.

CA2211: 비상수 필드는 노출되면 안 됩니다.

상수도 아니고 읽기 전용도 아닌 static 필드는 스레드로부터 안전하지 않습니다. 이러한 필드에 대한 액세스는 신중하게 제어해야 하며 클래스 개체에 대한 액세스를 동기화하는 고급 프로그래밍 기술을 필요로 합니다.

CA2217: 열거형을 FlagsAttribute로 표시하지 마십시오.

외부에서 볼 수 있는 열거형이 FlagsAttribute로 표시되어 있고, 2의 거듭제곱 또는 열거형에 정의된 다른 값의 조합이 아닌 값이 하나 이상 들어 있습니다.

CA2218: Equals를 재정의할 때 GetHashCode를 재정의하십시오.

GetHashCode는 현재 인스턴스를 기반으로 해싱 알고리즘 및 해시 테이블과 같은 데이터 구조체에 적합한 값을 반환합니다. 형식이 같은 동일한 두 개체는 동일한 해시 코드를 반환해야 합니다.

CA2219: exception 절에서 예외를 발생시키지 마십시오.

finally 또는 fault 절에서 예외가 발생하는 경우 새 예외가 활성 예외를 숨깁니다. filter 절에서 예외가 발생하는 경우 런타임이 자동으로 예외를 catch합니다. 따라서 원래 오류를 감지하고 디버깅하기 어렵게 됩니다.

CA2225: 연산자 오버로드에는 명명된 대체 항목이 있습니다.

연산자 오버로드가 감지되었으며 예상되는 이름의 대체 메서드를 찾을 수 없습니다. 명명된 대체 멤버는 해당 연산자와 동일한 기능에 액세스할 수 있도록 해주며, 오버로드된 연산자가 지원되지 않는 언어로 프로그래밍하는 개발자에게 제공됩니다.

CA2228: 릴리스되지 않은 리소스 형식을 제공하지 마십시오.

.NET Framework 시험판 버전을 사용하여 빌드된 리소스 파일은 지원되는 .NET Framework 버전에서 사용하지 못할 수 있습니다.

CA2230: 가변 인수로 params를 사용하십시오.

public 또는 protected 형식에 params 키워드 대신 VarArgs 호출 규칙을 사용하는 public 또는 protected 메서드가 들어 있습니다.

CA2233: 연산은 오버플로되지 않아야 합니다.

산술 연산을 수행하려면 먼저 피연산자의 유효성을 검사하여 연산의 결과가 관련 데이터 형식의 가능한 값 범위를 벗어나지 않도록 해야 합니다.

CA2234: 문자열 대신 System.Uri 개체를 전달하십시오.

이름에 "uri", "URI", "urn", "URN", "url" 또는 "URL"이 포함된 문자열 매개 변수가 있는 메서드가 호출되었습니다. 메서드의 선언 형식에 System.Uri 매개 변수를 가진 해당 메서드 오버로드가 들어 있습니다.

CA2243: 특성 문자열 리터럴이 올바르게 구문 분석되어야 합니다.

특성의 문자열 리터럴 매개 변수가 URL, GUID 또는 버전에 대해 구문을 올바르게 분석하지 않습니다.