C как обновить версию языка
Перейти к содержимому

C как обновить версию языка

  • автор:

Управление версиями языка C#

Компилятор C# последней версии определяет версию языка по умолчанию на основе целевой платформы или платформ проекта. Visual Studio не предоставляет пользовательский интерфейс для изменения этого значения, но его можно изменить, отредактировав файл CSPROJ. Выбор значения по умолчанию гарантирует, что вы используете последнюю версию языка, совместимую с вашей целевой платформой. Вы получите преимущество в виде доступа к последним функциям языка, совместимым с целевым объектом проекта. Этот вариант по умолчанию также гарантирует, что вы не будете использовать язык, который требует такие типы или поведение во время выполнения, которые недоступны в целевой платформе. Выбор более новой версии языка, чем значение по умолчанию, может усложнить диагностику ошибок во время компиляции и выполнения.

C# 12 поддерживается только в .NET 8 и более новых версиях. C# 11 поддерживается только в .NET 7 и более новых версиях. C# 10 поддерживается только в .NET 6 и более новых версиях.

Проверьте страницу совместимости платформы Visual Studio, чтобы узнать, какие версии .NET поддерживаются версиями Visual Studio. Ознакомьтесь со страницей совместимости Visual Studio для Mac платформы, чтобы узнать, какие версии .NET поддерживаются версиями Visual Studio для Mac. Проверьте страницу Mono для C# для совместимости Mono с версиями C# .

Defaults

Компилятор определяет значение по умолчанию на основе следующих правил:

Назначение Версия Версия языка C# по умолчанию
.NET 8.x C# 12
.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 all C# 7.3

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

Новый шаблон проекта для Visual Studio 2017 добавил latest запись в новые файлы проекта. При обновлении целевой платформы для этих проектов параметр может переопределить значение по умолчанию для новой целевой платформы. Не забудьте удалить latest файл проекта, чтобы убедиться, что проект использует рекомендуемую версию компилятора для целевой платформы. Вы можете обновить целевую платформу, чтобы получить доступ к новым языковым функциям.

Переопределите значение по умолчанию

Если необходимо явно указать версию C#, это можно сделать несколькими способами:

  • Вручную изменить файл проекта.
  • задание языковой версии для нескольких проектов в подкаталоге;
  • Настройте параметр компилятора LangVersion.

Языковая версия в Visual Studio отображается на странице свойств проекта. На вкладке «Сборка » на панели «Дополнительно» отображается выбранная версия.

Чтобы узнать, какую версию языка вы используете в данный момент, поставьте #error version (с учетом регистра) в коде. Это позволяет компилятору вывести ошибку CS8304 с сообщением, содержащим сведения об используемой версии компилятора и текущей выбранной версии языка. Дополнительные сведения см. в статье #error (справочник по C#).

Изменение файла проекта

Версию языка можно задать в файле проекта. Например, если доступ к предварительной версии функций должен быть задан явным образом, можно добавить следующий элемент:

 preview  

Значение preview использует последнюю предварительную версию языка C#, которую поддерживает компилятор.

Настройка нескольких проектов

Чтобы настроить несколько проектов, можно создать файл Directory.Build.props , как правило, в каталоге решения, который содержит элемент. Добавьте следующий параметр в файл Directory.Build.props :

  preview   

Сборки во всех подкаталогах каталога, содержащего этот файл, теперь используют предварительную версию C#. Дополнительные сведения см. в статье Настройка сборки.

Справочник по версиям языка C#

В следующей таблице показаны все текущие версии языка C#. Старые компиляторы могут не понимать каждое значение. Если установить последний пакет SDK для .NET, у вас есть доступ ко всем перечисленным.

Значение Значение
preview Компилятор допускает использование любого допустимого синтаксиса языка из последней предварительной версии.
latest Компилятор принимает синтаксис из последней выпущенной версии компилятора (включая дополнительный номер версии).
latestMajor
или default
Компилятор принимает синтаксис из последней основной версии компилятора.
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).

Указание LangVersion со значением отличается от пропуска параметра LangVersion . default Указание default последней версии языка, который поддерживает компилятор, без учета целевой платформы. Например, создание проекта, предназначенного для .NET 6 из текущей версии Visual Studio 2022, использует C# 10, если LangVersion не указан, но использует C# 11, если LangVersion имеет значение default .

