영어로 읽기

다음을 통해 공유


원본 생성기 및 인터셉터와 관련된 오류 및 경고

다음 오류는 컴파일 중에 원본 생성기 또는 인터셉터가 로드될 때 생성됩니다.

  • CS9137: '인터셉터' 실험 기능을 사용할 수 없습니다. <Features>InterceptorsPreview<Features>을(를) 프로젝트에 추가합니다.
  • CS9138: 메서드 또는 포함하는 형식에 형식 매개 변수가 있으므로 인터셉터로 사용할 수 없습니다.
  • CS9139: 인터셉트할 수 없음: 컴파일에 경로가 있는 파일이 없습니다.
  • CS9140: 인터셉트할 수 없음: 컴파일에 경로가 있는 파일이 없습니다. 다른 경로를 사용하시겠습니까?
  • CS9141: 제공된 줄 및 문자 번호는 가로챌 수 있는 메서드 이름이 아니라 토큰을 참조합니다.
  • CS9142: 지정된 파일에는 제공된 줄 번호 m 미만인 n줄이 있습니다.
  • CS9143: 지정된 줄은 c자 길이이며 제공된 문자 번호 n보다 작습니다.
  • CS9144: 서명이 일치하지 않으므로 인터셉터 V(으)로 메서드 M을(를) 인터셉트할 수 없습니다.
  • CS9145: 인터셉트할 수 없음: 경로가 매핑되지 않았습니다. 매핑된 경로가 필요합니다.
  • CS9146: 인터셉터 메서드는 일반 멤버 메서드여야 합니다.
  • CS9147: 제공된 줄 및 문자 번호는 토큰의 시작을 참조하지 않습니다. 줄 n 및 문자 c을(를) 사용하시겠습니까?
  • CS9148: 인터셉터에는 this 매개 변수 일치 매개 변수가 있어야 합니다.
  • CS9149: 메서드에 this 매개 변수가 없으므로 인터셉터에는 this 매개 변수가 없어야 합니다.
  • CS9150: 인터셉터에 null 파일 경로가 있을 수 없습니다.
  • CS9151: 가능한 메서드 이름 M이(가) 호출되지 않으므로 인터셉트할 수 없습니다.
  • CS9152: 컴파일의 여러 파일에 이 경로가 있으므로 이 경로가 있는 파일의 호출을 인터셉트할 수 없습니다.
  • CS9153: 표시된 호출이 여러 번 인터셉트됩니다.
  • CS9155: V 내에서 액세스할 수 없으므로 M 호출을 인터셉트할 수 없습니다.
  • CS9156: '범위 지정' 한정자 또는 [UnscopedRef] 특성의 차이로 인해 V(으)로 M을(를) 인터셉트할 수 없습니다.
  • CS9157: InterceptsLocationAttribute에 제공된 줄 및 문자 번호는 양수여야 합니다.
  • CS9160: nameof 연산자를 인터셉트할 수 없습니다.
  • CS9161: 인터셉터를 UnmanagedCallersOnlyAttribute(으)로 표시할 수 없습니다.
  • CS9177: 인터셉터는 제네릭이 아니거나 일치하는 arity가 있어야 합니다.
  • CS9178: 일치하려면 메서드가 제네릭이 아니어야 합니다.
  • CS9206: 전역 네임스페이스에서 인터셉터를 선언할 수 없습니다.
  • CS9207: 메서드가 일반 멤버 메서드의 호출이 아니므로 인터셉트할 수 없습니다.

다음 경고는 컴파일 중에 원본 생성기 또는 인터셉터가 로드될 때 생성됩니다.

  • CS9154: 인터셉터 V을(를) 사용하여 M 호출을 인터셉트하지만 서명이 일치하지 않습니다.
  • CS9158: 반환 형식에서 참조 형식의 Null 허용 여부가 인터셉트 가능한 메서드와 일치하지 않습니다.
  • CS9159: 매개 변수 형식의 참조 형식의 Null 허용 여부가 인터셉트 가능한 메서드와 일치하지 않습니다.

이러한 오류 및 경고는 다음 테마를 따릅니다.

인터셉터는 실험적입니다.

이 오류는 실험적 기능을 사용하도록 설정해야 했음을 나타냅니다.

  • CS9137: '인터셉터' 실험 기능을 사용할 수 없습니다. <Features>InterceptorsPreview<Features>을(를) 프로젝트에 추가합니다.

C# 12에서는 인터셉터가 실험적입니다. 인터셉터는 향후 릴리스에서 호환성이 손상되거나 제거될 수 있습니다. 따라서 프로덕션 또는 릴리스된 애플리케이션에는 권장되지 않습니다.

인터셉터를 사용하려면 프로젝트 파일에서 <Features>InterceptorsPreview<Features> 요소를 설정해야 합니다. 이 플래그가 없으면 다른 C# 12 기능을 사용하는 경우에도 인터셉터가 비활성화됩니다.

서명 불일치

다음 오류는 인터셉터 메서드와 인터셉트 가능한 메서드 간의 불일치 또는 인터셉터 메서드 선언과 관련된 규칙 위반을 나타냅니다.

  • CS9144: 서명이 일치하지 않으므로 인터셉터 V(으)로 메서드 M을(를) 인터셉트할 수 없습니다.
  • CS9148: 인터셉터에는 this 매개 변수 일치 매개 변수가 있어야 합니다.
  • CS9149: 메서드에 this 매개 변수가 없으므로 인터셉터에는 this 매개 변수가 없어야 합니다.
  • CS9155: V 내에서 액세스할 수 없으므로 M 호출을 인터셉트할 수 없습니다.
  • CS9156: '범위 지정' 한정자 또는 [UnscopedRef] 특성의 차이로 인해 V(으)로 M을(를) 인터셉트할 수 없습니다.
  • CS9177]: 인터셉터는 제네릭이 아니거나 일치하는 arity가 있어야 합니다.
  • CS9178: 일치하려면 메서드가 제네릭이 아니어야 합니다.

