언어 기능 및 버전에 대한 오류 및 경고 해결

이 문서에서는 다음 컴파일러 오류 및 경고를 설명합니다.

  • CS0171: 컨트롤이 호출자에게 반환되기 전에 필드 '이름'을 완전히 할당해야 합니다. 필드를 자동으로 기본값으로 설정하려면 언어 버전 'version'으로 업데이트하는 것이 좋습니다.
  • CS0188: 모든 필드가 할당되기 전에는 'this' 개체를 사용할 수 없습니다. 할당되지 않은 필드를 자동으로 기본값으로 설정하려면 언어 버전 'version'으로 업데이트하는 것이 좋습니다.
  • CS0843: 제어가 호출자에게 반환되기 전에 자동 구현 속성 'name'을 완전히 할당해야 합니다. 속성을 자동으로 기본값으로 설정하려면 언어 버전 'version'으로 업데이트하는 것이 좋습니다.
  • CS1617: /langversion에 대해 잘못된 옵션 'option'입니다. 지원되는 값을 나열하려면 '/langversion:?'을 사용합니다.
  • CS1638: 'identifier'는 예약 식별자이며 ISO 언어 버전 모드를 사용할 때 사용할 수 없습니다.
  • CS1738: 모든 고정 인수를 지정한 후에 명명된 인수 사양이 표시되어야 합니다. 후행이 아닌 명명된 인수를 허용하려면 언어 버전 7.2 이상에서 사용하세요.
  • CS8021: RuntimeMetadataVersion에 대한 값을 찾을 수 없습니다. System.Object를 포함하는 어셈블리를 찾을 수 없으며 옵션을 통해 지정된 RuntimeMetadataVersion의 값도 없습니다.
  • CS8022: C# 1에서는 기능을 사용할 수 없습니다. 언어 버전 2 이상 사용하세요.
  • CS8023: C# 2에서는 기능을 사용할 수 없습니다. 언어 버전 3 이상 사용하세요.
  • CS8024: C# 3에서는 기능을 사용할 수 없습니다. 언어 버전 4 이상 사용하세요.
  • CS8025: C# 4에서는 기능을 사용할 수 없습니다. 언어 버전 5 이상 사용하세요.
  • CS8026: C# 5에서는 기능을 사용할 수 없습니다. 언어 버전 6 이상 사용하세요.
  • CS8058: 기능 '기능'은 실험적이며 지원되지 않습니다. '/features:feature'를 사용하여 사용하도록 설정합니다.
  • CS8059: C# 6에서는 기능을 사용할 수 없습니다. 언어 버전 7 이상 사용하세요.
  • CS8107: C# 7.0에서는 기능을 사용할 수 없습니다. 언어 버전 7.1 이상 사용하세요.
  • CS8192: 제공된 언어 버전이 지원되지 않거나 잘못되었습니다. 'value'.
  • CS8302: C# 7.1에서는 기능을 사용할 수 없습니다. 언어 버전 7.2 이상 사용하세요.
  • CS8303: 지정된 언어 버전 'value'에 선행 0이 있을 수 없습니다.
  • CS8304: 컴파일러 버전: 'version'. 언어 버전: 버전.
  • CS8305: 'type'은 평가 목적으로만 사용되며 향후 업데이트에서 변경 또는 제거될 수 있습니다.
  • CS8306: 튜플 요소 이름 'name'이 유추됩니다. 유추된 이름으로 요소에 액세스하려면 언어 버전 7.1을 사용하세요.
  • CS8314: 'type' 형식의 식은 C# 버전의 'type' 형식 패턴으로 처리할 수 없습니다. 언어 버전 'version' 이상 버전을 사용하세요.
  • CS8320: C# 7.2에서는 기능을 사용할 수 없습니다. 언어 버전 7.3 이상 사용하세요.
  • CS8370: C# 7.3에서는 기능을 사용할 수 없습니다. 언어 버전 8을 사용하세요.
  • CS8371: 자동 속성의 필드 대상 특성은 언어 버전 7.3에서 지원되지 않습니다. 언어 버전 8.0 이상 사용하세요.
  • CS8400: C# 8에서는 기능을 사용할 수 없습니다. 언어 버전 9 이상 사용하세요.
  • CS8401: 보간된 축자 문자열에 '$@' 대신 '@$'를 사용하려면 언어 버전 8.0 이상을 사용하세요.
  • CS8511: 'type' 형식의 식은 'type' 형식의 패턴으로 처리할 수 없습니다. 열려 있는 형식을 상수 패턴과 일치하려면 언어 버전 'version' 이상 버전을 사용하세요.
  • CS8627: 언어 버전 'version' 이상이 사용되지 않는 한 nullable 형식 매개 변수는 값 형식 또는 nullable이 아닌 참조 형식으로 알려져 있어야 합니다. 언어 버전을 변경하거나 '클래스', '구조체' 또는 형식 제약 조건을 추가하는 것이 좋습니다.
  • CS8630: 잘못된 'option' 값: C# 버전의 경우 'value'입니다. 언어 버전 'version' 이상 버전을 사용하세요.
  • CS8652: 이 기능은 현재 미리 보기로 제공되며 지원되지 않습니다. 미리 보기 기능을 사용하려면 '미리 보기' 언어 버전을 사용합니다.
  • CS8701: 대상 런타임은 기본 인터페이스 구현을 지원하지 않습니다.
  • CS8702: 대상 런타임이 기본 인터페이스 구현을 지원하지 않으므로 'member'는 'type' 형식의 인터페이스 멤버 'member'를 구현할 수 없습니다.
  • CS8703: C# 버전에서 한정자 '한정자'가 이 항목에 유효하지 않습니다. 언어 버전 8.0 이상 사용하세요.
  • CS8704: 'type'은 인터페이스 멤버 'member'를 구현하지 않습니다. 'type'은 C# 버전에서 비공용 멤버를 암시적으로 구현할 수 없습니다. 언어 버전 'version' 이상 버전을 사용하세요.
  • CS8706: C# 7.3에서 기능을 사용할 수 없으므로 형식에서 인터페이스 멤버를 구현할 수 없습니다.
  • CS8707: 대상 런타임은 인터페이스의 멤버에 대한 'protected', 'protected internal' 또는 'private protected' 접근성을 지원하지 않습니다.
  • CS8773: C# 9에서는 기능을 사용할 수 없습니다. 언어 버전 10 이상 사용하세요.
  • CS8830: 대상 런타임은 재정의에서 공변 반환 형식을 지원하지 않습니다. 재정의된 멤버 'member'와 일치해야 하므로 반환 형식은 'type'이어야 합니다.
  • CS8831: 대상 런타임은 재정의의 공변 형식을 지원하지 않습니다. 재정의된 멤버 'member'에 일치하려면 형식이 'type'이어야 합니다.
  • CS8888: '관리형' 호출 규칙은 관리되지 않는 호출 규칙 지정자와 결합할 수 없습니다.
  • CS8889: 대상 런타임은 확장 가능 또는 런타임 환경 기본 호출 규칙을 지원하지 않습니다.
  • CS8890: 'type' 형식이 정의되지 않았습니다.
  • CS8891: 호출 규칙으로 사용하려면 'type' 형식이 public이어야 합니다.
  • CS8904: 잘못된 분산: 언어 버전 9.0 이상이 사용되지 않는 한 형식 매개 변수는 'member'에서 변함없이 유효해야 합니다.
  • CS8912: 봉인된 'Object.ToString'이 있는 레코드에서 상속하는 것은 C# 9.0에서 지원되지 않습니다. 언어 버전 10.0 이상 사용하세요.
  • CS8919: 대상 런타임은 인터페이스에서 정적 추상 멤버를 지원하지 않습니다.
  • CS8929: 대상 런타임이 인터페이스의 정적 추상 멤버를 지원하지 않으므로 'method'는 'type' 형식의 인터페이스 멤버 'member'를 구현할 수 없습니다.
  • CS8936: C# 10에서는 기능을 사용할 수 없습니다. 언어 버전 11 이상 사용하세요.
  • CS8957: 'type'과 'type' 사이에 공통 형식이 없으므로 언어 버전 8.0에서는 조건식이 유효하지 않습니다. 대상 형식 변환을 사용하려면 언어 버전 9.0 이상으로 업그레이드합니다.
  • CS8967: 축자가 아닌 보간된 문자열 내의 줄 바꿈은 C# 10.0에서 지원되지 않습니다. 언어 버전 11.0 이상 사용하세요.
  • CS9014: 할당되지 않은 자동 구현 속성 'name'을 사용합니다. 속성을 자동으로 기본값으로 설정하려면 언어 버전 'version'으로 업데이트하는 것이 좋습니다.
  • CS9015: 할당되지 않은 필드 'name'을 사용합니다. 필드를 자동으로 기본값으로 설정하려면 언어 버전 'version'으로 업데이트하는 것이 좋습니다.
  • CS9016: 할당되지 않은 자동 구현 속성 'name'을 사용합니다. 속성을 자동으로 기본값으로 설정하려면 언어 버전 'version'으로 업데이트하는 것이 좋습니다.
  • CS9017: 할당되지 않은 필드 'name'을 사용합니다. 필드를 자동으로 기본값으로 설정하려면 언어 버전 'version'으로 업데이트하는 것이 좋습니다.
  • CS9041: 'type'에는 이 버전의 C# 컴파일러에서 지원되지 않는 컴파일러 기능 'feature'가 필요합니다.
  • CS9058: C# 11에서는 기능을 사용할 수 없습니다. 언어 버전 12 이상 사용하세요.
  • CS9064: 대상 런타임은 ref 필드를 지원하지 않습니다.
  • CS9103: 'type'은 '11'을 예상하는 인식할 수 없는 RefSafetyRulesAttribute 버전이 있는 모듈에서 정의됩니다.
  • CS9171: 대상 런타임은 인라인 배열 형식을 지원하지 않습니다.
  • CS9194: 'ref' 키워드를 사용하여 인수를 전달할 수 없습니다. 'ref' 인수를 'in' 매개 변수에 전달하려면 언어 버전 12 이상으로 업그레이드합니다.
  • CS9202: C# 12.0에서는 기능을 사용할 수 없습니다. 언어 버전 13 이상 사용하세요.
  • CS9204: 'type'은 평가 목적으로만 사용되며 향후 업데이트에서 변경 또는 제거될 수 있습니다. 계속하려면 이 진단을 표시하지 않습니다.
  • CS9211: 'Experimental' 특성에 대한 diagnosticId 인수는 유효한 식별자여야 합니다.
  • CS9240: 대상 런타임은 ref와 유사한 제네릭을 지원하지 않습니다.
  • CS9260: C# 13.0에서는 기능을 사용할 수 없습니다. 언어 버전 14 이상 사용하세요.
  • CS9268: 'type'은 평가 목적으로만 사용되며 향후 업데이트에서 변경 또는 제거될 수 있습니다. 'message'. 계속하려면 이 진단을 표시하지 않습니다.
  • CS9269: UnscopedRefAttribute는 C# 11 이상 또는 net7.0 이상을 대상으로 하는 경우에만 유효합니다.
  • CS9271: 형식 'Microsoft.CodeAnalysis.EmbeddedAttribute'는 제네릭 형식이 아니어야 하고, internal이어야 하며, file 형식이 아니어야 하고, sealed되어 있어야 하며, static이 아니어야 하고, 매개 변수가 없는 생성자를 가져야 하며, System.Attribute를 상속해야 하고, 모든 형식에 적용할 수 있어야 합니다.
  • CS9327: C# 14.0에서는 기능을 사용할 수 없습니다. 언어 버전 'version' 이상 버전을 사용하세요.
  • CS9328: 메서드 'method'는 현재 런타임 비동기에서 지원되지 않는 기능을 사용합니다. 'System.Runtime.CompilerServices.RuntimeAsyncMethodGenerationAttribute(false)'를 사용하여 메서드를 런타임 비동기에서 옵트아웃합니다.
  • CS9346: 업데이트하려면 애플리케이션을 다시 시작하지 않고 런타임에서 지원하지 않는 명시적 인터페이스 구현을 내보내야 합니다.
  • CS9352: 대상 런타임은 확장 레이아웃 유형을 지원하지 않습니다.

