【问题标题】:What are the correct version numbers for C#?C# 的正确版本号是什么?
【发布时间】:2010-09-19 20:14:35
【问题描述】:

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

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

【问题讨论】:

标签: c# .net visual-studio .net-framework-version compiler-version


【解决方案1】:

C#语言版本历史:

这些是撰写本文时已知的versions of C#

回答OP的问题:

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

没有 C# 3.5 之类的东西 - 造成混淆的原因是 C# 3.0 存在于 .NET 3.5 中。然而,语言和框架是独立版本的 - 就像 CLR 一样,它在 2.0 版中适用于 .NET 2.0 到 3.5,.NET 4 引入了 CLR 4.0,尽管有服务包。 .NET 4.5 中的 CLR 有各种改进,但版本控制不清楚:在某些地方它可能被称为 CLR 4.5(例如,this MSDN page 曾经这样称呼它),但 Environment.Version 属性仍然报告 4.0.xxx。

截至 2017 年 5 月 3 日,C# 语言团队在其 GitHub 存储库中创建了 C# 版本和功能的历史记录:Features Added in C# Language Versions。还有a page that tracks upcoming and recently implemented language features

【讨论】:

【解决方案2】:

处理 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, and C99 描述 C 的代码语法和功能一样。

看看Mono,你会发现Mono 2.0(主要是根据ECMA规范实现的.NET Framework 2.0版本)支持C# 3.0语法和特性。

