Каковы правильные номера версий для C#?


1,927

Каковы правильные номера версий для C#? Что вышло, когда? Почему я не могу найти ответы на вопросы о C# 3.5?

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

+53

Это один из хорошего источника, чтобы понять все. http://en.wikipedia.org/wiki/C_Sharp_(programming_language) 02 дек. 122012-12-02 08:21:54

  0

Не следует ли, чтобы второй абзац был в комментарии вместо вопроса, так как он не является частью вопроса 11 янв. 172017-01-11 17:48:31

+9

@TankorSmash: Я думаю, что это достаточно важно, поскольку контекст вопроса о том, что его стоит сохранить там, где он есть. ИМО, конечно. 11 янв. 172017-01-11 17:53:28

  0

@TankorSmash, так как это вопрос с автоответчиком, представляется целесообразным, чтобы объяснение (второй абзац) было там и не было потеряно в комментариях. 13 ноя. 172017-11-13 23:17:37

2,238

Эти версии C# известно о в момент написания этой статьи:

  • C# 1,0 выпущен с .NET 1.0 и VS2002 (январь 2002)
  • C# 1,2 (достаточно причудливо); выпущен с .NET 1.1 и VS2003 (апрель 2003 г.). Первая версия для звонка Dispose на IEnumerator с выполненными IDisposable. Несколько других мелких особенностей.
  • C# 2.0 выпущен с .NET 2.0 и VS2005 (ноябрь 2005 г.). Основные новые функции: дженерики, анонимные методы, типы с нулевым значением, блоки итераторов
  • C# 3.0 выпущен с .NET 3.5 и VS2008 (ноябрь 2007 г.). Основные новые функции: лямбда-выражения, методы расширения, деревья выражений, анонимные типы, неявное типирование (var), выражения запросов
  • C# 4.0 выпущен с .NET 4 и VS2010 (апрель 2010 г.). Основные новые функции: поздняя привязка (dynamic), общая дисперсия делегата и интерфейса, дополнительная поддержка COM, именованные аргументы, тип данных кортежа и необязательные параметры
  • C# 5.0 выпущен с .NET 4.5 и VS2012 (август 2012 г.). Major features: асинхронное программирование, атрибуты информации об абоненте. Нарушение изменения: loop variable closure.
  • C# 6.0 выпущен с .NET 4.6 и VS2015 (июль 2015 г.). Реализовано Roslyn. Особенности: инициализаторы для автоматически реализуемых свойств, использование директив для импорта статических элементов, фильтры исключений, инициализаторы элементов, await в catch и finally, расширение Add методов в инициализаторах коллекции.
  • C# 7.0 выпущен с .NET 4.7 и VS2017 (март 2017) Основные новые функции: кортежи, реф местных и иое возвращение, сопоставление с образцом (в том числе на основе шаблонов отчетности коммутатора), встроенные out декларации параметров, локальные функции, бинарные литералы, разделители цифр и произвольные асинхронные возвращения.
  • C# 7.1 выпущен с VS2017 v15.3 (август 2017) Незначительные новые возможности: async main, tuple member name inference, default expression, pattern matching with generics.
  • C# 7.2 выпущен с VS2017 v15.5 (ноябрь 2017) Незначительные новые возможности: private protected access modifier, Span<T>, aka interior pointer, aka stackonly struct, everything else.

Нет такой вещи, как C# 3.5 - причина путаницы здесь в том, что C# 3.0 присутствует в .NET 3.5. Однако язык и инфраструктура версируются независимо друг от друга - как и CLR, который находится в версии 2.0 для .NET с 2.0 по 3.5, .NET 4, предлагая CLR 4.0, несмотря на пакет обновлений. CLR в .NET 4.5 имеет различные улучшения, но версия неясна: в некоторых местах ее можно отнести к CLR 4.5 (this MSDN page), но свойство Environment.Version по-прежнему сообщает 4.0.xxx ,