Совместная работа с нами на GitHub

Источник этого содержимого можно найти на GitHub, где также можно создавать и просматривать проблемы и запросы на вытягивание. Дополнительные сведения см. в нашем руководстве для участников.

Jetbrains Rider: как изменить версию c#?

Мне нужна версия языка c# 9.0, но у меня более старая версия. Пользуюсь JetBrains Rider — не смогла найти, как обновить версию языка.

Отслеживать
задан 22 июн 2021 в 17:37
Donna Lizard Donna Lizard
25 6 6 бронзовых знаков
Для .NET 5 по идее C# 9 идет по умолчанию.
22 июн 2021 в 18:07
Это делается через LangVersion в csproj docs.microsoft.com/ru-ru/dotnet/csharp/language-reference/…
22 июн 2021 в 22:57

1 ответ 1

Сортировка: Сброс на вариант по умолчанию

Я воспользовался хитростю и написал в методе

swich (a)

Так как это используется с 9 версии с#, потом возле знака < нажал Alt + Enter и там можно выбрать изменить версию на 9

Оно меняет только для этого проекта

Устранение предупреждений, связанных с языковыми функциями и версиями

В этой статье рассматриваются следующие предупреждения компилятора:

  • CS8022, CS8023, CS8024, CS8025, CS8026, CS8059, CS8107, CS8302, CS8320, CS8370, CS8400, CS8773, CS8936, CS9058: Компонент недоступен. Используйте более новую языковую версию.
  • CS8058: функция экспериментальна.
  • CS8192: указанная версия языка не поддерживается или недопустимая
  • CS8303: указанная языковая версия не может иметь начальные нули
  • CS8304: версия компилятора меньше языковой версии
  • CS1738: спецификации именованных аргументов должны отображаться после указания всех фиксированных аргументов.
  • CS8306: имя элемента Кортежа выводится.
  • CS8314: выражение типа не может обрабатываться шаблоном типа
  • CS8371: атрибуты, предназначенные для полей в свойствах автозапуска, не поддерживаются в языковой версии.
  • CS8401: чтобы использовать @$ вместо $@ интерполированной строки подробной версии, используйте более новую языковую версию.
  • CS8511: выражение типа не может обрабатываться шаблоном типа.
  • CS8627: параметр типа, допускающего значение null, должен быть известен как тип значения или ссылочный тип, не допускающий значения NULL.
  • CS8630: недопустимые параметры, допускающие значение NULL. Использование более новой языковой версии
  • CS8652: модификатор недействителен для этого элемента.
  • CS8704: тип не реализует член интерфейса. Он неявно не может реализовать неявно открытый член.
  • CS8706: тип не может реализовать член интерфейса, так как компонент недоступен в этой версии.
  • CS8904: недопустимая дисперсия: параметр типа должен быть допустимым.
  • CS8912: наследование записи с запечатанным объектом Object.ToString не поддерживается.
  • CS8919: не удается реализовать указанный член интерфейса в типе, так как целевая среда выполнения не поддерживает статические абстрактные члены в интерфейсах
  • CS8929: метод не может реализовать член интерфейса в типе, так как целевая среда выполнения не поддерживает статические абстрактные члены в интерфейсах.
  • CS8957: условное выражение недопустимо в языковой версии, так как общий тип не найден между типами.
  • CS8967: новые строки внутри интерполированной строки, отличной от детализации, не поддерживаются в C#
  • CS9014: ошибка: использование возможно неназначенных свойств. Обновите свойство до автоматического использования по умолчанию.
  • CS9015: ошибка: использование возможно неназначенных полей. Обновление до автоматического обновления поля.
  • CS9016: предупреждение: использование, возможно, неназначенных свойств. Обновите свойство до автоматического использования по умолчанию.
  • CS9017: предупреждение: использование, возможно, неназначенных полей. Обновление до автоматического обновления поля.
  • CS9064: целевая среда выполнения не поддерживает поля ссылок.
  • CS9103: определение в модуле с нераспознанной версией Ref Сейф tyRulesAttribute, ожидающей «11».
  • CS9171: целевая среда выполнения не поддерживает встроенные типы массивов.
  • CS9194: аргумент может не передаваться с ref помощью ключевое слово. Чтобы передать ref аргументы in в параметры, обновите язык версии 12 или более поздней.
  • CS9202: функция недоступна в C# 12.0. Используйте более новую языковую версию
  • CS9211: аргумент diagnosticId атрибута «Экспериментальный» должен быть допустимым идентификатором.

