C#的正确版本号是什么?

2887
什么是C#的正确版本号?哪些版本是最新的?为什么我找不到有关"C# 3.5"的任何答案?
这个问题主要是为了帮助那些使用错误版本号搜索答案的人,例如“ C#3.5”。希望任何未能找到正确答案的人都能找到这个问题,然后使用正确的版本号再次进行搜索。请保留原始HTML标签。

92
这是一个了解C#编程语言的好来源之一。http://en.wikipedia.org/wiki/C_Sharp_(programming_language) - user725388
1
第二段应该是一个注释而不是问题,因为它不是问题的一部分。 - TankorSmash
31
我认为它作为问题背景是足够重要的,因此值得保留在原地。当然,这只是我的看法。 - Jon Skeet
https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/configure-language-version - kotpal
14个回答

3188

C#语言版本历史:

以下是此篇文章撰写时所知晓的C#语言版本:

  • C# 1.0 released with .NET 1.0 and VS2002 (January 2002)
  • C# 1.2 (bizarrely enough); released with .NET 1.1 and VS2003 (April 2003). First version to call Dispose on IEnumerators which implemented IDisposable. A few other small features.
  • C# 2.0 released with .NET 2.0 and VS2005 (November 2005). Major new features: generics, anonymous methods, nullable types, and iterator blocks
  • C# 3.0 released with .NET 3.5 and VS2008 (November 2007). Major new features: lambda expressions, extension methods, expression trees, anonymous types, implicit typing (var), and query expressions
  • C# 4.0 released with .NET 4 and VS2010 (April 2010). Major new features: late binding (dynamic), delegate and interface generic variance, more COM support, named arguments, tuple data type and optional parameters
  • C# 5.0 released with .NET 4.5 and VS2012 (August 2012). Major features: async programming, and caller info attributes. Breaking change: loop variable closure.
  • C# 6.0 released with .NET 4.6 and VS2015 (July 2015). Implemented by Roslyn. Features: initializers for automatically implemented properties, using directives to import static members, exception filters, element initializers, await in catch and finally, extension Add methods in collection initializers.
  • C# 7.0 released with .NET 4.7 and VS2017 (March 2017). Major new features: tuples, ref locals and ref return, pattern matching (including pattern-based switch statements), inline out parameter declarations, local functions, binary literals, digit separators, and arbitrary async returns.
  • C# 7.1 released with VS2017 v15.3 (August 2017). New features: async main, tuple member name inference, default expression, and pattern matching with generics.
  • C# 7.2 released with VS2017 v15.5 (November 2017). New features: private protected access modifier, Span<T>, aka interior pointer, aka stackonly struct, and everything else.
  • C# 7.3 released with VS2017 v15.7 (May 2018). New features: enum, delegate and unmanaged generic type constraints. ref reassignment. Unsafe improvements: stackalloc initialization, unpinned indexed fixed buffers, custom fixed statements. Improved overloading resolution. Expression variables in initializers and queries. == and != defined for tuples. Auto-properties' backing fields can now be targeted by attributes.
  • C# 8.0 released with .NET Core 3.0 and VS2019 v16.3 (September 2019). Major new features: nullable reference-types, asynchronous streams, indices and ranges, readonly members, using declarations, default interface methods, static local functions, and enhancement of interpolated verbatim strings.
  • C# 9.0 released with .NET 5.0 and VS2019 v16.8 (November 2020). Major new features: init-only properties, records, with-expressions, data classes, positional records, top-level programs, improved pattern matching (simple type patterns, relational patterns, logical patterns), improved target typing (target-type new expressions, target typed ?? and ?), and covariant returns. Minor features: relax ordering of ref and partial modifiers, parameter null checking, lambda discard parameters, native ints, attributes on local functions, function pointers, static lambdas, extension GetEnumerator, module initializers, and extending partial.
  • C# 10.0 released with .NET 6.0 (November 2021). Major new features: record structs, struct parameterless constructors, interpolated string handlers, global using directives, file-scoped namespace declarations, extended property patterns, const interpolated strings, mixed assignment and declaration in deconstruction, async method builders (via attributes) for individual methods, the CallerArgumentExpression attribute for parameters, enhanced #line pragmas.
  • C# 11.0 released with .NET 7.0 (November 2022). Major new features: file-scoped types, generic math support, auto-default structs, pattern match Span<char> on a constant string, extended nameof scope, numeric IntPtr, UTF-8 string literals, required members, ref fields and scoped ref, raw string literals, improved method group conversion to delegate, warning wave 7, generic attributes, newlines in string interpolation expressions, list patterns