이러한 모든 오류 및 경고의 원인은 컴파일러 또는 런타임이 사용 중인 기능을 지원하지 않기 때문에 발생합니다. 해결 방법은 문제가 언어 버전 구성 문제인지, 언어 버전 불일치, 런타임 제한 또는 실험적 기능인지에 따라 달라집니다.

언어 버전 구성 오류

  • CS1617: /langversion에 대해 잘못된 옵션 'option'입니다. 지원되는 값을 나열하려면 '/langversion:?'을 사용합니다.
  • CS1638: 'identifier'는 예약 식별자이며 ISO 언어 버전 모드를 사용할 때 사용할 수 없습니다.
  • CS8192: 제공된 언어 버전이 지원되지 않거나 잘못되었습니다. 'value'.
  • CS8303: 지정된 언어 버전 'value'에 선행 0이 있을 수 없습니다.
  • CS8304: 컴파일러 버전: 'version'. 언어 버전: 버전.

이러한 오류는 프로젝트 파일 또는 컴파일러 옵션의 <LangVersion> 설정이 잘못되었거나 설치된 컴파일러와 호환되지 않음을 나타냅니다-langversion.

프로젝트 파일의 <LangVersion> 값을 유효한 언어 버전 문자열(CS1617, CS8192, CS8303)으로 수정합니다. 유효한 값은 default, latest, preview, latestMajor 또는 7.3, 8.0, 9.0, 10, 11, 12, 13, 14와 같은 특정 버전 번호입니다. 앞에 오는 0은 버전 번호에 포함하지 마세요. 지원되는 값의 전체 목록은 C# 언어 버전 관리 기능을 참조하세요.

