C# 언어 버전 관리C# language versioning

최신 C# 컴파일러는 프로젝트의 대상 프레임워크를 기반으로 기본 언어 버전을 결정합니다.The latest C# compiler determines a default language version based on your project's target framework or frameworks. Visual Studio는 이 값을 변경하는 UI를 제공하지 않지만, csproj 파일을 편집하여 값을 변경할 수 있습니다.Visual Studio doesn't provide a UI to change the value, but you can change it by editing the csproj file. 기본값이 이렇게 선택되면 항상 대상 프레임워크와 호환되는 최신 언어 버전을 사용할 수 있게 됩니다.The choice of default ensures that you use the latest language version compatible with your target framework. 프로젝트의 대상과 호환되는 최신 언어 기능을 이용할 수 있다는 이점이 있습니다.You benefit from access to the latest language features compatible with your project's target. 또한, 기본값이 이렇게 선택되면 대상 프레임워크에서 사용할 수 없는 형식이나 런타임 동작이 필요한 언어를 사용하지 않을 수 있습니다.This default choice also ensures you don't use a language that requires types or runtime behavior not available in your target framework. 기본값보다 최신의 언어 버전을 선택할 경우 컴파일 시간 및 런타임 오류를 진단하기 어려워질 수 있습니다.Choosing a language version newer than the default can cause hard to diagnose compile-time and runtime errors.

이 문서의 규칙은 Visual Studio 2019 또는 .NET SDK와 함께 제공되는 컴파일러에 적용됩니다.The rules in this article apply to the compiler delivered with Visual Studio 2019 or the .NET SDK. Visual Studio 2017 설치 또는 이전 .NET Core SDK 버전의 일부인 C# 컴파일러는 기본적으로 C# 7.0을 대상으로 합니다.The C# compilers that are part of the Visual Studio 2017 installation or earlier .NET Core SDK versions target C# 7.0 by default.

C# 8.0은 .NET Core 3.x 이상 버전에서만 지원됩니다.C# 8.0 is supported only on .NET Core 3.x and newer versions. 대부분의 최신 기능에는 .NET Core 3.x에서 도입된 라이브러리 및 런타임 기능이 필요합니다.Many of the newest features require library and runtime features introduced in .NET Core 3.x:

C# 9.0은 .NET 5 이상 버전에서만 지원됩니다.C# 9.0 is supported only on .NET 5 and newer versions.

기본값Defaults

컴파일러는 다음 규칙에 따라 기본값을 결정합니다.The compiler determines a default based on these rules:

대상 프레임워크Target framework 버전version C# 언어 버전 기본값C# language version default
.NET.NET 5.x5.x C# 9.0C# 9.0
.NET Core.NET Core 3.x3.x C# 8.0C# 8.0
.NET Core.NET Core 2.x2.x C# 7.3C# 7.3
.NET Standard.NET Standard 2.12.1 C# 8.0C# 8.0
.NET Standard.NET Standard 2.02.0 C# 7.3C# 7.3
.NET Standard.NET Standard 1.x1.x C# 7.3C# 7.3
.NET Framework.NET Framework 모두all C# 7.3C# 7.3

프로젝트가 해당 미리 보기 언어 버전이 있는 미리 보기 프레임워크를 대상으로 하는 경우 사용되는 언어 버전은 미리 보기 언어 버전입니다.When your project targets a preview framework that has a corresponding preview language version, the language version used is the preview language version. 따라서 릴리스된 .NET Core 버전을 대상으로 하는 프로젝트에 영향을 주지 않으면서 모든 환경에서 해당 미리 보기의 최신 기능을 사용할 수 있습니다.You use the latest features with that preview in any environment, without affecting projects that target a released .NET Core version.

현재 사용 중인 언어 버전을 확인하려면 코드에 #error version(대/소문자 구분)을 입력합니다.To know what language version you're currently using, put #error version (case sensitive) in your code. 이렇게 하면 컴파일러가 사용 중인 컴파일러 버전 및 현재 선택된 언어 버전을 포함하는 메시지가 있는 진단 CS8304를 생성합니다.This makes the compiler produce a diagnostic, CS8304, with a message containing the compiler version being used and the current selected language version.

기본값 재정의Override a default

C# 버전을 명시적으로 지정해야 하는 경우 다음과 같은 여러 가지 방법으로 수행할 수 있습니다.If you must specify your C# version explicitly, you can do so in several ways:

프로젝트 파일 편집Edit the project file

프로젝트 파일에서 언어 버전을 설정할 수 있습니다.You can set the language version in your project file. 예를 들어 미리 보기 기능에 명시적으로 액세스하려는 경우 다음과 같은 요소를 추가합니다.For example, if you explicitly want access to preview features, add an element like this:

<PropertyGroup>
   <LangVersion>preview</LangVersion>
</PropertyGroup>

preview는 컴파일러에서 지원하는 사용 가능한 최신 미리 보기 C# 언어를 사용합니다.The value preview uses the latest available preview C# language version that your compiler supports.

여러 프로젝트 구성Configure multiple projects

여러 프로젝트를 구성하려면 <LangVersion> 요소를 포함하는 Directory.Build.props 파일을 만들 수 있습니다.To configure multiple projects, you can create a Directory.Build.props file that contains the <LangVersion> element. 일반적으로 솔루션 디렉터리에서 이 작업을 수행합니다.You typically do that in your solution directory. 솔루션 디렉터리의 Directory.Build.props 파일에 다음을 추가합니다.Add the following to a Directory.Build.props file in your solution directory:

<Project>
 <PropertyGroup>
   <LangVersion>preview</LangVersion>
 </PropertyGroup>
</Project>

해당 파일을 포함하는 디렉터리의 모든 하위 디렉터리에 있는 빌드는 미리 보기 C# 버전을 사용합니다.Builds in all subdirectories of the directory containing that file will use the preview C# version. 자세한 내용은 빌드 사용자 지정에 대한 문서를 참조하세요.For more information, see the article on Customize your build.

C# 언어 버전 참조C# language version reference

모든 표는 현재 C# 언어 버전을 보여줍니다.The following table shows all current C# language versions. 컴파일러가 오래된 것이라면 일부 값을 파악하지 못할 수 있습니다.Your compiler may not necessarily understand every value if it's older. .NET Core 3.0 이상을 설치하면 나열된 모든 항목에 액세스할 수 있습니다.If you install .NET Core 3.0 or later, then you have access to everything listed.

Value 의미Meaning
preview 컴파일러가 최신 미리 보기 버전의 유효한 언어 구문을 모두 허용합니다.The compiler accepts all valid language syntax from the latest preview version.
latest 컴파일러가 최신 릴리스 버전(부 버전 포함)의 구문을 허용합니다.The compiler accepts syntax from the latest released version of the compiler (including minor version).
latestMajor (default)latestMajor (default) 컴파일러가 최신 릴리스 주 버전의 구문을 허용합니다.The compiler accepts syntax from the latest released major version of the compiler.
8.0 컴파일러는 C# 8.0 이하에 포함된 구문만 허용합니다.The compiler accepts only syntax that is included in C# 8.0 or lower.
7.3 컴파일러는 C# 7.3 이하에 포함된 구문만 허용합니다.The compiler accepts only syntax that is included in C# 7.3 or lower.
7.2 컴파일러는 C# 7.2 이하에 포함된 구문만 허용합니다.The compiler accepts only syntax that is included in C# 7.2 or lower.
7.1 컴파일러는 C# 7.1 이하에 포함된 구문만 허용합니다.The compiler accepts only syntax that is included in C# 7.1 or lower.
7 컴파일러는 C# 7.0 이하에 포함된 구문만 허용합니다.The compiler accepts only syntax that is included in C# 7.0 or lower.
6 컴파일러는 C# 6.0 이하에 포함된 구문만 허용합니다.The compiler accepts only syntax that is included in C# 6.0 or lower.
5 컴파일러는 C# 5.0 이하에 포함된 구문만 허용합니다.The compiler accepts only syntax that is included in C# 5.0 or lower.
4 컴파일러는 C# 4.0 이하에 포함된 구문만 허용합니다.The compiler accepts only syntax that is included in C# 4.0 or lower.
3 컴파일러는 C# 3.0 이하에 포함된 구문만 허용합니다.The compiler accepts only syntax that is included in C# 3.0 or lower.
ISO-2(또는 2)ISO-2 (or 2) 컴파일러는 ISO/IEC 23270:2006 C#(2.0)에 포함된 구문만 허용합니다.The compiler accepts only syntax that is included in ISO/IEC 23270:2006 C# (2.0).
ISO-1(또는 1)ISO-1 (or 1) 컴파일러는 ISO/IEC 23270:2003 C#(1.0/1.2)에 포함된 구문만 허용합니다.The compiler accepts only syntax that is included in ISO/IEC 23270:2003 C# (1.0/1.2).

Visual Studio용 개발자 명령 프롬프트를 열고 다음 명령을 실행하여 컴퓨터에서 사용할 수 있는 언어 버전의 목록을 확인합니다.Open the Developer Command Prompt for Visual Studio, and run the following command to see the listing of language versions available on your machine.

csc -langversion:?

이와 같이 -langversion compile 옵션을 질문하면 다음과 같은 내용이 출력됩니다.Questioning the -langversion compile option like this, will print something similar to the following:

Supported language versions:
default
1
2
3
4
5
6
7.0
7.1
7.2
7.3
8.0 (default)
latestmajor
preview
latest