Более подробная информация о взаимоотношениях между языком, версией исполнения и версией рамок доступна на сайте C# in Depth. Сюда входит информация о том, какие функции C# 3.0 вы можете использовать при настройке .NET 2.0. (Если кто-то хочет привести весь контент в этот вики-ответ, они могут быть приглашены.)

С 3 мая 2017 года команда языка C# создала историю версий и функций C# в своем реестре github: Features Added in C# Language Versions

+1

Документация MSDN относится к ней как CLR 4.5. По крайней мере, по этой ссылке: http://msdn.microsoft.com/en-us/library/bb822049.aspx. Хотя .NET Framework 4.5 является обновлением на месте .NET Framework 4, базовый номер версии CLR называется CLR 4.5. 17 май. 132013-05-17 06:36:46

  0

@cvraman: Я просмотрел эти письма, и они не так ясны, как могут быть. Надеюсь, мое редактирование - хороший компромисс - пожалуйста, проверьте его и предложите улучшения. 17 май. 132013-05-17 07:19:52

+7

@cvraman: У меня только что было письмо от кого-то, кто отметил, что страница теперь изменилась и не относится к ней как CLR 4.5. Разве это не развлечение? :) 01 авг. 132013-08-01 08:48:05

  0

Yup. Новая страница относится к базовой версии CLR как 4.0. Я думаю, редактирование (к исходному ответу) можно удалить. Версии - это весело, если все сделано правильно. 02 авг. 132013-08-02 18:27:59

+4

@cvraman: Я собираюсь оставить его на данный момент, так как я сильно подозреваю, что * некоторые * места будут по-прежнему ссылаться на него как на 4.5, черт его ... 02 авг. 132013-08-02 18:39:06

+5

Кому бы ни предлагалось включить одновременные коллекции: это список * язык * особенности, нет * рама * особенности. Обратите внимание на отсутствие упоминания WPF и т. Д. 25 мар. 142014-03-25 11:52:46

  0