Tip

지원되는 언어 버전 목록을 보려면 빌드하기 전에 이 문서의 표를 참조하거나 프로젝트 파일에서 -langversion:?컴파일하거나 일시적으로 설정합니다 <LangVersion>?</LangVersion> .

.NET SDK를 지정한 언어 버전(CS8304)을 지원하는 버전으로 업데이트합니다. C# 컴파일러의 각 버전은 최대 특정 언어 버전을 지원합니다. 컴파일러에서 지원하는 것보다 최신 언어 버전을 지정하는 경우 SDK를 업그레이드합니다.

이중 밑줄 식별자를 제거하거나 언어 버전을 최신 버전 ISO-1ISO-2 (CS1638)으로 변경합니다. ISO 언어 모드는 __(이중 밑줄)을 포함하는 식별자가 ISO C# 사양을 준수하지 않기 때문에 이러한 식별자를 예약합니다.

메모

현재 C# 컴파일러는 더 이상 CS1638을 생성하지 않습니다. 이전 컴파일러는 ISO-1 또는 ISO-2 언어 버전을 사용할 때 이 오류를 발생시켰습니다.

컴파일러는 대상 프레임워크에서 기본 언어 버전을 결정합니다.

목표/타겟 버전 C# 언어 버전 기본값
닷넷 11.x C# 15
닷넷 10.x C# 14
닷넷 9.x C# 13
닷넷 8.x C# 12
닷넷 7.x C# 11
닷넷 6.x C# 10
닷넷 5.x C# 9.0
.NET 코어 3.x C# 8.0
.NET 코어 2.x C# 7.3
.NET Standard 2.1 C# 8.0
.NET Standard 2.0 C# 7.3
.NET Standard 1.x C# 7.3
.NET Framework 모두 C# 7.3

