Andrey on .NET | Задаем версию C# в Visual Studio

Задаем версию C# в Visual Studio

C# logoС выходом 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 отключен и дополнен поясняющим сообщением:

C# version auto select

Единственный способ изменить версию языка – самостоятельно установить её в настройках проекта. Для этого необходимо вручную отредактировать соответствующий файл .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>
  • .NET 4.8 и старше
<?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…".

Project properties

Файл проекта .csproj

Аналогично описанию для Visual Studio 2019.3.

Код на новой версии языка

Последний вариант – просто написать код, который использует возможности новой версии. При этом Visual Studio сама предложит установить эту версию или вариант latest в качестве версии языка для проекта.

Visual Studio 2017 C# version selector

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