Кроме того, следующие ошибки и предупреждения связаны с изменениями инициализации структуры в последних версиях:

  • CS0171, CS8881: поле резервного копирования для автоматического реализации свойства «name» должно быть полностью назначено перед возвратом элемента управления вызывающему объекту.
  • CS0188, CS8885: объект «этот» нельзя использовать до назначения всем его полям
  • CS0843, CS8880: поле резервного копирования для автоматического реализации свойства «name» должно быть полностью назначено перед возвратом элемента управления вызывающему объекту.
  • CS8305: компонент предназначен только для оценки и подлежит изменению или удалению в будущих обновлениях.
  • CS9204: тип предназначен только для оценки и подлежит изменению или удалению в будущих обновлениях. Отключайте эту диагностику, чтобы продолжить.

Причина всех этих ошибок и предупреждений заключается в том, что компилятор, установленный, поддерживает более новую версию C#, чем выбранная версия проекта. Компилятор C# может соответствовать любой предыдущей версии. Синтаксис можно проверить на более ранней версии C#или потому, что проект должен поддерживать старые библиотеки или среды выполнения.

Существует две возможные причины и три способа устранения этих ошибок и предупреждений.

Обновление целевой платформы

Компилятор определяет значение по умолчанию на основе следующих правил:

Назначение Версия Версия языка C# по умолчанию
.NET 8.x C# 12
.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 all C# 7.3

Если выбранная платформа не соответствует требуемой языковой версии, можно обновить целевую платформу.

Выберите соответствующую версию языка

В файле проекта может быть выбрана более старая целевая платформа. При удалении LangVersion элемента из файла проекта компилятор использует значение по умолчанию, указанное в предыдущем разделе. В следующей таблице показаны все текущие версии языка C#. Вы также можете указать определенную языковую версию, чтобы включить новые функции.

Значение Значение
preview Компилятор допускает использование любого допустимого синтаксиса языка из последней предварительной версии.
latest Компилятор принимает синтаксис из последней выпущенной версии компилятора (включая дополнительный номер версии).
latestMajor
или default
Компилятор принимает синтаксис из последней основной версии компилятора.
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).

Дополнительные сведения о версиях языка, поддерживаемых для каждой версии платформы, см. в статье » Настройка языковой версии » в разделе справочника по языку.

Избегайте обновленной функции

Если необходимо поддерживать старые библиотеки или среды выполнения, может потребоваться избежать использования новых функций.

Включение экспериментальных функций

Диагностика для экспериментальных функций можно отключить для использования экспериментальной функции.

Экспериментальные функции подвержены изменениям. API могут измениться или удалить их в будущих обновлениях. Включение экспериментальных функций — это способ получения отзывов авторов библиотек о идеях и концепциях для будущего развития. Используйте крайнюю осторожность при использовании любой функции, помеченной как экспериментальная.

Вы также можете объявить собственные экспериментальные функции с помощью System.Diagnostics.CodeAnalysis.ExperimentalAttribute. Компилятор выдает CS9211, если идентификатор, используемый для экспериментальной функции, не является допустимым идентификатором.

Критические изменения при инициализации структуры

Все эти ошибки и предупреждения помогают обеспечить struct правильную инициализацию типов перед доступом к их полям. В более ранних версиях C#необходимо явно назначить все поля в структуре в любом конструкторе. Конструктор без параметров инициализирует все поля в значение по умолчанию. В более поздних версиях все конструкторы инициализируют все поля. Либо поле явно задано, задано в инициализаторе полей или установлено значение по умолчанию.

  • CS0171, CS8881: поле резервного копирования для автоматического реализации свойства «name» должно быть полностью назначено перед возвратом элемента управления вызывающему объекту.
  • CS0188, CS8885: объект «этот» нельзя использовать до назначения всем его полям
  • CS0843, CS8880: поле резервного копирования для автоматического реализации свойства «name» должно быть полностью назначено перед возвратом элемента управления вызывающему объекту.