프로젝트 파일에서 요소를 제거 LangVersion 하면 컴파일러에서 대상 프레임워크의 기본값을 사용합니다. 특정 버전을 지정하여 최신 기능을 사용하도록 설정할 수도 있습니다.

의미
preview 컴파일러가 최신 미리 보기 버전의 유효한 언어 구문을 모두 허용합니다.
latest 컴파일러가 최신 릴리스 버전(부 버전 포함)의 구문을 허용합니다.
latestMajor
또는 default
컴파일러가 최신 릴리스 주 버전의 구문을 허용합니다.
15.0 컴파일러는 C# 15 이하에 포함된 구문만 허용합니다.
14.0 컴파일러는 C# 14 이하에 포함된 구문만 허용합니다.
13.0 컴파일러는 C# 13 이하에 포함된 구문만 허용합니다.
12.0 컴파일러는 C# 12 이하에 포함된 구문만 허용합니다.
11.0 컴파일러는 C# 11 이하에 포함된 구문만 허용합니다.
10.0 컴파일러는 C# 10 이하에 포함된 구문만 허용합니다.
9.0 컴파일러는 C# 9 이하에 포함된 구문만 허용합니다.
8.0 컴파일러는 C# 8.0 이하에 포함된 구문만 허용합니다.
7.3 컴파일러는 C# 7.3 이하에 포함된 구문만 허용합니다.
7.2 컴파일러는 C# 7.2 이하에 포함된 구문만 허용합니다.
7.1 컴파일러는 C# 7.1 이하에 포함된 구문만 허용합니다.
7 컴파일러는 C# 7.0 이하에 포함된 구문만 허용합니다.
6 컴파일러는 C# 6.0 이하에 포함된 구문만 허용합니다.
5 컴파일러는 C# 5.0 이하에 포함된 구문만 허용합니다.
4 컴파일러는 C# 4.0 이하에 포함된 구문만 허용합니다.
3 컴파일러는 C# 3.0 이하에 포함된 구문만 허용합니다.
ISO-2
또는 2
컴파일러는 ISO/IEC 23270:2006 C#(2.0)에 포함된 구문만 허용합니다.
ISO-1
또는 1
컴파일러는 ISO/IEC 23270:2003 C#(1.0/1.2)에 포함된 구문만 허용합니다.

각 프레임워크 버전에 지원되는 언어 버전에 대한 자세한 내용은 언어 참조 섹션에서 언어 버전 구성 을 참조하세요.

언어 버전에서 기능을 사용할 수 없음

  • CS1738: 명명된 인수 사양은 모든 고정 인수를 지정한 다음에 와야 합니다
  • CS8022, CS8023, CS8024, CS8025, CS8026, CS8059, CS8107, CS8302, CS8320, CS8370, CS8400, CS8773, CS8936, CS9058, CS9202, CS9260, CS9327: 기능은 C# X에서 사용할 수 없습니다. 언어 버전 Y 이상 사용하세요.
  • CS8306: 튜플 요소 이름이 유추됩니다. 유추된 이름으로 요소에 액세스하려면 언어 버전 7.1을 사용하세요.
  • CS8314: 'type' 형식의 식은 C# 버전의 'type' 형식 패턴으로 처리할 수 없습니다. 언어 버전 'version' 이상 버전을 사용하세요.
  • CS8371: 자동 속성의 필드 대상 특성은 언어 버전 7.3에서 지원되지 않습니다.
  • CS8401: 보간된 축자 문자열에 '$@' 대신 '@$'를 사용하려면 언어 버전 8.0 이상을 사용하세요.
  • CS8511: 'type' 형식의 식은 'type' 형식의 패턴으로 처리할 수 없습니다. 열려 있는 형식을 상수 패턴과 일치하려면 언어 버전 'version' 이상 버전을 사용하세요.
  • CS8627: 언어 버전 'version' 이상이 사용되지 않는 한 nullable 형식 매개 변수는 값 형식 또는 nullable이 아닌 참조 형식으로 알려져 있어야 합니다. 언어 버전을 변경하거나 '클래스', '구조체' 또는 형식 제약 조건을 추가하는 것이 좋습니다.
  • CS8630: 잘못된 'option' 값: C# 버전의 경우 'value'입니다. 언어 버전 'version' 이상 버전을 사용하세요.
  • CS8703: 이 C# 버전에서는 수정자 'modifier'가 이 항목에 유효하지 않습니다.
  • CS8704: 'type'은 인터페이스 멤버 'member'를 구현하지 않습니다. 'type'은 비공용 멤버를 암시적으로 구현할 수 없습니다.
  • CS8706: 이 버전에서는 기능을 사용할 수 없으므로 형식에서 인터페이스 멤버를 구현할 수 없습니다.
  • CS8904: 잘못된 분산: 언어 버전 9.0 이상이 사용되지 않는 한 형식 매개 변수는 'member'에서 변함없이 유효해야 합니다.
  • CS8912: 봉인된 'Object.ToString'이 있는 레코드에서 상속하는 것은 C# 9.0에서 지원되지 않습니다.
  • CS8957: 형식 간에 공통 형식을 찾을 수 없기 때문에 언어 버전 8.0에서는 조건식이 유효하지 않습니다.
  • CS8967: 축자가 아닌 보간된 문자열 내의 줄 바꿈은 C# 10.0에서 지원되지 않습니다.
  • CS9194: 'ref' 키워드를 사용하여 인수를 전달할 수 없습니다. 'ref' 인수를 'in' 매개 변수에 전달하려면 언어 버전 12 이상으로 업그레이드합니다.

이러한 오류는 모두 현재 프로젝트가 대상으로 하는 것보다 최신 C# 버전이 필요한 언어 기능을 사용하고 있음을 나타냅니다. 이러한 오류를 해결하려면 다음 옵션 중 하나를 사용합니다.

  • 컴파일러가 필요한 언어 버전을 자동으로 선택되도록 대상 프레임워크를 업그레이드합니다. 각 대상 프레임워크는 기본 C# 버전에 매핑됩니다. 예를 들어 .NET 8은 기본값이 C# 12이고, .NET 9는 C# 13으로, .NET 10은 기본값이 C# 14입니다. 전체 매핑에 대한 언어 버전 구성 오류 의 표를 참조하세요.

  • 프로젝트 파일의 <LangVersion> 요소를 필요한 버전 이상으로 설정합니다. 예를 들어 C# 12 기능을 사용하도록 설정하려면 프로젝트 파일의 <PropertyGroup><LangVersion>12</LangVersion>를 추가합니다.

업그레이드할 수 없는 경우 오류를 트리거한 기능을 피하세요. 오류 메시지의 이름은 기능과 필수 버전입니다. 다음 목록에서는 특정 오류에 대한 추가 컨텍스트를 제공합니다.

  • 모든 인수에 명시적으로 명명된 인수를 사용하거나 C# 7.2 이상으로 업그레이드하여 후행이 아닌 명명된 인수(CS1738)를 사용합니다.
  • 유추된 이름이 아닌 선언된 이름으로 튜플 요소에 액세스하거나 C# 7.1 이상(CS8306)으로 업그레이드합니다.
  • C# 8.0 이전 버전에서는 보간된 축자 문자열에 @$"..." 대신 $@"..."를 사용합니다(CS8401).
  • nullable 형식 매개 변수에 명시적 형식 제약 조건을 추가하거나 C# 9 이상으로 업그레이드하여 이 요구 사항을 완화합니다(CS8627).
  • nullable 주석 및 nullable 컨텍스트(CS8630)를 사용하려면 C# 8.0 이상으로 업그레이드하세요.
  • 두 분기가 공통 형식이 없는 조건식에 명시적 캐스트를 추가하거나 대상 형식 조건식(CS8957)의 경우 C# 9 이상으로 업그레이드합니다.
  • 보간된 문자열 식 외부에서 줄 바꿈을 이동하거나 C# 11 이상(CS8967)으로 업그레이드합니다.
  • 매개 변수에 인수를 in 전달하는 대신 ref 키워드를 in 사용하거나 C# 12 이상(CS9194)으로 업그레이드합니다.
  • 암시적이 아닌 비공용 인터페이스 멤버를 명시적으로 구현하거나 C# 9 이상(CS8704)으로 업그레이드합니다.

대상 런타임은 기능을 지원하지 않습니다.

  • CS8021: RuntimeMetadataVersion에 대한 값을 찾을 수 없습니다.
  • CS8701: 대상 런타임은 기본 인터페이스 구현을 지원하지 않습니다.
  • CS8702: 대상 런타임이 기본 인터페이스 구현을 지원하지 않으므로 'member'는 형식의 인터페이스 멤버를 구현할 수 없습니다.
  • CS8707: 대상 런타임은 인터페이스의 멤버에 대해 'protected', 'protected internal' 또는 'private protected' 액세스 한정자를 지원하지 않습니다.
  • CS8830: 대상 런타임은 재정의의 공변 반환 형식을 지원하지 않습니다.
  • CS8831: 대상 런타임은 재정의의 공변 형식을 지원하지 않습니다.
  • CS8889: 대상 런타임은 확장 가능 또는 런타임 환경 기본 호출 규칙을 지원하지 않습니다.
  • CS8919: 대상 런타임은 인터페이스에서 정적 추상 멤버를 지원하지 않습니다.
  • CS8929: 대상 런타임이 인터페이스의 정적 추상 멤버를 지원하지 않으므로 'method'는 'type' 형식의 인터페이스 멤버 'member'를 구현할 수 없습니다.
  • CS9041: 'type'에는 이 버전의 C# 컴파일러에서 지원되지 않는 컴파일러 기능 'feature'가 필요합니다.
  • CS9064: 대상 런타임은 ref 필드를 지원하지 않습니다.
  • CS9103: 'type'은 '11'을 예상하는 인식할 수 없는 RefSafetyRulesAttribute 버전이 있는 모듈에서 정의됩니다.
  • CS9171: 대상 런타임은 인라인 배열 형식을 지원하지 않습니다.
  • CS9240: 대상 런타임은 by-ref-like 제네릭을 지원하지 않습니다.
  • CS9328: 메서드 'method'는 현재 런타임 비동기에서 지원되지 않는 기능을 사용합니다. 'System.Runtime.CompilerServices.RuntimeAsyncMethodGenerationAttribute(false)'를 사용하여 메서드를 런타임 비동기에서 옵트아웃합니다.
  • CS9346: 업데이트하려면 애플리케이션을 다시 시작하지 않고 런타임에서 지원하지 않는 명시적 인터페이스 구현을 내보내야 합니다.
  • CS9352: 대상 런타임은 확장 레이아웃 유형을 지원하지 않습니다.

이러한 오류는 단독으로 업그레이드해도 해결되지 않으므로 언어 버전 오류와 <LangVersion> 다릅니다. 대상 런타임(지정됨 <TargetFramework>)도 CLR/런타임 수준에서 기능을 지원해야 합니다.

프로젝트 파일의 <TargetFramework> 버전을 필요한 기능을 지원하는 버전으로 업그레이드합니다. 다음 목록에서는 최소 런타임이 필요한 기능을 보여줍니다.

  • 보호된 액세스(CS8701, CS8702, CS8707)를 포함한 기본 인터페이스 구현: .NET Core 3.0 / .NET 5+가 필요합니다.
  • 인터페이스의 정적 추상 멤버(CS8919, CS8929): .NET 7 이상이 필요합니다.
  • 공변 반환 형식(CS8830, CS8831): .NET 5 이상이 필요합니다.
  • ref 필드(CS9064): .NET 7 이상이 필요합니다.
  • 인라인 배열 형식(CS9171): .NET 8 이상이 필요합니다.
  • 참조와 유사한 제네릭(CS9240): .NET 9 이상이 필요합니다.
  • 확장 레이아웃 형식(CS9352): .NET 10 이상이 필요합니다.
  • 확장 가능한 호출 규칙(CS8889): .NET 5 이상이 필요합니다.
  • 런타임 비동기 기능(CS9328): .NET 10 이상이 필요합니다.

컴파일러 자체에서 필요한 컴파일러 기능(CS9041)을 지원하지 않는 경우 .NET SDK를 업데이트합니다. 이 오류는 참조된 라이브러리가 최신 컴파일러 버전이 필요한 메타데이터 기능을 사용한다는 것을 나타냅니다.

핵심 런타임 라이브러리에 대한 유효한 참조가 있는지 확인합니다(CS8021). 이 경고는 일반적으로 표준 런타임 참조 없이 빌드할 때 나타납니다. RuntimeMetadataVersion 옵션을 지정하거나 포함하는 System.Object어셈블리에 대한 참조를 추가합니다.

호환되는 컴파일러 버전(RefSafetyRulesAttribute)을 사용하여 종속 모듈을 다시 컴파일하여 버전 불일치를 해결 합니다.

핫 리로드 중 이 오류(CS9346)가 발생하면 애플리케이션을 다시 시작하세요. 런타임에서 필요한 명시적 인터페이스 구현을 동적으로 내보낼 수 없으므로 일부 편집 및 계속 변경 내용을 다시 시작해야 합니다.

함수 포인터 및 호출 규칙 오류

  • CS8888: '관리형' 호출 규칙은 관리되지 않는 호출 규칙 지정자와 결합할 수 없습니다.
  • CS8889: 대상 런타임은 확장 가능 또는 런타임 환경 기본 호출 규칙을 지원하지 않습니다.
  • CS8890: 'type' 형식이 정의되지 않았습니다.
  • CS8891: 호출 규칙으로 사용하려면 'type' 형식이 public이어야 합니다.

이러한 오류는 C# 9에 도입된 함수 포인터 선언 및 해당 호출 규칙 지정자와 관련이 있습니다.

관리되지 않는 지정자(managed)도 포함하는 호출 규칙 지정자 목록에서 제거 합니다. 호출 규칙은 managed 기본값이며 , , unmanagedCdecl또는 Stdcall.Thiscall와 같은 Fastcall지정자와 결합할 수 없습니다.

확장 가능 또는 런타임 기본 호출 규칙(CS8889)을 사용하도록 대상 프레임워크를 .NET 5 이상으로 업그레이드합니다. UnmanagedCallersOnly 특성 및 확장 가능한 호출 규칙 형식에는 .NET Core 3.1 이하에서 사용할 수 없는 런타임 지원이 필요합니다.

참조된 어셈블리(CS8890)에 호출 규칙 형식이 있는지 확인합니다. CallConvCdecl, CallConvStdcall, CallConvThiscall, CallConvFastcall와 같은 호출 규약 유형은 System.Runtime.CompilerServices에 정의되어 있습니다. 형식을 찾을 수 없는 경우 올바른 런타임 라이브러리에 대한 참조를 추가합니다.

사용자 지정 호출 규칙 형식 public (CS8891)을 만듭니다. 사용자 지정 호출 규칙 형식을 정의하는 경우 함수 포인터 형식 선언에서 사용하도록 선언 public 합니다.

실험적 및 미리 보기 기능

  • CS8058: 기능 '기능'은 실험적이며 지원되지 않습니다. '/features:feature'를 사용하여 사용하도록 설정합니다.
  • CS8305: 'type'은 평가 목적으로만 사용되며 향후 업데이트에서 변경 또는 제거될 수 있습니다.
  • CS8652: 이 기능은 현재 미리 보기로 제공되며 지원되지 않습니다. 미리 보기 기능을 사용하려면 '미리 보기' 언어 버전을 사용합니다.
  • CS9204: 'type'은 평가 목적으로만 사용되며 향후 업데이트에서 변경 또는 제거될 수 있습니다. 계속하려면 이 진단을 표시하지 않습니다.
  • CS9211: 'Experimental' 특성에 대한 diagnosticId 인수는 유효한 식별자여야 합니다.
  • CS9268: 'type'은 평가 목적으로만 사용되며 향후 업데이트에서 변경 또는 제거될 수 있습니다. 'message'. 계속하려면 이 진단을 표시하지 않습니다.

이러한 진단은 실험적으로 표시되거나 미리 보기 언어 버전에서만 사용할 수 있는 기능 또는 형식을 사용하고 있음을 나타냅니다.

경고

실험적 기능은 변경될 수 있습니다. API가 변경되거나 향후 업데이트에서 제거될 수 있습니다. 실험적 기능을 포함하는 것은 라이브러리 작성자가 향후 개발을 위한 아이디어와 개념에 대한 피드백을 얻을 수 있는 방법입니다. 실험적으로 표시된 기능을 사용할 때는 주의해야 합니다.

프로젝트 파일에서 미리 보기 언어 기능(<LangVersion>preview</LangVersion>)을 사용하도록 설정합니다. 미리 보기 기능은 아직 확정되지 않았으며 이후 릴리스에서 변경될 수 있습니다.

API(CS8058, CS8305, CS9204, CS9268)의 실험적 특성을 승인하려면 특정 진단 ID를 표시하지 않습니다. 라이브러리 작성자는 API가 변경될 수 있음을 나타내기 위해 API를 System.Diagnostics.CodeAnalysis.ExperimentalAttribute로 표시합니다. #pragma warning disable를 사용하거나 프로젝트 파일의 <NoWarn>에 진단 ID를 추가하여 해당 진단을 표시하지 않도록 할 수 있습니다.

인수 diagnosticId[Experimental] 유효한 C# 식별자인지 확인합니다(CS9211). 식별자는 표준 명명 규칙을 따라야 합니다. 공백, 특수 문자를 포함하거나 숫자로 시작할 수 없습니다. 를 사용하여 System.Diagnostics.CodeAnalysis.ExperimentalAttribute고유한 실험적 기능을 선언할 수도 있습니다.

