С выходом C# 7, компания Microsoft изменила подход к выпуску новых версий языка: стали доступны минорные версии, которые понемногу расширяют его возможности. Использовать их или ждать выхода следующей мажорной версии – решать самим разработчикам. Поэтому по умолчанию поддержка промежуточных версий выключена. |
Visual Studio 2019.3 (версия 16.3)
С 3 обновлением Visual Studio 2019 стала доступна 8 версия языка C#, которая требует поддержку со стороны платформы. Поэтому Visual Studio 2019 стала автоматически выставлять доступную версию языка в зависимости от выбранной в качестве цели платформы.
- .NET Framework (все версии) – C# 7.3
- .NET Standard 2.0 и предыдущие – C# 7.3
- .NET Standard 2.1 – C# 8
- .NET Core 2.x и предыдущие – C# 7.3
- .NET Core 3.x – C# 8
- .NET 5 и новее – C# 9
При этом выбор версии языка в диалоге Advanced Build Setting отключен и дополнен поясняющим сообщением:
Единственный способ изменить версию языка – самостоятельно установить её в настройках проекта. Для этого необходимо вручную отредактировать соответствующий файл .csproj, добавив в него или изменить значение следующего свойства:
<PropertyGroup>
<LangVersion> версия языка </LangVersion>
</PropertyGroup>
Расположение этого свойства зависит файла проектка, который, в свою очередь, зависит от платформы на которую нацелен проект. Рассмотрим на примере установки 9 версии языка:
- .NET Core / .NET Standard / .NET 5 и новее
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>netcoreapp2.1</TargetFramework>
<LangVersion>9.0</LangVersion>
</PropertyGroup>
</Project>
<?xml version="1.0" encoding="utf-8"?>
...
<PropertyGroup>
...
<TargetFrameworkVersion>v4.8</TargetFrameworkVersion>
<LangVersion>9.0</LangVersion>
...
</PropertyGroup>
...
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
</Project>
В качестве номера версии можно использовать следующие значения:
- номер необходимой версии языка в формате Major.Minor. Например: 9.0 – настраивает проект на использование указанной версии языка.
- default – разрешает использовать последнюю доступную для платформы проекта мажорную версию.
- latest – позволит использовать все новые минорные и мажорные версии, которые станут доступны для платформы проекта автоматически по мере их выхода.
Что лучше выбрать? То что больше подходит каждому разработчику или команде в зависимости от предпочтений и условий работы.
Обратите внимание, что Visual Studio создает свой вариант свойства для каждой конфигурации в.NET Framework проектах. Если оно уже было когда-то изменено через интерфейс Visual Studio, то в файле проекта будут несколько записей вида:
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|AnyCPU'">
<LangVersion>7.0</LangVersion>
</PropertyGroup>
Visual Studio 2019 до 3 обновления и Visual Studio 2017
Для использования минорных версий языка c Visual Studio 2017 необходимо обновить ее до версии 15.3 (Update 3) или выше. После этого появится возможность установить какая версия языка будет использоваться в проекте.
Необходимо отметить, что данная настройка находится на уровне проектов. Поэтому если в решении (solution) больше одного проекта, то каждый из них настраивается индивидуально. При этом решение может содержать проекты с различными настройками версии языка.
Свойства проекта
Чтобы открыть диалог с настройкой доступных версий, необходимо в свойствах проекта на закладке “Build” нажать на кнопку "Advanced…".
Файл проекта .csproj
Аналогично описанию для Visual Studio 2019.3.
Код на новой версии языка
Последний вариант – просто написать код, который использует возможности новой версии. При этом Visual Studio сама предложит установить эту версию или вариант latest в качестве версии языка для проекта.