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

컴파일러가 컴파일 중에 원본 생성기 또는 인터셉터를 로드할 때 다음 오류가 발생합니다.

  • CS9137: 이 네임스페이스에서는 '인터셉터' 기능이 사용하도록 설정되어 있지 않습니다. <Features>InterceptorsPreview</Features>를 프로젝트에 추가하세요.
  • CS9138: 포함된 형식에 형식 매개 변수가 있으므로 메서드 'method'를 인터셉터로 사용할 수 없습니다.
  • CS9139: 가로챌 수 없음: 컴파일에 경로가 있는 파일이 없습니다.
  • CS9140: 가로챌 수 없음: 컴파일에 경로가 'path'인 파일이 없습니다. 경로 'candidatePath'를 사용하시겠습니까?
  • CS9141: 제공된 줄 및 문자 번호는 가로챌 수 있는 메서드 이름이 아니라 토큰 '토큰'을 참조합니다.
  • CS9142: 지정된 파일에는 n 제공된 줄 번호 m보다 적은 줄이 있습니다.
  • CS9143: 지정된 줄은 문자 길이이며 c 제공된 문자 번호 n보다 작습니다.
  • CS9144: 서명이 일치하지 않으므로 인터셉터를 M 사용하여 메서드 V 를 가로챌 수 없습니다.
  • CS9145: 가로챌 수 없음: 경로가 매핑되지 않았습니다. 매핑된 경로가 필요합니다.
  • CS9146: 인터셉터 메서드는 일반 멤버 메서드여야 합니다.
  • CS9147: 제공된 줄 및 문자 번호는 토큰 '토큰'의 시작을 참조하지 않습니다. 줄 'n'과 문자 'c'를 사용하시겠습니까?
  • CS9148: 인터셉터에는 매개 변수 일치 매개 변수가 this 있어야 합니다.
  • CS9149: 메서드에 매개 변수가 this 없으므로 인터셉터에 매개 변수가 this 없어야 합니다.
  • CS9150: 인터셉터에 파일 경로가 null 있을 수 없습니다.
  • CS9151: 가능한 메서드 이름이 M 호출되지 않으므로 가로챌 수 없습니다.
  • CS9152: 컴파일의 여러 파일에 이 경로가 있으므로 경로가 'path'인 파일의 호출을 가로챌 수 없습니다.
  • CS9153: 표시된 호출이 여러 번 가로채집니다.
  • CS9155: M 내에서 액세스할 수 없으므로 V 호출을 가로막을 수 없습니다.
  • CS9156: '범위가 지정된' 한정자 또는 M 특성의 차이로 인해 V으로 [UnscopedRef] 호출을 가로챌 수 없습니다.
  • CS9157: 제공된 줄 및 문자 번호는 InterceptsLocationAttribute 양수여야 합니다.
  • CS9160: nameof 연산자를 가로챌 수 없습니다.
  • CS9161: 인터셉터는 UnmanagedCallersOnlyAttribute로 표시될 수 없습니다.
  • CS9177: 메서드 'method'는 제네릭이 아니거나, 'target'과 일치하려면 arity가 'arity'여야 합니다.
  • CS9178: 'method' 메서드는 'target'에 일치하려면 제네릭이 아니어야 합니다.
  • CS9206: 전역 네임스페이스에서 인터셉터를 선언할 수 없습니다.
  • CS9207: 일반 멤버 메서드의 호출이 아니므로 'method'를 가로챌 수 없습니다.
  • CS9231: InterceptsLocationAttribute에 대한 데이터 인수가 올바른 형식이 아닙니다.
  • CS9232: 인터셉터 형식의 버전 '버전'은 지원되지 않습니다. 지원되는 최신 버전은 '1'입니다.
  • CS9233: 파일 'file'의 호출이 컴파일의 다른 위치에서 중복되므로 호출을 가로챌 수 없습니다.
  • CS9234: 컴파일에서 일치하는 파일을 찾을 수 없으므로 파일 'file'의 호출을 가로챌 수 없습니다.
  • CS9235: InterceptsLocationAttribute에 대한 데이터 인수는 'file' 파일에서 잘못된 위치를 나타냅니다.

컴파일러가 컴파일 중에 원본 생성기 또는 인터셉터를 로드할 때 다음 경고가 발생합니다.

  • CS8032: 'assembly': 'reason'에서 분석기 '분석기' 인스턴스를 만들 수 없습니다.
  • CS8033: 어셈블리 'assembly'에 분석기가 포함되어 있지 않습니다.
  • CS8034: 분석기 어셈블리 'assembly'를 로드할 수 없습니다. 'reason'
  • CS8040: 분석기 어셈블리 'assembly'에서 ReflectionTypeLoadException: 'exception'으로 인해 일부 형식을 건너뜁니다.
  • CS8700: 여러 분석기 구성 파일은 동일한 디렉터리('디렉터리')에 있을 수 없습니다.
  • CS8784: 생성기 '생성기'를 초기화하지 못했습니다. 출력에 영향을 주지 않으며 결과적으로 컴파일 오류가 발생할 수 있습니다. 예외는 'message' 메시지와 함께 'exception' 형식이었습니다.
  • CS8785: 생성기 '생성기'에서 원본을 생성하지 못했습니다. 출력에 영향을 주지 않으며 결과적으로 컴파일 오류가 발생할 수 있습니다. 예외는 'message' 메시지와 함께 'exception' 형식이었습니다.
  • CS8850: 형식 'type' 형식이 포함된 어셈블리 'assembly'는 지원되지 않는 프레임워크를 .NET 참조합니다.
  • CS9057: 현재 실행 중인 버전 'currentVersion'보다 최신인 컴파일러의 버전 'version'을 참조하므로 분석기 어셈블리 'assembly'를 사용할 수 없습니다.
  • CS9067: 분석기 참조 '참조'가 여러 번 지정됨
  • CS9154: 인터셉터를 M사용하여 호출을 V 가로채지만 서명이 일치하지 않습니다.
  • CS9158: 반환 형식에서 참조 형식의 Null 허용 여부가 절편 가능 메서드와 일치하지 않습니다.
  • CS9159: 매개 변수 형식의 참조 형식의 Null 허용 여부가 절편 가능 메서드와 일치하지 않습니다.
  • CS9270: 'InterceptsLocationAttribute(string, int, int)'은(는) 지원되지 않습니다. 대신 이러한 특성의 'InterceptableLocation' 기반 생성으로 이동합니다. (https://github.com/dotnet/roslyn/issues/72133)

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

원본 생성기 오류

  • CS8784: 생성기 '생성기'를 초기화하지 못했습니다. 출력에 영향을 주지 않으며 결과적으로 컴파일 오류가 발생할 수 있습니다. 예외는 'message' 메시지와 함께 'exception' 형식이었습니다.
  • CS8785: 생성기 '생성기'에서 원본을 생성하지 못했습니다. 출력에 영향을 주지 않으며 결과적으로 컴파일 오류가 발생할 수 있습니다. 예외는 'message' 메시지와 함께 'exception' 형식이었습니다.

이러한 경고는 소스 생성기가 컴파일 중에 처리되지 않은 예외를 throw했음을 나타냅니다. 원본 생성기는 빌드 파이프라인의 일부로 실행되며 오류가 발생하면 생성기가 해당 출력을 컴파일에 기여하지 못하게 됩니다. 원본 생성기 구현에 대한 자세한 내용은 원본 생성기를 참조하세요.

이러한 경고를 수정하려면 다음 지침을 따르세요.

  • 빌드 출력의 전체 예외 세부 정보를 검사하여 근본 원인(CS8784, CS8785)을 식별합니다. 경고 메시지에는 사용자 또는 생성기 작성자가 오류를 진단하는 데 도움이 될 수 있는 예외 유형, 메시지 및 스택 추적이 포함됩니다.
  • 프로젝트에서 원본 생성기에 필요한 모든 종속성을 사용할 수 있는지 확인합니다(CS8784). 초기화 실패는 생성기가 시작하는 동안 필요한 어셈블리 또는 리소스를 찾을 수 없는 경우에 종종 발생합니다. 생성기의 NuGet 패키지가 올바르게 설치되어 있고 모든 전이적 종속성이 확인되었는지 확인합니다.
  • 예외가 타사 생성기 코드(CS8784, CS8785)에서 발생하는 경우 원본 생성기의 유지 관리자에게 오류를 보고합니다. 버그 보고서에 빌드 출력의 전체 예외 세부 정보를 포함합니다.
  • 원본 생성기를 작성한 경우 오류를 정상적으로 catch하고 보고하는 메서드(Initialize, Execute) 내에서 예외 처리를 추가합니다.

분석기 및 원본 생성기 호환성

  • CS8032: 'assembly': 'reason'에서 분석기 '분석기' 인스턴스를 만들 수 없습니다.
  • CS8033: 어셈블리 'assembly'에 분석기가 포함되어 있지 않습니다.
  • CS8034: 분석기 어셈블리 'assembly'를 로드할 수 없습니다. 'reason'
  • CS8040: ReflectionTypeLoadException : 'exception'으로 인해 분석기 어셈블리 'assembly'에서 일부 형식을 건너뜁니다.
  • CS8700: 여러 분석기 구성 파일은 동일한 디렉터리('디렉터리')에 있을 수 없습니다.
  • CS8850: 'type' 형식을 포함하는 어셈블리 'assembly'는 지원되지 않는 .NET Framework를 참조합니다.
  • CS9057: 현재 실행 중인 버전 'currentVersion'보다 최신인 컴파일러의 버전 'version'을 참조하므로 분석기 어셈블리 'assembly'를 사용할 수 없습니다.
  • CS9067: 분석기 참조 '참조'가 여러 번 지정됨

이러한 경고 및 오류는 분석기 및 원본 생성기 어셈블리를 로드, 인스턴스화 또는 구성하는 데 문제가 있음을 나타냅니다. 원본 생성기는 분석기 어셈블리로 로드되므로 이러한 진단은 분석기와 원본 생성기 모두에 적용됩니다.

이러한 문제를 해결하려면 다음 지침을 따르세요.

  • 분석기의 요구 사항에 맞게 .NET SDK 또는 컴파일러 버전을 업그레이드하거나 현재 컴파일러와 호환되는 이전 버전의 분석기 패키지(CS9057)를 사용합니다. 이 오류는 분석기 어셈블리가 실행 중인 컴파일러가 제공하는 것보다 최신 Roslyn API 버전을 대상으로 할 때 발생합니다.
  • 프로젝트에서 중복 분석기 참조를 제거합니다(CS9067). 프로젝트 파일에서 여러 경로를 통해 동일한 분석기 어셈블리를 포함하는 반복 <Analyzer> 또는 <PackageReference> 요소를 확인합니다. 전이적 패키지 종속성으로 인해 중복이 발생할 수도 있습니다.
  • 분석기 어셈블리가 유효한 .NET 어셈블리이고 손상되지 않았는지 확인합니다(CS8034). 어셈블리를 전혀 로드할 수 없는 경우 파일이 참조된 경로에 있고 호환되는 대상 프레임워크용으로 빌드되었는지 확인합니다. NuGet 패키지를 다시 빌드하거나 다시 설치하여 새 복사본을 가져옵니다.
  • 분석기 형식에 공용 매개 변수가 없는 생성자(CS8032)가 있는지 확인합니다. 컴파일러는 기본 생성자를 호출하여 분석기를 인스턴스화합니다. 생성자가 예외를 throw하거나 매개 변수가 필요한 경우 분석기를 만들 수 없습니다.
  • 참조된 어셈블리가 실제로 분석기 또는 원본 생성기 형식(CS8033)을 내보내는지 확인합니다. 분석기로 참조되는 어셈블리에는 DiagnosticAnalyzer 또는 ISourceGenerator/IIncrementalGenerator를 구현하는 형식이 포함되어야 합니다. 어셈블리가 분석기가 아닌 런타임 종속성인 경우 대신 일반 프로젝트 또는 패키지 참조로 참조합니다.
  • 모든 종속성을 사용할 수 있는지 확인하여 분석기 어셈블리의 형식 로드 문제를 해결합니다(CS8040). ReflectionTypeLoadException 일반적으로 어셈블리는 찾을 수 없는 다른 어셈블리의 형식을 참조합니다. 모든 필수 종속성이 분석기 NuGet 패키지에 포함되어 있는지 확인합니다.
  • 분석기 구성 파일(.editorconfig 또는 .globalconfig)이 디렉터리당 고유해야 합니다(CS8700). 우선 순위 규칙이 모호하기 때문에 컴파일러는 동일한 디렉터리에 여러 분석기 구성 파일을 허용하지 않습니다. 파일을 병합하거나 중복 파일을 제거합니다.
  • .NET Framework(CS8850) 대신 .NET 표준 또는 최신 .NET 대상으로 분석기 또는 원본 생성기를 업데이트합니다. .NET Framework를 참조하는 어셈블리는 최신 .NET 컴파일러 도구 체인에서 지원되지 않습니다. 분석기를 유지 관리한다면 netstandard2.0를 대상으로 다시 지정하세요. 타사 패키지인 경우 최신 .NET 지원하는 버전으로 업그레이드합니다.

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

  • CS9137: 이 네임스페이스에서는 '인터셉터' 기능이 활성화되어 있지 않습니다. <Features>InterceptorsPreview</Features>를 프로젝트에 추가하세요.

인터셉터를 사용하려면 섹션 내의 <Features>InterceptorsPreview</Features> 프로젝트 파일에 <PropertyGroup> 요소를 추가합니다(CS9137). 인터셉터는 실험적 기능이며 기본적으로 사용하도록 설정되지 않습니다. 인터셉터 기능은 향후 릴리스에서 호환성이 손상되거나 제거될 수 있으므로 이 명시적 옵트인이 필요합니다. 컴파일러는 해당 사용을 허용하기 전에 위험을 이해한다는 확인이 필요합니다. 인터셉터 및 해당 기능에 대한 자세한 내용은 C# 12 기능 설명서의 인터셉터를 참조하세요.

서명 불일치

다음 오류 및 경고는 인터셉터 메서드와 절편 가능 메서드 간의 불일치를 나타냅니다.

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

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

  • CS9154: M 호출을 V 인터셉터를 사용하여 가로채려 했지만, 서명이 일치하지 않습니다.
  • CS9158: 반환 형식의 참조 형식 Null 허용 여부가 인터셉트 가능 메서드와 일치하지 않습니다.
  • CS9159: 매개변수 유형의 참조 형식의 Null 허용 여부가 인터셉트 가능한 메서드와 일치하지 않습니다.
  • CS9270: 'InterceptsLocationAttribute(string, int, int)'은(는) 지원되지 않습니다. 대신 이러한 특성의 'InterceptableLocation' 기반 생성으로 이동합니다. (https://github.com/dotnet/roslyn/issues/72133)

이러한 문제를 해결하려면 인터셉터 메서드가 인터셉트 가능한 메서드의 시그니처 및 액세스 요구 사항과 일치하는지 확인합니다.

  • 인터셉터 메서드 시그니처가 절편 가능 메서드(CS9144, CS9154)와 정확히 일치하는지 확인합니다. 매개 변수 형식, 한정자, 순서 및 반환 형식은 동일해야 합니다. 두 메서드 선언을 모두 검토하고 해당 서명을 정렬합니다.
  • this 절편 가능 메서드가 인스턴스 메서드(CS9148)일 때 인터셉터에 매개 변수를 추가하거나 절편 가능 메서드가 정적(this)일 때 매개 변수를 제거 합니다. 인스턴스 인터셉터에는 선언 형식의 매개 변수가 필요 this 하지만 정적 인터셉터에는 매개 변수가 없어야 합니다.
  • 인터셉터블 메서드에 액세스할 수 있는 위치(CS9155)에서 인터셉터를 선언합니다. 인터셉트 가능한 메서드가 internal인 경우, 인터셉터는 동일한 어셈블리에 있어야 합니다. private이 경우 인터셉터의 형식이 동일하거나 중첩된 형식이어야 합니다.
  • 해당 scoped 매개 변수([UnscopedRef])의 ref 한정자와 특성을 일치시킵니다. 인터셉터의 각 ref 매개 변수는 메모리 안전을 보장하기 위해 절편 가능 메서드의 해당 매개 변수와 동일한 수명 주석을 가져야 합니다.
  • 두 메서드 모두 제네릭 아리티(CS9177, CS9178)와 일치하는지 확인합니다. 절편 가능 메서드가 제네릭이 아닌 경우 인터셉터도 제네릭이 아니어야 합니다. 절편 가능 메서드에 형식 매개 변수가 있는 경우 인터셉터의 형식 매개 변수 수가 호환되는 제약 조건과 동일해야 합니다.
  • 반환 형식(CS9158) 및 매개변수 형식(CS9159)의 nullable 주석을 일치시키세요. 프로젝트에서 nullable 참조 형식을 사용하도록 설정하고 인터셉터의 null 허용 여부 주석이 형식 안전을 유지하기 위해 가로챌 수 있는 메서드와 정확히 일치하는지 확인합니다.
  • 업데이트된 InterceptableLocation 기반 생성 InterceptsLocationAttribute을 사용하고, 더 이상 지원되지 않는 (string, int, int) 생성자(CS9270)를 사용하지 마십시오. 최신 형식은 더 나은 도구 지원 및 컴파일 시간 유효성 검사를 제공합니다. 마이그레이션 지침은 GitHub 문제를 참조하세요.

잘못된 매핑

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

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

매핑 오류를 수정하려면 유효한 파일 경로와 정확한 위치 정보가 포함되어 있는지 확인합니다 InterceptsLocationAttribute .

  • 파일 경로가 컴파일의 파일과 정확히 일치하는지 확인합니다(CS9139, CS9140). 프로젝트에서 나타나는 경로를 정확히 사용하되, 올바른 대/소문자 및 디렉터리 구분 기호를 포함해야 합니다. 컴파일러에서 대체 경로를 제안하는 경우 해당 경로를 사용하도록 특성을 업데이트합니다.
  • 파일 경로를 변환하는 원본 생성기(CS9145)로 작업할 때 매핑된 파일 경로를 사용합니다. 원본 생성기는 생성된 파일에 대한 경로를 다시 매핑하는 경우가 많으며, 원래 원본 경로가 아니라 컴파일러가 인식하는 매핑된 경로를 사용해야 합니다.
  • 파일 경로가 null로 설정되지 않았는지 InterceptsLocationAttribute(CS9150)에서 확인하세요. 모든 가로채기는 가로채기 호출을 포함하는 원본 파일을 식별하는 유효한 null이 아닌 파일 경로를 지정해야 합니다.
  • 양의 1부터 시작하는 줄과 문자 번호를 제공합니다(CS9157). 줄 번호와 문자 위치는 0이 아닌 1에서 시작해야 합니다. 위치를 계산할 때 원본 생성기가 1부터 시작하는 인덱싱을 사용하는지 확인합니다.
  • 메서드 이름 토큰(CS9141, CS9147)의 정확한 시작을 가리킵니다. 줄 및 문자 번호는 호출에서 공백, 연산자 또는 기타 토큰이 아닌 메서드 이름의 첫 번째 문자를 식별해야 합니다. 컴파일러에서 대체 좌표를 제안하는 경우 이를 사용하여 올바른 토큰 시작을 대상으로 지정합니다.
  • 파일 범위 내에 유지합니다(CS9142, CS9143). 줄 번호가 총 줄 수를 초과하지 않고 문자 번호가 줄 길이를 초과하지 않는지 확인합니다. 특성이 생성된 이후 원본 파일이 변경된 경우 위치를 다시 계산합니다.

잘못된 인터셉터 선언

다음 오류는 InterceptsLocationAttribute 형식 관련 문제 또는 인터셉터 규칙 위반을 포함한 인터셉터 선언의 문제를 나타냅니다.

  • CS9138: 포함된 형식에 형식 매개 변수가 있으므로 메서드 'method'를 인터셉터로 사용할 수 없습니다.
  • CS9146: 인터셉터 메서드는 일반 멤버 메서드여야 합니다.
  • CS9151: 가능한 메서드 이름 M이(가) 호출되지 않아서 가로챌 수 없습니다.
  • CS9152: 컴파일의 여러 파일에 이 경로가 있으므로 경로가 'path'인 파일의 호출을 가로챌 수 없습니다.
  • CS9153: 표시된 호출이 여러 번 가로채집니다.
  • CS9160: nameof 연산자를 가로챌 수 없습니다.
  • CS9161: 인터셉터는 UnmanagedCallersOnlyAttribute로 표시할 수 없습니다.
  • CS9206: 전역 네임스페이스에서 인터셉터를 선언할 수 없습니다.
  • CS9207: 일반 멤버 메서드의 호출이 아니므로 'method'를 가로챌 수 없습니다.
  • CS9231: InterceptsLocationAttribute에 대한 데이터 인수가 올바른 형식이 아닙니다.
  • CS9232: 인터셉터 형식의 버전 '버전'은 지원되지 않습니다. 지원되는 최신 버전은 '1'입니다.
  • CS9233: 파일 'file'의 호출이 컴파일의 다른 위치에서 중복되므로 호출을 가로챌 수 없습니다.
  • CS9234: 컴파일에서 일치하는 파일을 찾을 수 없으므로 파일 'file'의 호출을 가로챌 수 없습니다.
  • CS9235: InterceptsLocationAttribute에 대한 데이터 인수는 'file' 파일에서 잘못된 위치를 나타냅니다.

인터셉터 선언 오류를 수정하려면 유효한 인터셉터 선언 및 InterceptsLocationAttribute 사용에 대해 다음 규칙을 따릅니다.

  • 데이터 인수의 서식을 InterceptsLocationAttribute 올바르게 지정합니다(CS9231). 이 특성에는 파일 경로 및 위치 정보를 인코딩하는 특별히 구조화된 데이터가 필요합니다. 원본 생성기가 현재 인터셉터 사양과 일치하는 예상 형식으로 데이터를 생성하는지 확인합니다.
  • 지원되는 최신 버전이므로 (InterceptsLocationAttribute)에서 버전 '1'을 사용합니다. 지원되지 않는 버전 번호가 아닌 버전 1 형식 특성을 출력하도록 원본 생성기를 업데이트합니다.
  • 컴파일에서 고유한 파일 경로를 확인합니다(CS9233, CS9234). 컴파일에 중복된 파일 경로가 포함된 경우 파일 이름을 바꾸거나 다시 구성하여 각 경로를 고유하게 만듭니다. 특성의 파일 경로가 컴파일에 실제로 포함된 파일과 일치하는지 확인합니다.
  • 유효한 코드 위치(CS9235)에 대한 위치 데이터 요소의 유효성을 검사합니다. 줄 및 문자 번호는 지정된 파일 내에서 유효한 인터셉트 지점을 참조해야 합니다. 원본 파일이 변경되거나 위치가 파일의 범위를 벗어나는 경우 특성을 다시 생성합니다.
  • 제네릭이 아닌 형식(CS9138)에서 제네릭이 아닌 인터셉터 메서드를 선언합니다. 인터셉터는 형식 매개 변수가 있는 형식에서 선언할 수 없습니다. 제네릭 메서드를 가로채야 하는 경우, 특정하게 구성된 형식에서 작동하는 비제네릭 인터셉터를 비제네릭 포함 형식 내에 만듭니다.
  • 인터셉터를 일반 멤버 메서드로 만듭니다(CS9146). 인터셉터는 연산자, 생성자, 종료자, 속성 또는 인덱서일 수 없습니다. 인터셉터를 일반 정적 또는 인스턴스 메서드로 선언합니다.
  • 식이 아닌 실제 메서드 호출을 가로챌 수 있습니다(CS9151, CS9207). 호출되는 일반 멤버 메서드에 대한 호출만 가로챌 수 있습니다. 호출하지 않고는 참조되는 메서드 그룹, 대리자 또는 메서드를 가로챌 수 없습니다. 가로챌 수 있는 위치가 실제 메서드 호출을 식별하는지 확인합니다.
  • 중복 가로채기 시도 제거(CS9153). 각 메서드 호출은 한 번만 가로챌 수 있습니다. 여러 InterceptsLocationAttribute 인스턴스가 동일한 호출을 대상으로 하는 경우 모호성을 해결하기 위해 하나를 제외한 모든 인스턴스를 제거합니다.
  • 연산자nameof를 차단하지 마세요(CS9160). 연산자는 nameof 런타임에 메서드를 호출하지 않으므로 가로챌 수 없습니다. 런타임에 실행되는 실제 메서드 호출만 가로채야 합니다.
  • 인터셉터에서 UnmanagedCallersOnlyAttribute을(를) 제거하십시오 (CS9161). 인터셉터는 관리 코드에서 호출할 수 있어야 하며 로 표시 UnmanagedCallersOnlyAttribute할 수 없습니다. 인터셉터 메서드 선언에서 특성을 제거합니다.
  • 네임스페이스 내에서 인터셉터를 선언합니다(CS9206). 인터셉터는 전역 네임스페이스에서 선언할 수 없으며 하나 이상의 네임스페이스 선언 내에 포함되어야 합니다. 인터셉터 클래스를 네임스페이스로 래핑합니다.
  • 컴파일 수준(CS9152)에서 중복 파일 경로를 확인합니다. 여러 파일이 컴파일에서 동일한 경로를 공유하는 경우 컴파일러는 가로챌 파일을 확인할 수 없습니다. 빌드 구성이 고유한 파일 경로를 생성하거나 원본 파일에 대해 다른 조직 전략을 사용하는지 확인합니다.