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

속성
규칙 ID CA1032
타이틀 표준 예외 생성자를 구현하세요.
범주 디자인
수정 사항이 주요 변경인지 여부 주요 변경 아님
.NET 8에서 기본적으로 사용 아니요

원인

형식은 System.Exception을 확장하지만 모든 필수 생성자를 선언하지는 않습니다.

규칙 설명

예외 형식은 다음과 같은 세 가지 public 생성자를 구현해야 합니다.

  • public NewException()

  • public NewException(string)

  • public NewException(string, Exception)

이들 생성자 집합을 전부 제공하지 못하면 예외를 제대로 처리하기 어려울 수 있습니다. 예를 들어 NewException(string, Exception) 시그니처가 있는 생성자를 사용하여 다른 예외에 의해 발생하는 예외를 만듭니다. 이 생성자를 사용하지 않는 경우에는 이러한 상황에서 관리 코드가 수행해야 하는 내부(중첩된) 예외가 포함된 사용자 지정 예외의 인스턴스를 만들고 throw할 수 없습니다.

추가 정보는 CA2229: serialization 생성자를 구현하세요를 참조하세요.

위반 문제를 해결하는 방법

이 규칙 위반 문제를 해결하려면 예외에 누락된 생성자를 추가하고 올바른 접근성이 있는지 확인합니다.

경고를 표시하지 않는 경우

public 생성자에 대해 다른 액세스 수준을 사용하여 위반이 발생하는 경우 이 규칙의 경고를 표시하지 않아도 됩니다.

경고 표시 안 함

단일 위반만 표시하지 않으려면 원본 파일에 전처리기 지시문을 추가하여 규칙을 사용하지 않도록 설정한 후 다시 사용하도록 설정합니다.

#pragma warning disable CA1032
// The code that's violating the rule is on this line.
#pragma warning restore CA1032

파일, 폴더 또는 프로젝트에 대한 규칙을 사용하지 않도록 설정하려면 구성 파일에서 심각도를 none으로 설정합니다.

[*.{cs,vb}]
dotnet_diagnostic.CA1032.severity = none

자세한 내용은 방법: 코드 분석 경고 표시 안 함을 참조하세요.

예시

다음 예제에는 이 규칙을 위반하는 예외 형식과 올바르게 구현된 예외 형식이 포함되어 있습니다.

// Violates rule ImplementStandardExceptionConstructors.
public class BadException : Exception
{
    public BadException()
    {
        // Add any type-specific logic, and supply the default message.
    }
}

[Serializable()]
public class GoodException : Exception
{
    public GoodException()
    {
        // Add any type-specific logic, and supply the default message.
    }

    public GoodException(string message) : base(message)
    {
        // Add any type-specific logic.
    }

    public GoodException(string message, Exception innerException) :
       base(message, innerException)
    {
        // Add any type-specific logic for inner exceptions.
    }
}

참고 항목

CA2229: serialization 생성자를 구현하십시오.