针对OP的问题的回答:

C#的正确版本号是什么?每个版本发布时间是什么时候?为什么我找不到关于C# 3.5的任何答案?

其实不存在C# 3.5 - 这里的混淆原因在于C# 3.0出现在.NET 3.5中。然而,语言和框架的版本是独立的,而CLR也是如此。CLR在.NET 2.0到3.5版本中为2.0,在.NET 4中引入了CLR 4.0,尽管有服务包的存在。NET 4.5中的CLR具有各种改进,但版本控制不明确:在某些地方可能会被称为CLR 4.5(例如这个MSDN页面曾经这样称呼它),但Environment.Version属性仍然报告4.0.xxx。

截至2017年5月3日,C#语言团队在他们的GitHub存储库上创建了一个C#版本和特性历史记录:在C#语言版本中添加的功能。还有跟踪最近实施的语言功能的页面


4
不确定该文档何时发布,但在2022年我们有此链接 - WLFree

480
2015 4.6 4 Jul 2015 2017 and later 4.6.1 and later 4 Mar 2017 7.0 Core 1.0 CoreCLR 1.0 Jun 2016 7.1 Core 1.1 CoreCLR 1.1 Nov 2016 7.2 Core 2.0 CoreCLR 2.0 Aug 2017 7.3 Core 2.1 CoreCLR 2.1 May 2018 8.0 Core 3.0 CoreCLR 3.0 Sep 2019 9.0 Core 5.0 CoreCLR 5.0 Nov 2020 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版本

该表列出了.NET Core自2015年以来的版本信息,其中包括版本号、发行日期和相关说明。
C# 版本 VS 版本 .NET 版本 发布日期 支持结束日期
2015 更新3 .NET Core 1.0 2016年6月 2019年6月
.NET Core 1.1 2016年11月 2019年6月
7.0 2017 2017年3月
7.1 2017(v15.3) .NET Core 2.0 2017年8月 2018年10月
7.3 2017(v15.7) .NET Core 2.1 2018年5月 2021年8月
.NET Core 2.2 2018年12月 2019年12月
8.0 2019 2019年4月
2019(v16.3) .NET Core 3.0 2019年9月 2020年3月
2019(v16.4) .NET Core 3.1 2019年12月 2022年12月
9.0 2019(v16.8) .NET 5 2020年11月 N/A
2020年11月 2022年5月
10.0 2022年 .NET 6 2021年11月 2024年11月
11.0 2022年 (17.4) .NET 7 2022年11月 2024年5月
.NET 8 2023年11月 2026年11月

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

** - 针对 .NET Core,不存在单独的 CLR(CoreCLR)版本。 .NET Core 版本就是 CoreCLR 版本。因此不需要提及。


注意:.NET 和 VS、编译器版本基本上是独立的,它们之间没有关联。上面的列表不意味着某个 .NET 版本与某个 C# 或 VS 版本相关联。这只是按照它们发布的时间顺序进行编制的(VS/C# 和 .NET)。一些版本同时发布,因此它们位于同一行。
有关更多信息,请参阅“.NET Framework 版本和依赖项”和“.NET 发布节奏”。


@Dai,我的回答中没有暗示 C# 8.0 与 .NET 4.8 相关联。实际上,在特定功能之外,从来没有要求某些编译器版本绝对需要某些 .NET 版本。这甚至在 C# 8.0 出现之前也是如此。我的回答只是追踪了 VS、.NET 和 C# 版本的时间线。我的原始回答是针对 .NET 完整框架的,直到它停止存在。您可以看到表格中没有其他 .NET Core 版本,因为我没有涵盖那部分。通过你的编辑,观众将失去有关 .NET 4.8 的信息。 - nawfal
请随意添加一个额外的列来记录.NET Core版本。 - nawfal
各位,请勿添加发布日期不匹配的值。当我最初编写此内容时,并没有打算将.NET版本与每个编译器版本关联起来,它只是各种C#相关发布的时间线。因此,您可以看到我省略了一些列值。这有助于我们更好地了解哪些发布是同时进行的。 - nawfal
我实际上是参考写的所有代码,但无论如何,没关系 :) - gurkan

