¿Cuáles son los números de versión correctos para C #?

2534

¿Cuáles son los números de versión correctos para C #? ¿Qué salió cuando? ¿Por qué no puedo encontrar respuestas sobre C # 3.5 ?

Esta pregunta es principalmente para ayudar a aquellos que buscan una respuesta usando un número de versión incorrecto, por ejemplo, C # 3.5 . La esperanza es que cualquiera que no encuentre una respuesta con el número de versión incorrecto encuentre esta pregunta y luego busque nuevamente con el número de versión correcto.

Jon Skeet
fuente
74
Esta es una de una buena fuente para entender todo. en.wikipedia.org/wiki/C_Sharp_(programming_language)
1
¿No debería ese segundo párrafo estar en un comentario en lugar de la pregunta, ya que no es parte de la pregunta
TankorSmash
21
@TankorSmash: Creo que es lo suficientemente importante como contexto de la pregunta que vale la pena mantenerlo donde está. OMI, por supuesto.
Jon Skeet el

Respuestas:

2875

Historial de versiones de lenguaje C #:

Estas son las versiones de C # conocidas en el momento de escribir esto:

En respuesta a la pregunta del OP:

¿Cuáles son los números de versión correctos para C #? ¿Qué salió cuando? ¿Por qué no puedo encontrar respuestas sobre C # 3.5?

No existe C # 3.5: la causa de confusión aquí es que C # 3.0 está presente en .NET 3.5. Sin embargo, el lenguaje y el marco se versionan de forma independiente, al igual que el CLR, que se encuentra en la versión 2.0 para .NET 2.0 a 3.5, .NET 4 presenta CLR 4.0, a pesar de los paquetes de servicios. El CLR en .NET 4.5 tiene varias mejoras, pero el control de versiones no está claro: en algunos lugares puede denominarse CLR 4.5 ( esta página de MSDN solía referirse a él de esa manera, por ejemplo), pero la Environment.Versionpropiedad aún informa 4.0. xxx

A partir del 3 de mayo de 2017, el equipo de lenguaje C # creó un historial de versiones y características de C # en su repositorio de GitHub: características agregadas en las versiones de lenguaje C # . También hay una página que rastrea las características del lenguaje próximas e implementadas recientemente .

Jon Skeet
fuente
26
Para quien sugirió incluir colecciones concurrentes: esta es una lista de características del lenguaje , no características del marco . Tenga en cuenta la falta de mencionar WPF, etc.
Jon Skeet
3
@nawfal: Roslyn es irrelevante para eso, y .NET native está algo separado. Pero básicamente, sí, creo que todavía es 4.
Jon Skeet
3
@nawfal: Ninguno de los cambios de idioma necesita cambios CLR.
Jon Skeet
99
@alper: Unity no sería una versión específica de C # tanto como una versión específica de .NET framework y / o tiempo de ejecución. IIRC, está efectivamente en CLR v2, pero puede tener algunos aspectos de .NET 3.5.
Jon Skeet
3
@markmnl: un proyecto generalmente no tiene un número de versión de C # especificado ... podría abrir el mismo proyecto en diferentes versiones de Visual Studio y descubrir que el mismo código funciona en uno pero no en otro. Usted puede limitar la versión C #, aunque eso se hace en una sintáctica en lugar de base semántica. Pero sí, si crea un proyecto dirigido a .NET 4 en Visual Studio 2015, puede usar la mayoría de las características de C # 6 ...
Jon Skeet
328

Esto es lo mismo que la mayoría de las respuestas aquí, pero está tabulado para mayor facilidad, y tiene versiones de Visual Studio y .NET para completar.

╔════════════╦════════════╦══════════════╦═════════════╦══════════════╗
║ 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.7.2     ║     4       ║   Apr 2018   ║
║    7.3     ║ 2017(v15.7)║              ║             ║   May 2018   ║
║    8.0     ║    2019    ║    4.8       ║     4       ║   Apr 2019   ║    
╚════════════╩════════════╩══════════════╩═════════════╩══════════════╝

Nota: el desarrollo .NET es bastante independiente de VS en estos días, no hay correlación entre las versiones de cada uno.
Consulte " Versiones y dependencias de .NET Framework " para obtener más información.

