Настройка версии языка C#
Предупреждение
LangVersion
Настройка элемента latest
не рекомендуется. Параметр означает, latest
что установленный компилятор использует последнюю версию. Это может измениться с компьютера на компьютер, что делает сборки ненадежными. Кроме того, он включает функции языка, для которых могут потребоваться функции среды выполнения или библиотеки, не включенные в текущий пакет SDK.
Если необходимо явно указать версию C#, это можно сделать несколькими способами:
- Вручную измените файл проекта.
- задание языковой версии для нескольких проектов в подкаталоге;
- Настройте параметр компилятора LangVersion.
Совет
Языковая версия в Visual Studio отображается на странице свойств проекта. На вкладке "Сборка" на панели "Дополнительно" отображается выбранная версия.
Чтобы узнать, какую версию языка вы используете в данный момент, поставьте #error version
(с учетом регистра) в коде. Это позволяет компилятору вывести ошибку CS8304 с сообщением, содержащим сведения об используемой версии компилятора и текущей выбранной версии языка. Дополнительные сведения см. в статье #error (справочник по C#).
Почему вы не можете выбрать другую версию C# в Visual Studio
В Visual Studio параметр изменения языковой версии с помощью пользовательского интерфейса может быть отключен, так как версия по умолчанию соответствует целевой платформе проекта (TFM
). Эта конфигурация по умолчанию обеспечивает совместимость между языковыми функциями и поддержкой среды выполнения.
Например, изменение целевого объекта TFM
(например, с .NET 6 на .NET 9) будет обновлять версию языка соответствующим образом с C# 10 до C# 13. Этот подход предотвращает проблемы совместимости среды выполнения и сводит к минимуму непредвиденные ошибки сборки из-за неподдерживаемых языковых функций.
Если вам нужна определенная языковая версия, которая отличается от выбранной автоматически, см. приведенные ниже методы, чтобы переопределить параметры по умолчанию непосредственно в файле проекта.
Изменение файла проекта
Версию языка можно задать в файле проекта. Например, если доступ к предварительной версии функций должен быть задан явным образом, можно добавить следующий элемент:
<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 |
Компилятор принимает синтаксис из последней основной версии компилятора. |
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). |