Интересные мелочи (и потенциально полезные): вы можете настраивать разные версии фреймворка/языка, чем приведенные выше пары по умолчанию (например, если у вас есть компилятор C# 5.0+, например, что отправлено в VS2012 + вы можете использовать [атрибуты информации об абоненте] (http://www.thomaslevesque.com/2012/06/13/using-c-5-caller-info-attributes-when-targeting-earlier-versions-of -the-net-framework /) языка C# 5.0 при таргетинге на .NET 4.0, например.) 18 июн. 152015-06-18 16:05:28

  0

Хм, поэтому версия CLR для .NET 4.6 по-прежнему называется 4.0? Я ожидал, что он изменится с учетом изменений в .NET и C#, вы знаете RyuJIT, Roslyn, .NET Native и т. Д. 20 авг. 152015-08-20 09:52:05

+1

@nawfal: Roslyn не имеет к этому отношения - и родной .NET несколько отчасти. Но в принципе, да, я считаю, что это все равно 4. 20 авг. 152015-08-20 09:53:38

  0

@JonSkeet Я знаю, что Roslyn - это просто компилятор C#, но я предположил, что изменения, которые, должно быть, перешли на язык, и компилятор заставил бы изменения дизайна в CLR, а также модульную платформу .NET framework , В любом случае, хорошо знать, спасибо .. 20 авг. 152015-08-20 09:57:36

+1

@nawfal: Никакие изменения языка не требуют изменений в CLR. 20 авг. 152015-08-20 10:00:23

+38

AFAIK, единственная стабильная и надежная версия для C# называется Jon Skeet ... остальное - это просто цифры: D 02 сен. 152015-09-02 08:16:24

  0

Я пытаюсь выяснить, какая из этих версий Unity включена, но у меня нет лучшего удачи. 14 окт. 152015-10-14 14:51:03

+5

@alper: Unity не будет конкретной версией C#, а также конкретной версией платформы .NET и/или временем выполнения. IIRC, это эффективно на CLR v2, но может иметь некоторые аспекты .NET 3.5. 14 окт. 152015-10-14 15:26:13

  0

Но оба из них сильно влияют на доступные мне возможности языка C#? Привкус C# в Unity довольно устарел и сломан, и, похоже, он вряд ли сблизится в ближайшее время. 15 окт. 152015-10-15 12:38:05

  0

@alper: Ну, вроде. Некоторые функции языка зависят от поддержки платформы, но многие этого не делают. Например, большинство функций на C# 6 отлично работают на .NET 2.0. Я все еще надеюсь, что Unity в какой-то момент обновит версию своего исполнения. 15 окт. 152015-10-15 12:40:38

  0

Что мне до сих пор неясно, какая версия C# я использую, если сегодня создаю проект .NET 4? Я подозреваю, что он выше, чем C# 4, потому что ReSharper предупреждает меня о нарушении с закрытием для более старых версий C#! 19 май. 162016-05-19 00:47:00

+1

@markmnl: проект обычно не имеет * указанного номера версии C# ... вы можете открыть один и тот же проект в разных версиях Visual Studio и найти один и тот же код в одном, но не работать в другом. Вы * можете * ограничить версию C#, хотя это делается на синтаксической, а не на семантической основе. Но да, если вы создаете проект, ориентированный на .NET 4 в Visual Studio 2015, вы можете использовать большинство функций C# 6 ... 19 май. 162016-05-19 05:36:19

+1

@JonSkeet Я знаю, что речь идет о версиях на C#, но не стоит ли добавлять примечание к VS 2013? Для справки: 'C# 5.0, VS2013, .NET 4.5.1, октябрь 2013' 21 июл. 162016-07-21 12:36:08

  0

@nawfal: Я так не думаю, нет - я думаю, что довольно ясно, что VS2013, выпущенный между VS2012 и VS2015, все еще будет C# 5. Если кто-то хочет версию истории версий VS, это легко найти в Википедии ... этот вопрос направлен на то, чтобы помочь людям использовать правильный номер версии для C#. Добавление большего текста, который * не помогает * на этом фронте, не будет хорошей идеей ИМО. 21 июл. 162016-07-21 12:39:45

  0

@JonSkeet Хорошо ... Я закончил здесь поиск версий VS, чтобы получить их соответствующие версии компилятора. Я сделаю еще один ответ. 21 июл. 162016-07-21 12:47:41

+1

Каковы правильные версии для ядра .NET? 09 сен. 162016-09-09 06:40:19

+1

@ DannyChen: Я не уверен, что вы подразумеваете под этим - вы можете использовать любую версию C# для .NET Core, а новые версии C# не были выпущены одновременно с выпуском .NET Core ... 09 сен. 162016-09-09 06:55:35

  0

@JonSkeet подходит к теме о версиях C#, а не версиях .NET. Моя вина. 09 сен. 162016-09-09 07:20:00

  0

См. Https://www.codeproject.com/Articles/1156167/Csharp-Version-Introduction-to-new-language-featur для хорошего вступления на предстоящий C# 7.0. 12 дек. 162016-12-12 13:43:50

  0

Я знаю, что это не задано в исходном вопросе, но это будет очень полезно: можете ли вы добавить канонический источник информации для каждой версии C#? Например. Существует «C# 5 Language Specification», который можно найти в Google. Но где C# 6 задокументирован? 12 янв. 172017-01-12 10:42:19

  0

@JonSkeet - какая версия VS включает v7.0? 2015 (возможно, с исправлением)? 2017? Это похоже на последнее, но мне сложно сбивать эту информацию. 10 апр. 172017-04-10 13:40:06

  0

@ rory.ap: VS2017. 10 апр. 172017-04-10 13:41:58

  0

@JonSkeet У меня есть только обновление VS2015. Можно ли попробовать C# 7 с ним? 28 апр. 172017-04-28 06:36:09

+1

@OgrishMan: Нет - вам нужно будет установить VS2017. (Или Visual Studio Code, или последний .NET Core SDK.) 28 апр. 172017-04-28 06:47:05

  0

@Denis: VS2017 сделал * не * запуск с .NET 4.7. .NET 4.7 (по-видимому) включен в обновление VS2017 (хотя я не вижу его в моем обновленном окне ...), но это было в апреле 2017 года, тогда как VS2017 с C# 7.0 запущен в марте без .NET 4.7. 15 май. 172017-05-15 15:34:37

  0

Является ли .NET Core в этом? 09 окт. 172017-10-09 17:44:58

  0

@MacGyver Ум, вроде. .NET Core SDK поставляется с компилятором, поэтому я могу потенциально обновить его таким образом, но вы все равно можете указать версию компилятора в своем файле проекта. 09 окт. 172017-10-09 17:47:34

  0

Я исправляю, что проиндексированные члены были сняты с C# 6? 14 янв. 182018-01-14 00:34:42

  0

@Gusdor: Нет, 'новый словарь <string, int> {[" x "] = 5}' действителен. 14 янв. 182018-01-14 08:53:31

  0

@JonSkeet Oh. Я думал, что это называется «инициализаторы элементов». Мне лучше пойти и прочитать документы: D 14 янв. 182018-01-14 09:30:16

  0

@Gusdor: Я не заметил, что у меня тоже есть инициализаторы элементов. Будет проверяться позже. 14 янв. 182018-01-14 09:31:33

  0

@Gusdor: Теперь я снова посмотрел, часть '$ x' действительно исчезла, и я считаю, что это будет« проиндексированные члены ». Удалит из ответа 14 янв. 182018-01-14 14:10:49

  0

См. [Что представляет собой экспериментальная функция «проиндексированные элементы»?] (Https://stackoverflow.com/q/22871426/2157640) в [SO] для описания снятой функции C# 6.0 «проиндексированные элементы »и ссылки на дополнительную информацию об отзыве. 16 янв. 182018-01-16 17:52:23

  0

@Palec: Да, это именно тот, на который я смотрел :) 16 янв. 182018-01-16 18:00:42


225

Самая большая проблема при работе с номерами версий C# заключается в том, что она не привязана к версии .NET Framework, которая, по-видимому, связана с синхронизированными релизами между Visual Studio и .NET Framework.

Версия C# фактически связана с компилятором, а не с каркасом. Например, на Visual   Studio   2008 вы можете написать C# 3.0 и целевую .NET Framework 2.0, 3.0 и 3.5. Номенклатура C# 3.0 описывает версию синтаксиса кода и поддерживаемые функции таким же образом, что ANSI C89, C90, C99 описания синтаксиса кода/функции для C.

Посмотрите на Mono, и вы увидите, что Mono 2,0 (в основном реализована версия 2.0 .NET Framework из спецификаций ECMA) поддерживает синтаксис и функции C# 3.0.

+24

Так верно. Но я бы не назвал это «проблемой», а скорее «преимуществом». Моя компания создает 2.0-приложение, используя все потрясающие возможности C# 4.0 - любите его. 10 июл. 132013-07-10 11:51:53

+2

Короче говоря, версии C# привязаны к компилятору, а не к .net framework. 31 авг. 172017-08-31 05:54:45


61

VERSION_____ Спецификация языка ______ MICROSOFT COMPILER

C# 1.0/1.2____ декабря 2001 ?/2003 ?___________ январь 2002 ?

C# 2,0 _______September 2005________________ ноября 2005 ?

C# 3,0 _______May 2006_____________________ ноября 2006 ?

C# 4.0 _______March 2009 (draft)______________ апреля 2010 ?

C# 5.0; выпущен в .NET 4.5 в августе 2012 года

C# 6.0; выпущен в .NET 4.6 2015

C# 7.0; выпущен в .NET 4.7 2017

+6

Откуда вы получили спецификацию языка C# 2.0 в декабре 2002 года? Аналогично C# 4 в июне 2006 года? Вы уверены, что не имеете в виду издания ECMA, которые совершенно разные? 07 май. 102010-05-07 11:28:31

+4

просто сослаться на ссылку http://en.wikipedia.org/wiki/C_Sharp_(programming_language) 07 май. 102010-05-07 11:33:04

+172

Ах, хорошо, если это в Википедии, это _должны_ правы :-) 11 май. 102010-05-11 04:31:13

+104

@paxdiablo То же самое касается и переполнения стека , :) Это все о сообществе ... 21 авг. 122012-08-21 23:02:50


155
  • C# 1.0 с Visual Studio.NET

  • C# 2.0 с Visual Studio 2005

  • C# 3.0 с Visual Studio 2008

  • C# 4.0 с Visual Studio 2010

  • C# 5.0 с Visual Studio 2012

  • C# 6.0 с Visual Studio 2015

  • C# 7.0 с Visual Studio 2017

+11

C# 5 * CTP * устанавливается поверх Visual Studio 2010. У нас нет доказательств того, что окончательная версия сделает это. Имейте в виду, что LINQ CTP также установлен на Visual Studio 2005. 31 дек. 102010-12-31 13:27:52

+3

Да, согласен, если не появится следующая версия Visual Studio, Microsoft предпримет инициативу для этого. 31 дек. 102010-12-31 13:37:23


24

Сравнивая статьи MSDN "What's New in the C# 2.0 Language and Compiler" и "What's New in Visual C# 2005", можно сделать вывод, что " C# major_version.minor_version "придумано в соответствии с нумерацией версий компилятора.

Существует C# 1.2 corresponding to .NET 1.1 and VS 2003, а также имеет название Visual C# .NET 2003.

Но дальше Microsoft перестала увеличивать номера младшей версии (после точки) или иметь их отличные от нуля, 0. Хотя следует отметить, что C#, соответствующий .NET 3.5, указан в msdn.microsoft.com как "Visual C# 2008 Service Pack 1".

