Поделиться через


Ошибка компилятора CS1617

Недопустимый параметр "option" для LangVersion. Используется ? для перечисления поддерживаемых значений.

Эта ошибка возникает, если вы использовали параметр командной строки LangVersion или параметр проекта, но не указали допустимый параметр языка. Чтобы устранить эту ошибку, проверьте синтаксис командной строки или параметр проекта и измените его на один из приведенных вариантов.

Например, компиляция с csc -langversion:ISO приведет к возникновению ошибки CS1617.

Перечисление поддерживаемых версий языка

Чтобы просмотреть список поддерживаемых языковых версий, обратитесь к таблице в этой статье, скомпилируйте -langversion:? или временно установите <LangVersion>?</LangVersion> в файле проекта перед сборкой.

Самый надежный способ просмотра поддерживаемых языковых версий — обратиться к справочной таблице в конце этой статьи, в которой перечислены все поддерживаемые в настоящее время версии языка.

Использование компилятора C# напрямую

Используйте параметр -langversion:? с компилятором C#. Вы должны найти путь к csc.dll в установке .NET SDK:

dotnet exec "/path/to/dotnet/sdk/version/Roslyn/bincore/csc.dll" -langversion:?

Например, в Linux с пакетом SDK для .NET 8:

dotnet exec "/usr/lib/dotnet/sdk/8.0.117/Roslyn/bincore/csc.dll" -langversion:?

Точный путь зависит от версии операционной системы и пакета SDK для .NET.

Вы можете временно задать <LangVersion>?</LangVersion> в файле проекта и создать его с помощью диагностической детализации:

dotnet build -v diagnostic

Найдите строку "Поддерживаемые языковые версии:" в выходных данных.

Предупреждение

Установка <LangVersion>?</LangVersion> в файле проекта приведет к сбою сборки после отображения поддерживаемых версий. Это связано с тем, что компилятор завершает работу после перечисления версий вместо продолжения компиляции кода. Удалите этот параметр после просмотра списка.

Допустимые значения для -langversion

Допустимые значения языковых версий зависят от используемой версии .NET. Для получения дополнительной информации о том, какая языковая версия доступна с какой версией .NET, см. правила языковых версий. Если вы получаете эту ошибку при попытке использовать более новую версию языка, понизьте версию языка или обновите .NET SDK до версии, поддерживающей эту версию языка.

В следующей таблице указаны текущие допустимые значения для -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).