C#的正确版本号是什么?什么时候出来的?为什么我找不到有关C#3.5的任何答案?

这个问题主要是为了帮助那些使用错误版本号(例如C#3.5)搜索答案的人。希望任何没有找到错误版本号答案的人都能找到这个问题,然后用正确的版本号再次搜索。


当前回答

我总结了本表中的大多数版本。唯一缺少的应该是ASP.NET核心版本。我还添加了不同版本的ASP.NET MVC。

请注意,ASP.NET 5已更名为ASP.NET Core 1.0,ASP.NET MVC 6已更名为ASP.NETCore MVC 1.0.0。我相信这一变化发生在2016年1月左右。

我已经在表中列出了ASP.NET 5 RC1的发布日期,但我还没有包括ASP.NET核心1.0和其他核心版本,因为我找不到确切的发布日期。您可以在此处阅读有关ASP.NET Core的发布日期的更多信息:ASP.NET Core 1.0(ASP.NET 5/vNext)计划于何时发布?

其他回答

C#1.0-Visual Studio.NET 2002

类别结构体接口事件财产代表表达声明属性直接常量

C#1.2-Visual Studio.NET 2003

在foreach中处理foreach over字符串专用化C#-Visual Studio 2005泛型分部工程类型匿名方法遍历器可为空的类型Getter/setter单独可访问性方法组转换(委托)静态类委托推断

C#3-Visual Studio 2008

隐式类型的局部变量对象和集合初始化器自动实现的财产匿名类型扩展方法查询表达式Lambda表达式表达式树分部法

C#4-Visual Studio 2010

动态绑定命名参数和可选参数通用委托和接口的协差和反差嵌入式互操作类型(“NoPIA”)

C#5-Visual Studio 2012

异步方法呼叫者信息属性

C#6-Visual Studio 2015

在线起草规范编译器即服务(Roslyn)将静态类型成员导入命名空间异常筛选器等待捕获/最终块自动属性初始化器仅用于getter的财产的默认值表达式体成员空传播器(空条件运算符,简洁的空检查)字符串插值操作员姓名字典初始值设定项

C#7.0-Visual Studio 2017

输出变量图案匹配多元组解构丢弃本地函数二进制字面值数字分隔符Ref返回和本地通用异步返回类型更多表情丰富的成员抛出表达式

C#7.1-Visual Studio 2017版本15.3

异步主默认表达式引用程序集推断的元组元素名称与泛型匹配的模式

C#7.2-Visual Studio 2017版本15.5

Span和ref类类型在参数和只读引用中Ref条件非尾随命名参数受私人保护的可访问性基数说明符后的数字分隔符

C#7.3-Visual Studio 2017版本15.7

System.Enum、System.Delegate和非托管约束。Ref-local重新赋值:现在可以使用Ref赋值运算符(=Ref)重新赋值Ref-locals和Ref参数。Stacklalloc初始化器:现在可以初始化堆栈分配的数组,例如Span x=Stackalloc[]{1,2,3};。索引可移动固定缓冲区:固定缓冲区可以索引到,而无需首先固定。自定义固定语句:可以在固定语句中使用实现适当GetPinnableReference的类型。改进的过载候选:可以尽早排除一些过载解决候选,从而减少歧义。初始化器和查询中的表达式变量:字段初始化器、构造函数初始化器和LINQ查询中允许使用表达式变量,如out var和pattern变量。元组比较:元组现在可以与==和!=进行比较。支持字段上的属性:允许自动实现的属性上的[field:…]属性以其支持字段为目标。

C#8.0-.NET Core 3.0和Visual Studio 2019 16.3版

可为null的引用类型:使用?,notnull约束和注释属性,编译器将使用这些属性来尝试和检测可能的null值被取消引用或传递给不合适的API。默认接口成员:接口现在可以具有具有默认实现的成员,以及静态/私有/受保护/内部成员(状态除外)(即无字段)。递归模式:位置和属性模式允许更深入地测试对象,开关表达式允许测试多个模式并以紧凑的方式生成相应的结果。异步流:await foreach和await using允许异步枚举和处理IAsyncEnumerable集合和IAsyncDisposable资源,异步迭代器方法允许方便地实现此类异步流。增强的using:using声明添加了隐式作用域,using语句和声明允许使用模式处理ref结构。范围和索引:i..j语法允许构造System.Range实例,^k语法允许构造System.Index实例,这些实例可用于索引/切片集合。空合并赋值:??=允许在值为空时有条件地赋值。静态局部函数:用Static修改的局部函数无法捕获此变量或局部变量,而局部函数参数现在会在父范围中隐藏局部变量。非托管泛型结构:只有非托管字段的泛型结构类型现在被视为非托管(即,它们满足非托管约束)。只读成员:现在可以将单个成员标记为只读,以指示和强制它们不修改实例状态。嵌套上下文中的Stacklalloc:现在在更多的表达式上下文中允许使用Stackalloc表达式。可选的插值逐字字符串:@$“…”字符串被识别为插值逐字字符串,就像$@“…”一样。属性访问器过时:属性访问器现在可以单独标记为过时。对于无约束类型参数,Permit为空

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

C#8.0是C#的最新版本。它仅在.NET Core 3.x和更高版本上受支持。许多最新功能都需要.NETCore3.x中引入的库和运行时功能。

下表列出了具有版本的目标框架及其默认C#版本。

源代码-C#语言版本控制

您可以在此处查看最新的C#版本

这与这里的大多数答案相同,但为了方便起见,将其制成表格,并且它有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
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
4.8.1 4 Aug 2022

.NET Core之后的版本

C# version VS version .NET version Release date End of Support
2015 Update 3 .NET Core 1.0 Jun 2016 Jun 2019
.NET Core 1.1 Nov 2016 Jun 2019
7.0 2017 Mar 2017
7.1 2017 (v15.3) .NET Core 2.0 Aug 2017 Oct 2018
7.3 2017 (v15.7) .NET Core 2.1 May 2018 Aug 2021
.NET Core 2.2 Dec 2018 Dec 2019
8.0 2019 Apr 2019
2019 (v16.3) .NET Core 3.0 Sep 2019 Mar 2020
2019 (v16.4) .NET Core 3.1 Dec 2019 Dec 2022
9.0 2019 (v16.8) .NET 5 Nov 2020 May 2022
10.0 2022 .NET 6 Nov 2021 Nov 2024
11.0 2022 (17.4) .NET 7 Nov 2022 May 2024
.NET 8 Nov 2023 Nov 2026

*-.NET 5.0不是.NET framework的更新版本,而是.NET Core 3。从.NET 5.0开始,没有更新版本的.NET完整框架。

**-.NET Core没有单独的CLR(CoreCLR)版本。无论.NET Core版本是什么,都是CoreCLR版本。所以不提它。


注意:.NET在很大程度上独立于VS和编译器版本,每个版本之间没有相关性。以上列表并不意味着某些版本的.NET与某些C#或VS版本绑定。这只是按照发布的时间顺序(VS/C#和.NET)编译的。有些发布恰好在一起,因此它们位于同一行。有关详细信息,请参阅“.NET Framework版本和依赖项”和“.NET发布节奏”。

Version     .NET Framework     Visual Studio     Important Features

C#1.0.NET Framework 1.0/1.1 Visual Studio.NET 2002

基本功能

C#2.0.NET Framework 2.0 Visual Studio 2005

泛型分部工程类型匿名方法遍历器可为空的类型私有setter(财产)方法组转换(委托)协方差和反方差静态类

C#3.0.NET Framework 3.0\3.5 Visual Studio 2008

隐式类型的局部变量对象和集合初始化器自动实现的财产匿名类型扩展方法查询表达式Lambda表达式表达式树分部方法

C#4.0.NET Framework 4.0 Visual Studio 2010

动态绑定(后期绑定)命名参数和可选参数通用协变量和反变量嵌入式互操作类型

C#5.0.NET Framework 4.5 Visual Studio 2012/2013

异步功能呼叫者信息

C#6.0.NET Framework 4.6 Visual Studio 2013/2015

表达式实体方法自动属性初始值设定项表达式名称主构造函数在挡块中等待异常筛选器字符串插值

C#7.0.NET Core 2.0 Visual Studio 2017

输出变量多元组丢弃图案匹配本地功能通用异步返回类型数字文字语法改进

C#8.0.NET Core 3.0 Visual Studio 2019

只读成员默认接口方法图案匹配增强功能:切换表达式属性模式褶皱图案位置模式使用声明静态局部函数一次性引用结构可为空的引用类型异步流异步一次性指数和范围空合并赋值未管理的构造类型嵌套表达式中的Stacklalloc增强内插逐字字符串