nawfal
fuente
77
¿Qué pasa con las versiones de .NET Core?
Pac0
1
El desarrollo de @ Pac0 .NET Core es bastante independiente del desarrollo de VS y es difícil realizar un seguimiento (siendo de código abierto). De hecho, todos los VS, .NET y .NET Core están iterando bastante rápido.
nawfal
C # 8.0 y NET Framework 4.8 con la comunidad VS 2019 ? 1) developercommunity.visualstudio.com/idea/612733/… 2) stackoverflow.com/questions/56651472/…
Kiquenet
303

El mayor problema al tratar con los números de versión de C # es el hecho de que no está vinculado a una versión de .NET Framework, que parece deberse a las versiones sincronizadas entre Visual Studio y .NET Framework.

La versión de C # está realmente vinculada al compilador, no al marco. Por ejemplo, en Visual Studio 2008 puede escribir C # 3.0 y apuntar a .NET Framework 2.0, 3.0 y 3.5. La nomenclatura C # 3.0 describe la versión de la sintaxis de código y las características compatibles de la misma manera que ANSI C89, C90, C99 describe la sintaxis / características de código para C.

Eche un vistazo a Mono y verá que Mono 2.0 (en su mayoría, la versión 2.0 implementada de .NET Framework a partir de las especificaciones de ECMA) admite la sintaxis y las características de C # 3.0.

Bryan Rehbein
fuente
195
  • C # 1.0 con Visual Studio.NET

  • C # 2.0 con Visual Studio 2005

  • C # 3.0 con Visual Studio 2008

  • C # 4.0 con Visual Studio 2010

  • C # 5.0 con Visual Studio 2012

  • C # 6.0 con Visual Studio 2015

  • C # 7.0 con Visual Studio 2017

  • C # 8.0 con Visual Studio 2019

iTSrAVIE
fuente
83

VERSIÓN_____ ESPECIFICACIÓN DE IDIOMA ______MICROSOFT COMPILER

C # 1.0 / 1.2 de____ diciembre de 2001 ? / 2003 ? ___________Enero 2002 ?

C # 2.0 _______Septiembre 2005________________ Noviembre 2005 ?

C # 3.0 _______Mayo de 2006_____________________ Noviembre de 2006 ?

C # 4.0 _______Marzo de 2009 (borrador) ¿______________ Abril de 2010 ?

C # 5.0; lanzado con .NET 4.5 en agosto de 2012

C # 6.0; lanzado con .NET 4.6 2015

C # 7.0; lanzado con .NET 4.7 2017

C # 8.0; lanzado con .NET 4.8 2019

maxwellb
fuente
8
¿De dónde obtuvo una especificación de lenguaje C # 2.0 en diciembre de 2002? ¿Igualmente C # 4 en junio de 2006? ¿Estás seguro de que no estás hablando de ediciones de ECMA, que son completamente diferentes?
Jon Skeet
44
simplemente consulte el siguiente enlace en.wikipedia.org/wiki/C_Sharp_(programming_language)
Pramodh
64

Historial de versiones de C #:

C # es un lenguaje de programación orientado a objetos simple y poderoso desarrollado por Microsoft.

C # ha evolucionado mucho desde su primer lanzamiento en 2002. C # se introdujo con .NET Framework 1.0.

La siguiente tabla enumera características importantes introducidas en cada versión de C #.

Y la última versión de C # está disponible en versiones de C # .

1 :ingrese la descripción de la imagen aquí

Milán
fuente
54

He resumido la mayoría de las versiones en esta tabla. Las únicas que faltan deberían ser las versiones de ASP.NET Core. También he agregado diferentes versiones de ASP.NET MVC.

Tenga en cuenta que ASP.NET 5 ha sido renombrado como ASP.NET Core 1.0 y ASP.NET MVC 6 ha sido renombrado como ASP.NET Core MVC 1.0.0. Creo que este cambio ocurrió alrededor de enero de 2016.