330
处理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(基本实现了ECMA规范的.NET Framework 2.0)支持C# 3.0语法和特性。

222

99
版本 语言规范 微软编译器
C# 1.0/1.2 2001年12月?/2003年? 2002年1月?
C# 2.0 2005年9月 2005年11月?
C# 3.0 2006年5月 2006年11月?
C# 4.02009年3月(草案) 2010年4月?
C# 5.0 于2012年8月随.NET 4.5一起发布
C# 6.0 于2015年随.NET 4.6一起发布
C# 7.0 于2017年随.NET 4.7一起发布
C# 8.0 于2019年随.NET 4.8一起发布

8
你在2002年12月是从哪里得到C# 2.0语言规范的?同样,在2006年6月,你得到的C# 4规范也是吗?你确定你不是在谈论完全不同的ECMA版本吗? - Jon Skeet
4
请参考下面的链接:http://zh.wikipedia.org/wiki/C_Sharp - Pramodh

66
我已经在这张表格中总结了大部分版本,只有 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 年 1 月左右。
我已经在表格中包含了 ASP.NET 5 RC1 的发布日期,但我还没有包括 ASP.NET Core 1.0 和其他核心版本,因为我找不到确切的发布日期。您可以在此处阅读有关 ASP.NET Core 发布日期的更多信息:When is ASP.NET Core 1.0 (ASP.NET 5 / vNext) scheduled for release?

Version


1
老实说,我不确定将MVC放在同一张表中是否有帮助......实际上它只是有一个单独的发布计划。 - Jon Skeet
@Jon 这是真的,我在这里补充一下,以便任何可能需要它的人,因为我确实尝试查找.NET框架的相应发布日期,以便更好地了解整个版本历史。 - Mindless
https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/configure-language-version - Sarasjd

58
您可以在这里查看最新的C#版本。 C# Versions

对于Visual Basic:https://zh.wikipedia.org/wiki/Visual_Basic_.NET - AlainD
https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/configure-language-version - Sarasjd
1
由于此答案现在已经非常过时,您能否删除它? - Jon Skeet

41

将MSDN文章“C# 2.0语言和编译器的新特性”“Visual C# 2005的新功能”进行比较,可以推断出“C# major_version.minor_version”是根据编译器的版本编号的名称。

对应于.NET 1.1和VS 2003的C# 1.2,也称为Visual C# .NET 2003

但是此后Microsoft停止增加次要版本(点号后面的版本号)或使其不为零,0。尽管值得注意的是,在msdn.microsoft.com中对应于.NET 3.5的C#被命名为“Visual C# 2008 Service Pack 1”

有两个并行的命名方式:根据主要.NET/编译器版本编号和根据Visual Studio编号。

C# 2.0Visual C# 2005的同义词

C# 3.0对应(或更准确地说,可以定向到):


2
这个回答非常过时了 - 而且所有的内容都已经在被接受的回答中涵盖了。我强烈建议您删除这个回答。 - Jon Skeet

19

C# 1.0 - Visual Studio .NET 2002

  • 结构体
  • 接口
  • 事件
  • 属性
  • 委托
  • 表达式
  • 语句
  • 特性
  • 字面量

C# 1.2 - Visual Studio .NET 2003

  • foreach 中的 Dispose
  • 字符串 foreach 特化
  • C# 2 - 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)
  • 将静态类型成员导入到命名空间中
  • 异常筛选器
  • 在catch/finally块中等待
  • 自动属性初始化程序
  • 只读属性的默认值
  • 表达式体成员
  • Null传播器 (null-conditional操作符,简洁的null检查)
  • 字符串插值
  • nameof运算符
  • 字典初始化程序

C# 7.0 - Visual Studio 2017

  • 输出变量
  • 匹配模式
  • 元组
  • 解构
  • Discards
  • 本地函数
  • 二进制文字
  • 数字分隔符
  • Ref返回和本地
  • 广义异步返回类型
  • 更多的表达式体成员
  • Throw表达式

C# 7.1 - Visual Studio 2017版本15.3

  • Async主函数
  • 默认表达式
  • 参考程序集
  • 推断的元组元素名称
  • 泛型模式匹配

C# 7.2 - Visual Studio 2017版本15.5

  • Span和ref-like类型
  • in参数和readonly引用
  • Ref条件语句
  • 非尾随命名参数
  • 私有保护访问级别
  • 基础指示符后的数字分隔符

