Какие версии C# соответствуют каждой версии .NET и Visual Studio?
Соответствие версий C#, .NET и Visual Studio
Вы столкнулись с классической проблемой всех C#-разработчиков. Microsoft действительно изменила схему нумерации после выхода .NET Core, но путаницу можно легко устранить, запомнив одно простое правило: версия C# привязана к версии компилятора, который поставляется с конкретной версией Visual Studio или SDK .NET. При этом версия языка не всегда совпадает с версией платформы (фреймворка).
Основная таблица соответствия
Вот ключевое соответствие, которое нужно запомнить (актуально на 2024 год):
- C# 1.0 — .NET Framework 1.0 (VS 2002)
- C# 2.0 — .NET Framework 2.0 (VS 2005)
- C# 3.0 — .NET Framework 3.5 (VS 2008)
- C# 4.0 — .NET Framework 4.0 (VS 2010)
- C# 5.0 — .NET Framework 4.5 (VS 2012)
- C# 6.0 — .NET Framework 4.6 (VS 2015)
- C# 7.0-7.3 — .NET Framework 4.6.2+ / .NET Core 2.x (VS 2017)
- C# 8.0 — .NET Core 3.x / .NET Standard 2.1 (VS 2019 v16.3+)
- C# 9.0 — .NET 5 (VS 2019 v16.8+)
- C# 10.0 — .NET 6 (VS 2022)
- C# 11.0 — .NET 7 (VS 2022 v17.4+)
- C# 12.0 — .NET 8 (VS 2022 v17.8+)
Важный нюанс: .NET Framework vs .NET (Core)
Здесь кроется главная ловушка. Начиная с C# 7.0, Microsoft разделила возможности языка и возможности платформы. .NET Framework 4.8 (последняя версия) поддерживает максимум C# 7.3. Да, вы можете установить Visual Studio 2022 и писать код, но компилятор всё равно будет ограничен версией 7.3 для проектов .NET Framework. Это связано с тем, что новые фичи C# (например, records из C# 9.0) требуют типов из .NET Core/.NET 5+.
Ваш пример с record в .NET Framework 4.8 не скомпилируется, даже если вы используете последнюю Visual Studio. Вам нужно переключиться на .NET 5+.
Как проверить, какая версия C# используется?
Есть несколько способов:
- Через файл проекта: откройте
.csprojи найдите элемент<LangVersion>. Если его нет, используется версия по умолчанию (зависит от целевой платформы). - Через Visual Studio: ПКМ по проекту → Properties → Build → Advanced → Language Version.
- Программно: используйте директиву
#error version— компилятор выдаст ошибку с указанием версии.
Пример настройки в .csproj
Если вы хотите принудительно задать версию C# (например, использовать C# 10 в проекте .NET 6):
<PropertyGroup>
<TargetFramework>net6.0</TargetFramework>
<LangVersion>10.0</LangVersion>
</PropertyGroup>
Рекомендация
Для новых проектов используйте .NET 6+ (LTS версии) — это даст вам доступ к C# 10+ и всем современным фичам. Если вы поддерживаете легаси на .NET Framework, смиритесь с C# 7.3. Никогда не пытайтесь использовать фичи из более новой версии C# в старом фреймворке — это приведёт к ошибкам компиляции.
<<Дополнение: Как работает обратная совместимость
Хочу добавить важный момент: версии C# обратно совместимы, но только в пределах одной мажорной ветки компилятора. Это значит, что код, написанный на C# 7.0, будет работать в C# 12.0, но не наоборот.
Также есть тонкость с .NET Standard. Если ваша библиотека нацелена на .NET Standard 2.0, вы можете использовать C# 7.3 (максимум). Для .NET Standard 2.1 — C# 8.0. Это ограничение важно для библиотек, которые должны работать и на .NET Framework, и на .NET Core.
И последний совет: не зацикливайтесь на версиях языка. В 99% случаев компилятор сам подберёт правильную версию на основе вашего TargetFramework. Если вы используете .NET 8, вы автоматически получаете C# 12. Просто обновляйте SDK и Visual Studio до последних LTS-версий.
Ответов пока нет.
Войдите чтобы оставить ответ
Блоги