Incluí la fecha de lanzamiento de ASP.NET 5 RC1 en la tabla, pero aún no he incluido ASP.NET core 1.0 y otras versiones principales, porque no pude encontrar las fechas exactas de lanzamiento. Puede leer más sobre las fechas de lanzamiento de ASP.NET Core aquí: ¿ Cuándo está programado el lanzamiento de ASP.NET Core 1.0 (ASP.NET 5 / vNext)?

Versión

sin sentido
fuente
1
No estoy seguro de que tener MVC en la misma tabla sea útil, para ser honesto ... es solo en un calendario de lanzamiento separado, efectivamente.
Jon Skeet
@ Jon Esto es cierto, solo lo agregué aquí para cualquier persona que pueda necesitarlo, porque intenté averiguar las fechas de lanzamiento correspondientes de los marcos .NET, para comprender mejor todo el historial de versiones.
sentido
50

Puedes consultar las últimas versiones de C # aquí Versiones de C #

Israel Ocbina
fuente
37

Comparando los artículos de MSDN "Novedades en el lenguaje y compilador C # 2.0" y " Novedades en Visual C # 2005 ", es posible deducir que "C # major_version.minor_version" se acuña de acuerdo con la numeración de la versión del compilador.

Hay C # 1.2 correspondiente a .NET 1.1 y VS 2003 y también llamado Visual C # .NET 2003 .

Pero más adelante, Microsoft se detuvo para incrementar los números de la versión menor (después del punto) o para tener otros que no sean cero 0. Aunque debe tenerse en cuenta que C # correspondiente a .NET 3.5 se nombra en msdn.microsoft.com como "Visual C # 2008 Service Pack 1" .

Hay dos nombres paralelos: por numeración de versiones principales de .NET / compilador y por numeración de Visual Studio.

C # 2.0 es sinónimo de Visual C # 2005

C # 3.0 corresponde (o, más correctamente, puede apuntar) a:

Gennady Vanin Геннадий Ванин
fuente
3
No, C # correspondiente a .NET 3.5 se denomina "Visual C # 2008" si realmente desea utilizar esa numeración. Las características de C # 3.0 se introdujeron en "Visual C # 2008", por lo que en la página a la que está vinculado están en "Novedades de la versión de lanzamiento original de Visual C # 2008". Sin embargo, usar los números de versión de Visual Studio es una mala idea en general, ya que tiene muy poco sentido cuando se construye con Mono, por ejemplo. El lenguaje C # tiene números de versión bien especificados ... sabemos qué producto de Visual C # introdujo originalmente esa versión de C #, pero no son lo mismo.
Jon Skeet
@ JonSkeet, no, no lo hago. Quería pedirle a usted (y a otra persona que respondiera) que actualizara su respuesta, pero como mi comentario se hizo demasiado extenso, decidí ponerlo como respuesta. Gracias por su información
Gennady Vanin Геннадий Ванин
No creo que C # 3.0 pueda ejecutarse en VS 2005.
nawfal
7

C # 1.0 - Visual Studio .NET 2002

Classes
Structs
Interfaces
Events
Properties
Delegates
Expressions
Statements
Attributes
Literals

C # 1.2 - Visual Studio .NET 2003

Dispose in foreach
foreach over string specialization
C# 2 - Visual Studio 2005
Generics
Partial types
Anonymous methods
Iterators
Nullable types
Getter/setter separate accessibility
Method group conversions (delegates)
Static classes
Delegate inference

C # 3 - Visual Studio 2008

Implicitly typed local variables
Object and collection initializers
Auto-Implemented properties
Anonymous types
Extension methods
Query expressions
Lambda expression
Expression trees
Partial methods

C # 4 - Visual Studio 2010

Dynamic binding
Named and optional arguments
Co- and Contra-variance for generic delegates and interfaces
Embedded interop types ("NoPIA")

C # 5 - Visual Studio 2012

    Asynchronous methods
    Caller info attributes

C # 6 - Visual Studio 2015

Draft Specification online
Compiler-as-a-service (Roslyn)
Import of static type members into namespace
Exception filters
Await in catch/finally blocks
Auto property initializers
Default values for getter-only properties
Expression-bodied members
Null propagator (null-conditional operator, succinct null checking)
String interpolation
nameof operator
Dictionary initializer

C # 7.0 - Visual Studio 2017

Out variables
Pattern matching
Tuples
Deconstruction
Discards
Local Functions
Binary Literals
Digit Separators
Ref returns and locals
Generalized async return types
More expression-bodied members
Throw expressions

C # 7.1 - Visual Studio 2017 versión 15.3

Async main
Default expressions
Reference assemblies
Inferred tuple element names
Pattern-matching with generics

C # 7.2 - Visual Studio 2017 versión 15.5

Span and ref-like types
In parameters and readonly references
Ref conditional
Non-trailing named arguments
Private protected accessibility
Digit separator after base specifier

C # 7.3 - Visual Studio 2017 versión 15.7

System.Enum, System.Delegate and unmanaged constraints.
Ref local re-assignment: Ref locals and ref parameters can now be reassigned with the ref assignment operator (= ref).
Stackalloc initializers: Stack-allocated arrays can now be initialized, e.g. Span<int> x = stackalloc[] { 1, 2, 3 };.
Indexing movable fixed buffers: Fixed buffers can be indexed into without first being pinned.
Custom fixed statement: Types that implement a suitable GetPinnableReference can be used in a fixed statement.
Improved overload candidates: Some overload resolution candidates can be ruled out early, thus reducing ambiguities.
Expression variables in initializers and queries: Expression variables like out var and pattern variables are allowed in field initializers, constructor initializers and LINQ queries.
Tuple comparison: Tuples can now be compared with == and !=.
Attributes on backing fields: Allows [field: …] attributes on an auto-implemented property to target its backing field.

C # 8.0 - .NET Core 3.0 y Visual Studio 2019 versión 16.3

Nullable reference types: express nullability intent on reference types with ?, notnull constraint and annotations attributes in APIs, the compiler will use those to try and detect possible null values being dereferenced or passed to unsuitable APIs.
Default interface members: interfaces can now have members with default implementations, as well as static/private/protected/internal members except for state (ie. no fields).
Recursive patterns: positional and property patterns allow testing deeper into an object, and switch expressions allow for testing multiple patterns and producing corresponding results in a compact fashion.
Async streams: await foreach and await using allow for asynchronous enumeration and disposal of IAsyncEnumerable<T> collections and IAsyncDisposable resources, and async-iterator methods allow convenient implementation of such asynchronous streams.
Enhanced using: a using declaration is added with an implicit scope and using statements and declarations allow disposal of ref structs using a pattern.
Ranges and indexes: the i..j syntax allows constructing System.Range instances, the ^k syntax allows constructing System.Index instances, and those can be used to index/slice collections.
Null-coalescing assignment: ??= allows conditionally assigning when the value is null.
Static local functions: local functions modified with static cannot capture this or local variables, and local function parameters now shadow locals in parent scopes.
Unmanaged generic structs: generic struct types that only have unmanaged fields are now considered unmanaged (ie. they satisfy the unmanaged constraint).
Readonly members: individual members can now be marked as readonly to indicate and enforce that they do not modify instance state.
Stackalloc in nested contexts: stackalloc expressions are now allowed in more expression contexts.
Alternative interpolated verbatim strings: @$"..." strings are recognized as interpolated verbatim strings just like $@"...".
Obsolete on property accessors: property accessors can now be individually marked as obsolete.
Permit t is null on unconstrained type parameter

[fuente]: https://github.com/dotnet/csharplang/blob/master/Language-Version-History.md

sayah imad
fuente
2

C # 8.0 es la última versión de c #. Solo es compatible con .NET Core 3.xy versiones más recientes. Muchas de las funciones más recientes requieren funciones de biblioteca y tiempo de ejecución introducidas en .NET Core 3.x

La siguiente tabla enumera el marco de destino con la versión y su versión predeterminada de C #.

Versión de lenguaje C # con framework Target

Fuente: versiones en lenguaje C #

Shivam Mishra
fuente
"Muchas de las funciones más recientes requieren funciones de biblioteca y tiempo de ejecución introducidas en .NET Core 3.x", en realidad no son muchas. La implementación del método predeterminado realmente requiere soporte de tiempo de ejecución, y los tipos de referencia anulables definitivamente funcionan mejor cuando se apunta a un marco con anotaciones, pero la característica funciona en general sin eso.
Jon Skeet