구조체 초기화의 호환성을 깨뜨리는 변경

  • CS0171, CS8881: 컨트롤이 호출자에게 반환되기 전에 필드 '이름'을 완전히 할당해야 합니다. 필드를 자동으로 기본값으로 설정하려면 언어 버전 'version'으로 업데이트하는 것이 좋습니다.
  • CS0188, CS8885: 모든 필드가 할당되기 전에는 'this' 개체를 사용할 수 없습니다. 할당되지 않은 필드를 자동으로 기본값으로 설정하려면 언어 버전 'version'으로 업데이트하는 것이 좋습니다.
  • CS0843, CS8880: 제어가 호출자에게 반환되기 전에 자동 구현 속성 'name'을 완전히 할당해야 합니다. 속성을 자동으로 기본값으로 설정하려면 언어 버전 'version'으로 업데이트하는 것이 좋습니다.
  • CS9014: 할당되지 않은 자동 구현 속성 'name'을 사용합니다. 속성을 자동으로 기본값으로 설정하려면 언어 버전 'version'으로 업데이트하는 것이 좋습니다.
  • CS9015: 할당되지 않은 필드 'name'을 사용합니다. 필드를 자동으로 기본값으로 설정하려면 언어 버전 'version'으로 업데이트하는 것이 좋습니다.
  • CS9016: 할당되지 않은 자동 구현 속성 'name'을 사용합니다. 속성을 자동으로 기본값으로 설정하려면 언어 버전 'version'으로 업데이트하는 것이 좋습니다.
  • CS9017: 할당되지 않은 필드 'name'을 사용합니다. 필드를 자동으로 기본값으로 설정하려면 언어 버전 'version'으로 업데이트하는 것이 좋습니다.

이러한 오류와 경고는 struct 형식의 필드에 액세스하기 전에 해당 형식이 올바르게 초기화되도록 하는 데 도움이 됩니다. 이전 버전의 C#에서는 모든 생성자의 구조체에 있는 모든 필드를 명시적으로 할당해야 합니다. 매개 변수가 없는 생성자는 모든 필드를 기본값으로 초기화합니다. 이후 버전에서는 모든 생성자가 모든 필드를 초기화합니다. 필드가 명시적으로 설정되거나, 필드 이니셜라이저에서 설정되거나, 기본값으로 설정됩니다.

모든 생성자가 모든 struct 필드(CS0171, CS0188, CS0843 및 최신 CS8880, CS8881, CS8885)를 자동으로 기본값으로 설정하도록 C# 11 이상으로 업그레이드합니다. C# 11부터 컴파일러는 생성자에서 명시적으로 설정되지 않은 필드를 기본값으로 자동으로 초기화합니다.

C# 11(: this(), CS0843)으로 업그레이드할 수 없는 경우 구조체 생성자에서 사용하여 기본 생성자를 명시적으로 호출합니다. 이 방법을 사용하면 생성자 본문이 실행되기 전에 모든 필드가 기본값을 받습니다.

struct S
{
    public int AIProp { get; set; }
    public S(int i) : this() // Ensures all fields are initialized
    {
        AIProp = i;
    }
}

생성자가 반환되기 전이나 사용하기 this 전에 모든 필드 및 자동 속성을 할당합니다(CS9014, CS9015, CS9016, CS9017). 이러한 진단은 새 컴파일러가 할당되기 전에 속성 또는 필드를 읽고 있을 수 있음을 감지할 때 나타납니다. 값을 명시적으로 할당하거나 자동으로 기본값이 설정되어 경고가 사라지는 버전으로 업그레이드하세요.

구현별 특성

  • CS9269: UnscopedRefAttribute는 C# 11 이상 또는 net7.0 이상을 대상으로 하는 경우에만 유효합니다.
  • CS9271: 형식 'Microsoft. CodeAnalysis.EmbeddedAttribute'는 제네릭이 아니고, 내부, 파일이 아니고, 봉인되고, 비정적이어야 하며, 매개 변수가 없는 생성자가 있고, System.Attribute에서 상속되며, 모든 type.

이러한 오류는 컴파일러에서 생성되거나 특정 런타임 버전에 연결된 특성과 관련이 있습니다.

C# 11 및 .NET 7 이상으로 업그레이드하여 UnscopedRefAttribute(CS9269)를 사용합니다. 이 특성은 ref 반환 값 또는 ref struct 매개 변수에 범위가 지정된 수명이 없음을 나타냅니다. 최소 요구 사항을 충족하려면 언어 버전과 대상 프레임워크가 모두 필요합니다.

Microsoft.CodeAnalysis.EmbeddedAttribute(CS9271)을 수동으로 선언하지 마세요. 컴파일러는 필요할 때 이 특성의 원본을 자동으로 생성합니다. 이 이름을 사용하여 수동으로 선언된 형식이 있는 경우 컴파일러에서 생성된 버전과 충돌하지 않도록 해당 형식을 제거하거나 이름을 바꿉니다.