Существует два параллельных ввода: по основной нумерации версий .NET/компилятора и нумерации Visual Studio.

C# 2.0 является синонимом Visual C# 2005

C# 3.0 соответствует (или, что более правильно, может предназначаться) к:

+2

Нет, C#, соответствующая .NET 3.5, называется «Visual C# 2008», если вы действительно хотите использовать эту нумерацию. Функции C# 3.0 были представлены в «Visual C# 2008», поэтому на странице, с которой вы связаны, находятся под рубрикой «Что нового в исходной версии Visual C# 2008». Использование номеров версий Visual Studio является плохой идеей в целом, хотя, поскольку это имеет мало смысла, например, когда вы работаете с Mono. Язык C# имеет хорошо определенные номера версий ... мы знаем, какой продукт Visual C# изначально представил версию C#, но это не одно и то же. 21 май. 132013-05-21 10:22:16

  0

@JonSkeet, нет, не знаю. Хотелось попросить вас (и другого ответчика) обновить ваш ответ, но, поскольку мой комментарий стал слишком длинным, я решил тогда ответить в качестве ответа. Спасибо за вашу информацию 21 май. 132013-05-21 13:32:23

  0

Я не думаю, что C# 3.0 может работать на VS 2005. 21 июл. 162016-07-21 14:22:34


33

Вы можете проверить последние версии C# here C# Versions


30

C# Version History:

C# является простой и мощный объектно-ориентированный язык программирования, разработанный компанией Microsoft.

C# сильно изменился с момента его первого выпуска в 2002 году. C# была представлена ​​с .NET Framework 1.0.

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

Enter image description here

И последняя версия C# доступна в C# Versions.


140

Это то же самое, что и большинство ответов здесь, но в табличном виде для удобства, и для полноты версии Visual Studio и .NET.