C# 7.3 - Visual Studio 2017 版本 15.7

  • System.Enum、System.Delegate和非托管约束。
  • Ref本地重新赋值:Ref本地变量和ref参数现在可以使用ref赋值运算符(= ref)进行重新赋值。
  • Stackalloc初始化程序:堆栈分配的数组现在可以进行初始化,例如Span x = stackalloc[] { 1, 2, 3 };。
  • 可移动固定缓冲区索引:固定缓冲区可以直接进行索引而不需要先进行固定。
  • 自定义fixed语句:实现适当GetPinnableReference的类型可以在fixed语句中使用。
  • 改进的重载候选项:某些重载解析候选项可以提前排除,从而减少歧义。
  • 初始化器和查询中的表达式变量:类似于out var和模式变量的表达式变量允许在字段初始化器、构造函数初始化器和LINQ查询中使用。
  • Tuple比较:元组现在可以使用==和!=进行比较。
  • 支持在自动实现的属性上使用[field:…]属性来定位其后备字段。

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

  • 可空引用类型: 使用?、notnull约束和注释属性在API中表达引用类型的空性意图,编译器将使用这些来尝试检测可能被取消引用或传递给不合适API的空值。
  • 默认接口成员: 接口现在可以有具有默认实现的成员,以及静态/私有/受保护/内部成员(除了状态,即没有字段)。
  • 递归模式: 位置和属性模式允许更深入地测试对象,并且switch表达式允许以紧凑的方式测试多个模式并产生相应的结果。
  • 异步流: await foreach和await using允许对IAsyncEnumerable集合和IAsyncDisposable资源进行异步枚举和处理,而async-iterator方法则允许方便地实现此类异步流。
  • 增强的using: 添加了一个using声明,具有隐式范围,using语句和声明允许使用模式处理ref结构的处理。
  • 范围和索引: i..j语法允许构造System.Range实例,^k语法允许构造System.Index实例,它们可以用于索引/切片集合。
  • 空合并赋值: ??=允许在值为null时有条件地赋值。
  • 静态局部函数: 使用static修改的局部函数不能捕获this或局部变量,而局部函数参数现在会遮盖父作用域中的局部变量。
  • 非托管泛型结构体: 只有非托管字段的通用结构类型现在被认为是非托管的(即它们满足非托管约束)。
  • 只读成员: 现在可以将单个成员标记为readonly以指示和强制执行它们不修改实例状态。
  • 嵌套上下文中的stackalloc: stackalloc表达式现在允许在更多的表达式上下文中使用。
  • 替代插值文字串: @$"..."字符串被识别为与$@"..."一样的插值文字串。
  • 过时的属性访问器: 属性访问器现在可以分别标记为过时。
  • 允许在无限制类型参数上使用t is null
[来源]: https://github.com/dotnet/csharplang/blob/master/Language-Version-History.md C#语言版本历史记录

11
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

  • 泛型
  • 分部类型
  • 匿名方法
  • 迭代器
  • 可空类型
  • 私有设置器(属性)
  • 方法组转换(委托)
  • 协变和逆变
  • 静态类

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

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

C# 4.0 .NET Framework 4.0 Visual Studio 2010

  • 动态绑定(迟绑定)
  • 命名和可选参数
  • 泛型协变和逆变
  • 嵌入式Interop类型

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

  • 异步特性
  • 调用者信息

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

  • 表达式主体方法
  • 自动属性初始化器
  • nameof表达式
  • 主构造函数
  • 在catch块中使用await
  • 异常筛选器
  • 字符串插值

C# 7.0 .NET Core 2.0 Visual Studio 2017

  • out变量
  • Tuples元组
  • Discards舍弃
  • 模式匹配
  • 局部函数
  • 广义异步返回类型
  • 数字文字语法改进

C# 8.0 .NET Core 3.0 Visual Studio 2019

  • 只读成员
  • 默认接口方法
  • 模式匹配增强:
    • Switch表达式
    • 属性模式
    • 元组模式
    • 位置模式
  • Using声明
  • 静态局部函数
  • 可释放ref结构体
  • 可空引用类型
  • 异步流
  • 可异步释放的资源
  • 索引和范围
  • 空值合并赋值
  • 非托管构造类型
  • 在嵌套表达式中使用stackalloc
  • 内嵌逐字字符串的增强

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接