또한 다음 경고는 인터셉터 및 인터셉트 가능한 메서드의 서명이 일치하지 않음을 나타냅니다.

  • CS9154: 인터셉터 V을(를) 사용하여 M 호출을 인터셉트하지만 서명이 일치하지 않습니다.
  • CS9158: 반환 형식에서 참조 형식의 Null 허용 여부가 인터셉트 가능한 메서드와 일치하지 않습니다.
  • CS9159: 매개 변수 형식의 참조 형식의 Null 허용 여부가 인터셉트 가능한 메서드와 일치하지 않습니다.

인터셉터 메서드는 인터셉트 가능한 메서드와 호환되어야 합니다. 다음 규칙을 따라야 합니다.

  • 인스턴스 메서드는 정적 메서드가 아니라 인스턴스 메서드를 인터셉트할 수 있습니다. 마찬가지로 정적 메서드는 인스턴스 메서드가 아닌 정적 메서드만 인터셉트할 수 있습니다.
  • 인터셉터 및 인터셉트 가능한 메서드에 대한 메서드 시그니처는 일치해야 합니다. 동일한 한정자를 가진 동일한 매개 변수가 동일한 순서로 있어야 합니다. 반환 형식도 일치해야 합니다.
  • ref safe 컨텍스트가 일치해야 합니다. 즉, 해당 ref 매개변수는 scoped이나 scoped이 아니어야 합니다.
  • 두 메서드는 모두 제네릭이 아니거나 둘 다 동일한 수의 형식 매개 변수를 가져야 합니다.

잘못된 매핑

인터셉터에는 인터셉터 메서드와 인터셉터 메서드를 매핑하는 원본 매핑이 필요합니다. 다음 오류는 매핑과 관련된 문제를 나타냅니다.

  • CS9139: 인터셉트할 수 없음: 컴파일에 경로가 있는 파일이 없습니다.
  • CS9140: 인터셉트할 수 없음: 컴파일에 경로가 있는 파일이 없습니다. 다른 경로를 사용하시겠습니까?
  • CS9141: 제공된 줄 및 문자 번호는 가로챌 수 있는 메서드 이름이 아니라 토큰을 참조합니다.
  • CS9142: 지정된 파일에는 제공된 줄 번호 m 미만인 n줄이 있습니다.
  • CS9143: 지정된 줄은 c자 길이이며 제공된 문자 번호 n보다 작습니다.
  • CS9145: 인터셉트할 수 없음: 경로가 매핑되지 않았습니다. 매핑된 경로가 필요합니다.
  • CS9147: 제공된 줄 및 문자 번호는 토큰의 시작을 참조하지 않습니다. 줄 n 및 문자 c을(를) 사용하시겠습니까?
  • CS9150: 인터셉터에 null 파일 경로가 있을 수 없습니다.
  • CS9157: InterceptsLocationAttribute에 제공된 줄 및 문자 번호는 양수여야 합니다.

인터셉터에서 인터셉트 가능한 메서드의 소스 코드에 있는 위치를 지정합니다. [InterceptsLocation] 특성을 적용하여 위치를 지정합니다. 인터셉터를 삽입해야 하는 다시 매핑된 소스 파일에서 줄 및 열 번호를 지정합니다. 이러한 오류는 특성 또는 위치에 있는 항목이 유효한 인터셉트 가능한 메서드의 위치와 일치하지 않음을 나타냅니다. 이 특성의 형식 및 값에 대한 자세한 내용은 기능 사양을 참조하세요.

기타 실패

이러한 오류는 인터셉터에 대한 다른 제한 사항을 나타냅니다.

  • CS9138: 메서드 또는 포함하는 형식에 형식 매개 변수가 있으므로 인터셉터로 사용할 수 없습니다.
  • CS9146: 인터셉터 메서드는 일반 멤버 메서드여야 합니다.
  • CS9151: 가능한 메서드 이름 M이(가) 호출되지 않으므로 인터셉트할 수 없습니다.
  • CS9152: 컴파일의 여러 파일에 이 경로가 있으므로 이 경로가 있는 파일의 호출을 인터셉트할 수 없습니다.
  • CS9153: 표시된 호출이 여러 번 인터셉트됩니다.
  • CS9160: nameof 연산자를 인터셉트할 수 없습니다.
  • CS9161: 인터셉터를 UnmanagedCallersOnlyAttribute(으)로 표시할 수 없습니다.
  • CS9206: 전역 네임스페이스에서 인터셉터를 선언할 수 없습니다.
  • CS9207: 메서드가 일반 멤버 메서드의 호출이 아니므로 인터셉트할 수 없습니다.

이러한 오류는 인터셉터 메서드가 인터셉터 규칙 중 하나를 위반함을 나타냅니다.

  • 인터셉터는 제네릭 메서드 또는 제네릭 클래스의 멤버일 수 없습니다.
  • 인터셉터는 일반 멤버여야 합니다. 연산자, 인스턴스 또는 정적 생성자 또는 종료자일 수 없습니다.
  • 인터셉트할 수 있는 메서드는 일반 멤버여야 합니다. 연산자, 인스턴스 또는 정적 생성자, 종료자 또는 대리자 호출이 될 수 없습니다.
  • 호출되지 않는 인터셉트 가능한 메서드는 인터셉트할 수 없습니다.
  • 인터셉트 가능한 메서드는 한 번에 인터셉트할 수 있습니다.
  • 인터셉터는 비관리형 호출자로 제한되는 메서드일 수 없습니다.
  • 인터셉터는 네임스페이스에 포함되어야 합니다.