╔════════════╦════════════╦══════════════╦═════════════╦══════════════╗ 
║ C# version ║ VS version ║ .NET version ║ CLR version ║ Release date ║ 
╠════════════╬════════════╬══════════════╬═════════════╬══════════════╣ 
║ 1.0  ║ 2002 ║ 1.0  ║  1.0  ║ Feb 2002 ║ 
║ 1.2  ║ 2003 ║ 1.1  ║  1.1  ║ Apr 2003 ║ 
║ 2.0  ║ 2005 ║ 2.0  ║  2.0  ║ Nov 2005 ║ 
║   ║   ║ 3.0  ║  2.0  ║ Nov 2006 ║ 
║ 3.0  ║ 2008 ║ 3.5  ║  2.0  ║ Nov 2007 ║ 
║ 4.0  ║ 2010 ║ 4.0  ║  4  ║ Apr 2010 ║ 
║ 5.0  ║ 2012 ║ 4.5  ║  4  ║ Aug 2012 ║ 
║ 5.0  ║ 2013 ║ 4.5.1  ║  4  ║ Oct 2013 ║ 
║   ║   ║ 4.5.2  ║  4  ║ May 2014 ║ 
║ 6.0  ║ 2015 ║ 4.6  ║  4  ║ Jul 2015 ║ 
║   ║   ║ 4.6.1  ║  4  ║ Nov 2015 ║ 
║   ║   ║ 4.6.2  ║  4  ║ Aug 2016 ║ 
║ 7.0  ║ 2017 ║    ║    ║ Mar 2017 ║ 
║   ║   ║ 4.7  ║  4  ║ May 2017 ║ 
║ 7.1  ║ 2017(v15.3)║    ║    ║ Aug 2017 ║ 
║   ║   ║ 4.7.1  ║  4  ║ Oct 2017 ║ 
║ 7.2  ║ 2017(v15.5)║    ║    ║ Dec 2017 ║ 
╚════════════╩════════════╩══════════════╩═════════════╩══════════════╝ 
+4

Выглядит ужасно на мобильных устройствах. Urgh! 11 апр. 172017-04-11 15:00:52

  0

@ Happypig375 не так страшен для меня. Может быть, попробуйте вариант полного сайта или с помощью приложения stackexchange. 13 апр. 172017-04-13 05:52:05

+2

Если выглядит нормально в приложении stackoverflow 26 май. 172017-05-26 18:55:06

+1

Хорошее резюме, только то, что я искал, thanx. 21 дек. 172017-12-21 14:55:23

+1

Что относительно версий .NET Core? 26 янв. 182018-01-26 12:14:23

  0

@ Pac0. Разработка .NET Core практически не зависит от разработки VS и трудно отслеживать (будучи открытым исходным кодом). Фактически все VS, .NET и .NET Core выполняются довольно быстро. 06 фев. 182018-02-06 13:15:02


28

Я обобщил большинство версий этой таблицы. Единственными недостающими должны быть версии ASP.NET Core. Я также добавил различные версии ASP.NET MVC.

Обратите внимание, что ASP.NET 5 был ребрендирован как ASP.NET Core 1.0, а ASP.NET MVC 6 был переименован как ASP.NET Core MVC 1.0.0. Я считаю, что это изменение произошло примерно в январе 2016 года.

Я включил дату выпуска ASP.NET 5 RC1 в таблицу, но я еще не включил ядро ​​ASP.NET 1 и другие основные версии, потому что я мог Не найдено точных дат выпуска. Вы можете прочитать больше о датах выпуска относительно ASP.NET Ядра здесь: When is ASP.NET Core 1.0 (ASP.NET 5/vNext) scheduled for release?

Version

  0

Я не уверен, что наличие MVC в одной таблице полезно, если честно ... это просто на отдельном расписании выпуска, эффективно. 04 янв. 172017-01-04 07:05:14

  0

@Jon Это правда, просто добавив его сюда для тех, кому это может понадобиться, потому что я попытался выяснить корректирующие даты выпуска .NET frameworks, чтобы я лучше понял всю историю версий. 04 янв. 172017-01-04 07:22:38