【讨论】:

    【解决方案3】:
    Version Language specification Microsoft compiler
    C# 1.0/1.2 December 2001?/2003? January 2002?
    C# 2.0 September 2005 November 2005?
    C# 3.0 May 2006 November 2006?
    C# 4.0 March 2009 (draft) April 2010?
    C# 5.0 Released with .NET 4.5 in August 2012
    C# 6.0 Released with .NET 4.6 2015
    C# 7.0 Released with .NET 4.7 2017
    C# 8.0 Released with .NET 4.8 2019

    【讨论】:

    【解决方案4】:

    【讨论】:

      【解决方案5】:

      比较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

      但微软进一步停止增加次要版本(在点之后)数字或使它们不是零,0。不过需要注意的是,.NET 3.5 对应的 C# 在 msdn.microsoft.com 中被命名为"Visual C# 2008 Service Pack 1"

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

      C# 2.0Visual C# 2005 的同义词

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

      【讨论】:

        【解决方案6】:

        您可以查看最新的 C# 版本here

        【解决方案7】:

        这与此处的大多数答案相同,但为方便起见以表格形式显示,并且为了完整起见,它具有 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.7.2 4 Apr 2018
        7.3 2017 (v15.7) May 2018
        8.0 2019 4.8 4 Apr 2019
        9.0 2019 (v16.8) 5.0* ** Nov 2020

        .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.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
        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 Feb 2022
        10.0 2022 .NET 6 Nov 2021 Nov 2024
        .NET 7 Nov 2022 Feb 2023
        .NET 8 Nov 2023 Nov 2026

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

        ** - There are no separate CLR (CoreCLR) versions for .NET Core. .NET Core 版本是 CoreCLR 版本。所以不提了。


        注意: .NET 开发现在几乎独立于 VS,每个版本之间没有关联。
        请参阅“.NET Framework versions and dependencies”和“.NET release cadence”了解更多信息。

        【讨论】:

        • @Dai,在我的回答中没有暗示 C# 8.0 与 .NET 4.8 绑定事实上,除了少数几个特性之外,从来没有要求某些编译器版本绝对需要某些 .NET 版本.甚至在 C# 8.0 之前也是如此。我的回答只是跟踪 VS、.NET 和 C# 版本的时间线。我最初的答案是在 .NET 完整框架的上下文中,直到它不复存在。您可以看到表中没有其他 .NET Core 版本,因为我也没有费力地介绍它。通过您的编辑,查看者将丢失有关 .NET 4.8 的信息。
        • 请随时为 .NET Core 版本添加额外的列。
        • 您为我的编辑写了“不公平”。我从.NET release cadence 添加了它,我也添加到了帖子中。你也应该删除它。我的意思是这不是一个估计。如果您不想,我可以写另一个答案,但我认为这样不公平,因为这是您的想法。
        • @gurkan 很公平,有道理。我带回了你的更改,做了一些更正。
        • @all,如果发布日期不匹配,请不要添加值。当我最初写这篇文章时,我并不打算将 .net 版本与每个编译器版本相关联。它只是各种 C# 相关版本的时间表。所以很自然你会看到我省略了一些列值。这有助于我们更好地了解所有版本是一起制作的。
        【解决方案8】:

        我已经总结了这张表中的大部分版本。唯一缺少的应该是 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?

        【讨论】:

        • 我不确定将 MVC 放在同一个表中是否有帮助,老实说......它只是在一个单独的发布时间表上有效。
        • @Jon 这是真的,只是在这里添加它以供任何可能需要它的人使用,因为我确实尝试找出 .NET 框架的相应发布日期,以便我更好地了解整个版本历史。
        【解决方案9】:

        C# 1.0 - Visual Studio .NET 2002

        • 结构
        • 接口
        • 活动
        • 属性
        • 代表
        • 表达式
        • 声明
        • 属性
        • 文字

        C# 1.2 - Visual Studio .NET 2003

        • 在 foreach 中处理
        • 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 块中等待
        • 自动属性初始化器
        • getter-only 属性的默认值
        • 表情丰富的成员
        • Null 传播器(null 条件运算符,简洁的 null 检查)
        • 字符串插值
        • 运营商名称
        • 字典初始化器

        C# 7.0 - Visual Studio 2017

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

        C# 7.1 - Visual Studio 2017 版本 15.3

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

        C# 7.2 - Visual Studio 2017 版本 15.5

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

        C# 7.3 - Visual Studio 2017 版本 15.7

        • System.Enum、System.Delegate 和非托管约束。
        • Ref 本地重新分配:Ref locals 和 ref 参数现在可以使用 ref 分配运算符 (= ref) 重新分配。
        • Stackalloc 初始化程序:现在可以初始化堆栈分配的数组,例如跨度 x = stackalloc[] { 1, 2, 3 };.
        • 为可移动的固定缓冲区编制索引:固定缓冲区无需先被固定即可被索引。
        • 自定义固定语句:实现合适的 GetPinnableReference 的类型可用于固定语句。
        • 改进的重载候选者:可以及早排除一些重载解决候选者,从而减少歧义。
        • 初始化程序和查询中的表达式变量:字段初始化程序、构造函数初始化程序和 LINQ 查询中允许使用 out var 和模式变量等表达式变量。
        • 元组比较:现在可以使用 == 和 != 比较元组。
        • 支持字段上的属性:允许自动实现的属性上的 [field: ...] 属性定位其支持字段。

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

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

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

        【讨论】:

          【解决方案10】:

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

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

          Source - C# language versioning

          【讨论】:

            【解决方案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

            • 动态绑定(后期绑定)
            • 命名和可选参数
            • 泛型协变和逆变
            • 嵌入式互操作类型

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

            • 异步功能
            • 来电信息

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

            • 表达式体方法
            • 自动属性初始化器
            • 表达式名称
            • 主构造函数
            • 在 catch 块中等待
            • 异常过滤器
            • 字符串插值

            C# 7.0 .NET Core 2.0 Visual Studio 2017

            • 输出变量
            • 元组
            • 丢弃
            • 模式匹配
            • 本地函数
            • 通用异步返回类型
            • 数字文字语法改进

            C# 8.0 .NET Core 3.0 Visual Studio 2019

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

            【讨论】:

              【解决方案12】:

              我一直在寻找 .NET、C#、CLR 和 Visual Studio 版本以及主要语言功能的简明历史。

              由于我在一个地方找不到包含我需要的所有信息的任何最新表格 - 我将 Microsoft 文档中的详细信息合并到我试图保留一个包含我正在寻找的内容的简明表格中.

              在这里可以找到:https://mantinband.github.io/dotnet-shmotnet/

              我可能有一些错误或遗漏的信息,所以请随时在这里打开一个问题或贡献:https://github.com/mantinband/dotnet-shmotnet

              先睹为快:

              【讨论】:

                猜你喜欢
                • 2019-04-30
                • 2017-11-14
                • 2020-09-20
                • 1970-01-01
                • 1970-01-01
                • 2012-06-22
                • 1970-01-01
                • 2017-11-05
                • 1970-01-01
                相关资源
                最近更新 更多