Эту ошибку можно устранить, обновив версию языка до C# 11, каждый struct конструктор инициализирует все поля. Если это не возможно, необходимо явно вызвать конструктор по умолчанию, как показано в следующем примере:

struct S < public int AIProp < get; set; >public S(int i)<> //CS0843 // Try the following lines instead. // public S(int i) : this() // < // AIProp = i; // >> class Test < static int Main() < return 1; >> 

Совместная работа с нами на GitHub

Источник этого содержимого можно найти на GitHub, где также можно создавать и просматривать проблемы и запросы на вытягивание. Дополнительные сведения см. в нашем руководстве для участников.

Настройка интегрированных сред для языков платформы .NET

PrevNext

На данной странице приводятся указания по настройке сред Visual Studio, SharpDevelop и VS Code для выполнения учебных заданий на языках платформы .NET (C#, Visual Basic .NET, F#).

Среда Visual Studio (версии 2017, 2019, 2022)

1. Скачайте и установите среду Visual Studio требуемой версии с сайта Microsoft https://visualstudio.microsoft.com/ru/downloads/. Для корректной работы с программами на языках платформы .NET необходимо установить расширение «Разработка классических приложений .NET», используя программу Visual Studio Installer (для установки новых расширений для одного из имеющихся вариантов Visual Studio надо нажать кнопку Изменить рядом с описанием этого варианта). Если предполагается использовать язык F#, надо дополнительно установить флажок Поддержка языка F# для классических приложений.

2. Запустите программу PT4Setup, входящую в состав электронного задачника (Пуск | Все программы | Programming Taskbook 4 | PT4 Setup), и убедитесь, что задачник обнаружил среды Microsoft Visual C#, Microsoft Visual Basic .NET и Microsoft Visual F# соответствующей версии (2017, 2019 или 2022). Если путь к исполняемому файлу devenv.exe не найден задачником, то укажите его, нажав кнопку Обзор. При стандартной установке данный файл располагается в каталоге C:\Program Files\Microsoft Visual Studio\20XX\Community\Common7\IDE или C:\Program Files (x86)\Microsoft Visual Studio\20XX\Community\Common7\IDE , где каталог 20XX соответствует номеру версии (2017, 2019 или 2022). Закройте программу PT4Setup.

В результате описанных действий задачник будет настроен для использования в среде Visual Studio для языков C#, Visual Basic .NET, F#.

Примечание. С помощью программы PT4Setup можно настроить дополнительный параметр для среды Visual Studio: версию целевой платформы .NET Framework, которая будет использоваться при компиляции программы в этой среде. По умолчанию задачник использует последнюю версию, обнаруженную на компьютере, однако в некоторых ситуациях версия может быть определена неверно. Это приведет к тому, что при загрузке созданной заготовки проекта в среду Visual Studio будет выведено сообщение о том, что проект настроен на целевую платформу, отсутствующую на данном компьютере (и будет предложено изменить платформу на одну из доступных):

Чтобы подобное сообщение не возникало при загрузке каждого созданного проекта, следует в программе PT4Setup указать одну из доступных платформ в настройках среды Visual Studio, используя кнопку Дополнительная настройка (F9). Выбрать можно только версию целевой платформы, начиная с 4.7, поскольку именно эта версия является первой версией платформы .NET Framework, обеспечивающей дополнительные возможности языка C# версии 7.0 (в частности, удобные средства для работы с кортежами типа ValueTuple). По следующей ссылке можно скачать программу-установщик ndp47-devpack-kb3186612-enu.exe платформы .NET Framework версии 4.7. Версию целевой платформы .NET Framework можно настраивать независимо для разных версий среды Visual Studio (2017, 2019, 2022) и разных языков (C#, Visual Basic .NET, F#).

Среда SharpDevelop для языков C# и F#

1. Скачайте и установите среду SharpDevelop (https://sourceforge.net/projects/sharpdevelop/). Для успешного запуска программы установки среды SharpDevelop может потребоваться пакет Microsoft Visual C++ 2008 SP1 Redistributable Package vcredist_x86.exe. При необходимости установите дополнительные программные компоненты, указанные в файле doc\Dependencies.php системного каталога данной среды, необходимые для успешной компиляции проектов. В частности, требуется наличие пакета Microsoft Windows SDK for Windows 7 and .NET Framework 4.

2. Проверьте, что после установки требуемых компонентов можно создать и откомпилировать стандартные проекты для языков C# и F# (команда меню File | New | Project, проект Console Application из группы C# | Windows Application и проект F# Console Application из группы F#).

3. Запустите программу PT4Setup, входящую в состав электронного задачника (Пуск | Все программы | Programming Taskbook 4 | PT4 Setup), и убедитесь, что задачник обнаружил среды SharpDevelop (C#) и SharpDevelop (F#). Если путь к исполняемому файлу SharpDevelop.exe не найден задачником, то укажите его, нажав кнопку Обзор. При стандартной установке данный файл располагается в каталоге C:\Program Files (x86)\SharpDevelop\5.1\bin . Закройте программу PT4Setup.

В результате описанных действий задачник будет настроен для использования в среде SharpDevelop для языков C# и F#.

Следует заметить, что эта среда не обновлялась с 2016 года, поэтому она использует версию 4.0 платформы .NET Fremework и версию 5.0 языка C#. В частности, в этой версии недоступны возможности, связанные с использованием кортежей (тип ValueTuple), а также с интерполированными строками.

Среда VS Code для языка C#

1. Установите среду VS Code https://code.visualstudio.com/download#, вариант Windows, 64 bit, User Installer или System Installer (при выборе System Installer среда устанавливается в каталоге C:\Program Files , при выборе User Installer — в подкаталоге каталога, связанного с текущим пользователем, например, C:\Users\\AppData\Local\Programs\Microsoft VS Code ).

2. Установите платформу .NET Core 3.1 (https://dotnet.microsoft.com/download/dotnet/3.1, вариант Windows, x64). Требуемый установщик dotnet-sdk-3.1.416-win-x64.exe можно быстро загрузить по следующей ссылке. В ОС Windows 11 может потребоваться также дополнительно установить пакет .NET Core 3.1 Runtime; его установщик dotnet-runtime-3.1.23-win-x64.exe доступен по следующей ссылке.

3. Запустите программу PT4Setup, входящую в состав электронного задачника (Пуск | Все программы | Programming Taskbook 4 | PT4 Setup), и убедитесь, что задачник обнаружил среду Visual Studio Code (C#). Если путь к исполняемому файлу Code.exe не найден задачником, то укажите его, нажав кнопку Обзор. Закройте программу PT4Setup.

4. Запустите программу PT4Load, входящую в состав электронного задачника, в ее окне вызовите контекстное меню (нажав правую кнопку мыши) и выберите в нем пункт Visual Studio Code (C#). В поле Задание (или Task при использовании английского интерфейса) укажите имя какого-либо задания (например, Begin1) и нажмите клавишу [Enter] или кнопку Загрузка (Load). Созданная заготовка (файл MyTask.cs) должна загрузиться в редактор VS Code. При первой загрузке cs-файла редактор VS Code может предложить установить расширение (extension) для языка C#. В этом случае достаточно нажать кнопку Install:

Если указанное выше окно не появится, то установить расширение для языка C# можно, выполнив стандартные действия для установки новых расширений: отобразите в левой части окна VS Code панель Extensions со списком доступных расширений (нажав кнопку или комбинацию клавиш [Ctrl]+[Shift]+[X]), выберите из списка расширений вариант C# (Microsoft) и нажмите связанную с ним кнопку Install. Чтобы отобразить список расширений для языка C#, достаточно ввести текст C# в поле поиска в верхней части панели Extensions.

После установки данного расширения появится возможность запускать программы C# из среды VS Code нажатием клавиши [F5].

В результате описанных действий задачник будет настроен для использования в среде VS Code для языка C#.

Примечание. При попытке откомпилировать и запустить программу на языке C# из среды VS Code без предварительной установки нужного расширения, будет выведено окно с сообщением об ошибке, которое надо закрыть, нажав кнопку Cancel (устанавливать указанное в этом окне расширение не требуется, так как описанное ранее расширение C# (Microsoft) включает все необходимые компоненты).

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *