Управление версиями языка C#
Компилятор C# последней версии определяет версию языка по умолчанию на основе целевой платформы или платформ проекта. Visual Studio не предоставляет пользовательский интерфейс для изменения этого значения, но его можно изменить, отредактировав файл CSPROJ. Выбор значения по умолчанию гарантирует, что вы используете последнюю версию языка, совместимую с вашей целевой платформой. Вы получите преимущество в виде доступа к последним функциям языка, совместимым с целевым объектом проекта. Этот вариант по умолчанию также гарантирует, что вы не будете использовать язык, который требует такие типы или поведение во время выполнения, которые недоступны в целевой платформе. Выбор более новой версии языка, чем значение по умолчанию, может усложнить диагностику ошибок во время компиляции и выполнения.
C# 11 поддерживается только в .NET 7 и более поздних версиях. C# 10 поддерживается только в .NET 6 и более поздних версиях. C# 9 поддерживается только в .NET 5 и более поздних версиях.
Сведения о том, какие версии .NET поддерживаются версиями Visual Studio, см. на странице совместимости платформ Visual Studio. Сведения о том, какие версии .NET поддерживаются версиями Visual Studio для Mac, см. на странице совместимости Visual Studio для Mac платформы. Ознакомьтесь со страницей Mono, чтобы узнать о совместимости Mono с версиями C#.
Значения по умолчанию
Компилятор определяет значение по умолчанию на основе следующих правил:
Назначение | Версия | Версия языка C# по умолчанию |
---|---|---|
.NET | 7.x | C# 11 |
.NET | 6.x | C# 10 |
.NET | 5.x | C# 9.0 |
.NET Core | 3.x | C# 8.0 |
.NET Core | 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 |
Если проект предназначен для платформы в предварительной версии с поддержкой соответствующего языка в предварительной версии, будет использоваться язык, поддерживаемый в предварительной версии. Вы можете использовать новейшие возможности в этой предварительной версии в любой среде, не затрагивая проекты, предназначенные для выпущенной версии .NET Core.
Важно!
Новый шаблон проекта для Visual Studio 2017 добавил <LangVersion>latest</LangVersion>
запись в новые файлы проекта. При обновлении целевой платформы для этих проектов они переопределяют поведение по умолчанию. Необходимо удалить <LangVersion>latest</LangVersion>
из файла проекта при обновлении пакета SDK для .NET. После этого проект будет использовать версию компилятора, рекомендованную для вашей целевой платформы. Вы можете обновить целевую платформу, чтобы получить доступ к новым языковым функциям.
Переопределение значения по умолчанию
Если необходимо явно указать версию C#, это можно сделать несколькими способами:
- Вручную изменить файл проекта.
- Задать версию языка для нескольких проектов в подкаталоге.
- Настроить параметр компилятора LangVersion.
Совет
Версию языка можно просмотреть в Visual Studio на странице свойств проекта. На вкладке Сборка в области Дополнительно отображается выбранная версия.
Чтобы узнать, какую версию языка вы используете в данный момент, поставьте #error version
(с учетом регистра) в коде. Это позволяет компилятору вывести ошибку CS8304 с сообщением, содержащим сведения об используемой версии компилятора и текущей выбранной версии языка. Дополнительные сведения см. в статье #error (справочник по C#).
Изменение файла проекта
Версию языка можно задать в файле проекта. Например, если доступ к предварительной версии функций должен быть задан явным образом, можно добавить следующий элемент:
<PropertyGroup>
<LangVersion>preview</LangVersion>
</PropertyGroup>
Значение preview
использует последнюю предварительную версию языка C#, которую поддерживает компилятор.
Настройка нескольких проектов
Чтобы настроить несколько проектов, вы можете создать файл Directory.Build.props, содержащий элемент <LangVersion>
. Обычно это делается в каталоге решения. Добавьте следующий код в файл Directory.Build.props в каталоге решения:
<Project>
<PropertyGroup>
<LangVersion>preview</LangVersion>
</PropertyGroup>
</Project>
Сборки во всех подкаталогах каталога, который содержит этот файл, будут использовать предварительную версию C#. Дополнительные сведения см. в статье Настройка сборки.
Справочник по версиям языка C#
В следующей таблице показаны все текущие версии языка C#. Ваш компилятор может не распознавать все значения, если имеет более раннюю версию. При установке .последней версии пакета SDK для .NET вы получаете доступ ко всем значениям в таблице.
Значение | Значение |
---|---|
preview |
Компилятор допускает использование любого допустимого синтаксиса языка из последней предварительной версии. |
latest |
Компилятор принимает синтаксис из последней выпущенной версии компилятора (включая дополнительный номер версии). |
latestMajor или default |
Компилятор принимает синтаксис из последней основной версии компилятора. |
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). |